汇编语言及接口技术课件 h3-567 控制结构和宏_第1页
汇编语言及接口技术课件 h3-567 控制结构和宏_第2页
汇编语言及接口技术课件 h3-567 控制结构和宏_第3页
汇编语言及接口技术课件 h3-567 控制结构和宏_第4页
汇编语言及接口技术课件 h3-567 控制结构和宏_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、13 35 5 控制汇编语言程序语句控制汇编语言程序语句 MASM6.X版本提供了控制程序流程的三种汇编语句: IF语句 DOWHILE语句 REPEAT UNTIL语句其表达式常用的运算符见表3.9 (P96)。 该类伪指令的书写格式与高级语言的书写方式相类似,汇编程序在汇编时会自动增加转移指令和相应的标号。理解并掌握该知识,对将来学习编译原理课程也有一定的帮助。 2351 IF语句语句 对IF后面的表达式进行计算后再作为条件进行判断。 一般形式IF语句: 嵌套形式IF语句: 格式1:IF表达式 格式2: IF表达式 语句l 语句1 ELSE ELSEIF表达式 语句2 语句2 ENDIF

2、ELSE 语句n ENDIF3 例3.52 编程实现将键盘输入的字符、数字转换成十六进制数。 MODEL TINY CODE STARTUP MOV AH,1 ; 键盘输入 INT 21H IF ALA&ALF ; 4146H SUB AL,37H ELSE IF ALa&ALf ; 61 66H SUB AL,57H ELSE SUB AL,30H ; 30 39H ENDIF EXIT END 4 352 DOWHILE语句语句 对WHILE、BREAK、CONTINUE后面的表达式进行计算后再作为条件进行判断。 格式1:WHILE 表达式 语句 ENDW 是一种先判断后执行的循环语句。

3、控制流程:先计算表达式的值并判断。 5 格式2: BREAK IF表达式 控制程序当表达式条件成立时,退出本层循环体。可用于在程序中设置断点。 例3.53 BREAK IF EAX=0 ;当测试到EAX=0,则终止循环。 6 格式3: CONTINUE IF表达式 控制程序当表达式条件成立时,循环继续进行。否则跳过剩余语句到与它最近的循环条件判断语句。 在BREAK、 CONTINUE后面的IF表达式不需要ENDIF来结束。 与C语言的相应功能一致。 例3.54 CONTINUE IF AL=6 ;测试到AL=6时,继续进行循环。 7 例3.55 编程实现从BUF缓冲区10个字符中寻找$字符,

4、如找到显示$字符,否则显示0。 IF AL$ MOV DL,AL ELSE MOV DL,0 ENDIF MOV AH,2 ;显示字符 INT 21H EXIT END(用REPNZ SCASB指令) MODEL SMALL DATA BUF DB ABCDEFGI$K CODE STARTUP MOV CX,10 LEA BX,BUF MOV AL,0 WHILE AL!$ MOV AL,BX INC BX DEC CX BREAK IF CX0 ENDW8 353 REPEATUNTIL语句语句 对 UNTIL后面的表达式进行计算后再作为条件进行判断。循环至少执行一次。 格式:REPEAT

5、 语句 UNTIL 表达式 例3.56 编程实现将BUF缓冲区100个字节数据传到BLOCK缓冲区。 MODEL SMALL DATA BUF DB 10,20,88 ;(100个字节)BLOCK DB 100DUP(?) CODE STARTUP MOV CX,100 LEA BX,BUF LEA SI,BLOCK REPEAT MOV AL,BX MOV SI,AL INC SI INC BX UNTILCXZ ;CXCX1, 并判断CX0 EXIT END(用REP MOVSB指令)9 36 结构和记录 汇编语言还提供了用于说明复杂数据类型的伪指令,利用这些伪指令能够描述复杂数据类型,本

6、节介绍结构、联合和记录。 原则:原则:先说明、后定义、再访问 3 36 61 1 结构和联合结构和联合 结构是不同数据类型和不同长度数据区间的数据的集合。除了联合中的数据区间可以在内存重叠外,联合和结构是相同的。 10 结构中的任何一个数据区间,都具有相对于结构首地址的偏移地址的属性,结构的长度是所有数据区间长度的总和。 联合中的任何一个数据区间,其首地址均相同,因此,联合的长度是所有数据区间长度中最长区间的长度。所以联合允许在相同的区间定义不同的数据类型。换句话说,可以在程序中根据需要,改变同一区间的数据类型。 原则:先说明、后定义、再访问 11 1结构与联合结构与联合类型说明类型说明 在描

7、述结构与联合类型数据或使用结构与联合型变量之前,需要说明结构与联合类型。 一般格式如下: 结构名 STRUC|UNION 属性 数据定义语句序列 结构名 ENDS 属性:对齐属性,非独立属性 对齐属性:定义起始边界值,可以是1、2和4,缺省值是1。 12例3.57 下列语句说明了一个名为PERSON的结构类型: PERSON STRUC ID DD 0 ;偏移量为0 SCORE DW 60 ;偏移量为4 YEAR DB 10 ;偏移量为6 PERSON ENDS 结构中不同数据区间用不同数据类型来定义变量,数据区间称为结构的字段,相应的变量名称为字段名。一个结构中可以含有多个字段,各字段可以有

8、不同的长度(以字节为基本单位),可以独立地存取任一字段。13 2结构与联合结构与联合变量的定义变量的定义 字段名必须唯一。它代表了从结构的开始到相应字段的偏移。 变量的定义变量的定义: 变量名 结构类型名 变量名 结构类型名 初值 , 初值 变量名 结构类型名 常数DUP( 初值 , 初值 ) ;(同时定义多个结构变量,并赋初值,建立结构数组) 在说明结构类型时,可以给字段赋初值,也可以不赋初值。 14 例3.58 设已说明了上述结构PERSON,那么可定义如下结构变量: STUDENT1 PERSON ;三个字段都重赋初值 STUDENT2 PERSON ;字段SCORE、YEAR用缺省初值

9、 STUDENT3 PERSON ;三个字段均用缺省初值 PERSON 99DUP(?) ;定义99个结构变量,初值不变 15例3.59 DISP STRUC ;结构类型说明 A DB ? B DB ? C DB ? DISP ENDS PLAY STRUC ;结构类型说明 ONE DB 100DUP(?) TWO DB NAME THREE DISP ;结构类型说明中定义结构变量 PLAY ENDS PLAY1 PLAY ,TOM,0,0,0 ;字段ONE用缺省初值 16 4结构或联合类型结构或联合类型变量及其字段的访问变量及其字段的访问 通过结构变量名可直接存取结构变量。 若要存取结构变量

10、中的某一字段,则可采用如下形式: 结构变量名 . 结构字段名 结构字段的地址偏移值是结构起始地址的偏移值与相应字段偏移值之和。 17例3.62 程序实现对结构字段的访问 DATE STRUC ;说明结构类型 YEAR DW ? MONTH DB ? DAY DB ? DATE ENDS SOMEDAY DATE ;定义结构变量 TODAY DATE NEXTDAY DATE MOV AL,SOMEDAYMONTH ;访问结构变量, AL=3 MOV AH,TODAYDAY ;AH=18 MOV CX ,NEXTDAYYEAR ;CX=2002 MOV SI,OFFSET SOMEDAY MOV

11、 AX,SIYEAR ;AL=2000 18 例:有关结构 PERSON STRUC ;说明结构类型ID DD 0 ;偏移量为0SCORE DW 60 ;偏移量为4YEAR DB 10 ;偏移量为6PERSON ENDS STUDENT1 PERSON ;定义结构变量 STUDENT2 PERSON STUDENT3 PERSON PERSON 99DUP(?) ;访问结构变量及其字段MOV EAX,STUDENT1 ID ;EAX=100 MOV AX,STUDENT2 SCORE ;AX=60MOV EAX,STUDENT3 YEAR ;AL=10MOV SI,OFFSET STUDENT

12、1MOV AL,SIYEAR ;AL=2019 362 记录记录 记录和结构相似,记录的字段是位字符串,可以作为常数或者表达式使用。可以使用位操作指令进行二进制位数据的存取。 1记录类型的说明记录类型的说明 记录名 RECORD 字段 ,字段 字段格式如下: 字段名:宽度=表达式 宽度是常数(8位、16位或者32位),表示相应的字段所占的位数; 表达式的值将作为相应字段的缺省初值,若不设置默认为0。 20例如:COLOR RECORD RED:2,BLUE:4,YELLOW:2 三个字段总宽度正好是8位,所以也称为字节记录类型。如果不正好是8位、16位或32位,那么向右对齐,记录未说明高端用0

13、填充。例如: ABCD RECORD A1:5=11,A2:3=6,A3:2=3 21 2记录变量的定义记录变量的定义 一般格式如下: 变量名 记录名 变量名 记录名 变量名 记录名 常数 DUP(初值 ,初值 ) 记录变量名可以省略,如果省略,那么就不能直接通过符号名访问该记录变量。 22例3.64 设已定了记录类型COLOR, COLOR RECORD RED:2,BLUE:4,YELLOW:2 那么可定义如下记录变量: WARNING COLOR ;该字节的值是41H COLOR ;该字节的值是2FH COLORLST COLOR 32DUP () ;32个字节23 4记录专用操作符WI

14、DTH和MASK (1)操作符WIDTH 返回记录或记录字段的位数。一般格式如下: WIDTH 记录名 或者 WIDTH 记录字段名设记录COLOR如前面说明,那么: MOV AL,WIDTH COLOR ;AL=8 MOV AL,WIDTH RED ;AL=2 MOV AL,WIDTH BLUE ;AL=4 24(2)操作符MASK MASK 记录名 或者 MASK 记录字段名 返回记录或记录字段位的位置状态,返回的二进制数( 8位或16位)中相应于指定字段的各位为1,其余各位为0。 设记录COLOR如前面说明,那么: 例3.66 MOV AL,MASK RED ; AL=11000000B

15、 MOV AL,MASK BLUE ; AL=00111100B25 (3)记录字段 记录字段名也可作为一个特殊的操作符,直接返回该字段移到所在记录的最右端所需移动的位数。 设记录COLOR如前面说明,那么: 例3.67 MOV CL,RED ;CL=6 MOV CL,BLUE ;CL=226 3 37 7 宏宏 宏是宏汇编语言的主要特征之一。 在汇编语言源程序中,若某程序片段需要多次使用,为了避免重复书写,则可把它定义为一条宏指令(宏定义) 。 在写源程序时,程序员用宏指令来表示某个程序片段(宏调用);在汇编时,汇编程序会扫描源程序,检查是否有已说明的宏指令应用在程序中,如果有则将宏指令所代

16、表的内容插入该宏指令位置处(宏展开)。 273 37 71 1 宏指令的定义和使用宏指令的定义和使用 (包括:(包括:宏定义、宏调用、宏展开) 宏指令在使用之前要先定义。一般格式如下: 宏指令名 MACRO 形式参数表 宏定义体(由指令、伪指令和宏指令构成的程序片段) ENDM 宏指令名 宏指令名的指定和一般标号命名规则一致。形式参数表为可选项,由若干参数组成,各形式参数间用逗号分隔。 28 在定义宏指令后,可使用宏指令来表示对应的程序片段,这称为宏调用。 宏调用的一般格式如下: 宏指令名 实参数表 其中,实参数表中的实参数应该与宏定义时的形式参数表中的形式参数相对应。 29 例3.68(宏定

17、义) 定义一个宏将AL寄存器内的低4位转换为对应的十六进制数ASCII码: CHANGE MACRO AND AL,0FH ADD AL,90H DAA ADC AL,40H DAA ENDM 30例3.69 (宏调用)下面的程序片段调用了刚定义的宏。 MOV AL,BL ;转换并显示高4位 SHR AL,4 CHANGE MOV DL,AL MOV AH,2 INT 21H MOV AL,BL ;转换低4位 CHANGE 31 宏展开:在对源程序汇编时,汇编程序把源程序中的宏指令替换成对应的宏定义体。 上述程序片段在汇编时得到的指令如下: MOV AL,BL SHR AL,4 1 AND A

18、L,0FH 1 ADD AL,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H MOV AL,BL 1 AND AL,0FH 1 ADD AL,90H 1 DAA 1 ADC AL,40H 1 DAA MOV DL,AL MOV AH,2 INT 21H 32 372 宏指令中参数的使用宏指令中参数的使用 带参数使宏指令更具灵活性。 宏指令的参数可以是常数、寄存器、存储单元和操作码,还可以是表达式。 例3.70 定义一条宏指令CHAN,实现对指定寄存器的运算。 CHAN MACRO REG,COM,NUM AND REG,0FH C

19、OM REG,NUM ENDM 此后,可有如下格式的各种宏调用: CHAN BL,OR,30H CHAN AL,SUB,5 在汇编时,宏指令 CHAN BL,OR,30H 扩展成如下的代码: 1 AND BL,0FH 1 OR BL,30H33 373 宏与子程序的区别宏与子程序的区别 两种方法均能达到简化源程序的目的,但有质的不同。 两者的区别: 1关于目标程序。 2关于参数传递。宏调用时的参数由汇编程序通过实参替换形参的方式实现传递,所以参数很灵话。子程序调用时的参数须通过寄存器、堆栈或约定的内存单元传递。 3关于时间开销。宏调用是在汇编时完成,所以不需要额外的时间开销。子程序调用和子程序返回均需要时间,且还涉及堆栈。 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论