汇编语言程序设计-第七章_高级汇编语言技术.ppt
《汇编语言程序设计-第七章_高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《汇编语言程序设计-第七章_高级汇编语言技术.ppt(78页珍藏版)》请在三一文库上搜索。
1、第七章 高级汇编语言技术,河南师范大学计算机与信息技术学院,2,2020/1/29,本章内容提要,河南师范大学计算机与信息技术学院,3,2020/1/29,7.1 高级语言特性,河南师范大学计算机与信息技术学院,4,2020/1/29,MASM6.0引入高级语言的程序设计特性,条件控制伪指令 .IF .ELSE .ENDIF,循环控制伪指令 .WHILE .ENDW .REPEAT .UNTIL,过程声明和过程调用伪指令 .PROTO .INVOKE,河南师范大学计算机与信息技术学院,5,2020/1/29,7.1.1 条件控制伪指令,利用条件分支伪指令可以简化分支结构的编程。,格式:,.IF
2、 条件表达式 分支体 . ELSEIF 条件表达式 分支体 .ELSE 分支体 .ENDIF,条件表达式允许的操作符。,这些伪指令在汇编时要展开,自动生成相应的比较和条件转移指令序列,实现程序分支。,河南师范大学计算机与信息技术学院,6,2020/1/29,操作注意,运算符的优先级顺序:,逻辑非最高; 其次是比较类运算符; 最低是逻辑与、逻辑或。 圆括号可以改变优先级顺序。,确定操作数的符号:,条件表达式中的变量,若是用DB、DW、DD定义的,则一律视为无符号数。 若需要进行有符号数的比较,变量定义时要用SBYTE、SWORD、SDWORD。,河南师范大学计算机与信息技术学院,7,2020/1
3、/29,条件伪指令应用举例,例1 单分支,例2 双分支,例3 有无实根判断,河南师范大学计算机与信息技术学院,8,2020/1/29,7.1.2 循环控制伪指令,先判断后执行的WHILE结构伪指令格式: .WHILE 条件表达式 循环体 .ENDW,先执行后判断的UNTIL结构伪指令格式: .REPEAT .REPEAT 循环体 或 循环体 .UNTIL 条件表达式 .UNTILCXZ 条件表达式,.BREAK:无条件退出循环; .CONTINUE:转向循环开始。,河南师范大学计算机与信息技术学院,9,2020/1/29,操作注意,不带条件表达式的.repeat/.untilcxz伪指令将汇编
4、成一条loop指令,即重复执行直到CX减1后,CX=0;,带有条件表达式的.repeat/.untilcxz伪指令的循环结束条件是CX减1后等于0或指定的条件为真。,.untilcxz伪指令的条件表达式只能是比较:寄存器与寄存器、存储单元和常数;存储单元与常数相等或不等。,河南师范大学计算机与信息技术学院,10,2020/1/29,循环伪指令应用举例,例4 1100求和 WHILE结构,例5 1100求和 UNTILE结构,例6 数组中非负数的和,河南师范大学计算机与信息技术学院,11,2020/1/29,7.1.3 过程定义和过程调用伪操作,过程名 PROC 调用距离 语言类型 作用范围 U
5、SES 寄存器列表, 参数:类型 LOCAL 参数表 ;汇编语言语句 过程名 ENDP,要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐。 应该采用过程调用伪指令INVOKE。 使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明。,过程声明伪指令:用于事先声明过程的结构 过程名 PROTO 调用距离 语言类型, 参数:类型 过程调用伪指令 INVOKE 过程名,参数,.,例ltd.asm,河南师范大学计算机与信息技术学院,12,2020/1/29,7.2 宏汇编,河南师范大学计算机与信息技术学院,13,2020/1/29,宏结构,宏汇编、重复汇编、条件汇编宏结构,
6、河南师范大学计算机与信息技术学院,14,2020/1/29,7.2.1 宏定义、宏调用与宏展开,宏具有宏名的一段汇编语句序列,在宏定义时书写;,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法。,宏指令这段汇编语句序列的缩写,在宏调用时书写;,宏展开宏指令处用这段宏代替的过程,在宏汇编时实现,河南师范大学计算机与信息技术学院,15,2020/1/29,1. 宏定义,格式:,宏名 macro 形参表 宏定义体 endm,宏名:给出该宏定义的名称,调用时就使用宏名来调用该宏定义。,宏名必须以字母开头,可以是字母、数字或下划线组成的标识符。,形参:又称哑元。形
7、参表给出了宏定义中所用到的形式参数(或称虚参),参数之间用逗号隔开。,例7.1 宏定义,河南师范大学计算机与信息技术学院,16,2020/1/29,2. 宏调用,宏名 实参表,实参:又称实元。各参数之间用逗号隔开。,宏必须先定义后调用。,一般把宏定义放在程序中所有段的代码之前。,例7.1 宏调用,河南师范大学计算机与信息技术学院,17,2020/1/29,3. 宏展开,宏展开:在汇编时,用宏定义体的代码序列替代宏指令的过程。,而且用实参取代宏定义中的形参。在取代时,实参和形参是一一对应的。,一般来说,实参和形参的个数应相等。,当实参个数大于形参个数时,则多于的实参不予考虑;若实参个数小于形参个
8、数时,则多于的形参作“空”处理。,例7.1 宏展开,河南师范大学计算机与信息技术学院,18,2020/1/29,宏与子程序,宏: 仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变。 通过形参、实参结合实现参数传递,简捷直观、灵活多变。,子程序: 还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢 需要利用寄存器、存储单元或堆栈等传递参数,通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序。如图7.1所示。,河南师范大学计算机与信息技术学院,19,2
9、020/1/29,7.2.2 宏定义中的参数,宏的参数功能强大,颇具特色。配合宏,还有宏操作符和有关伪指令。,宏定义时:,可以无参数,如例7.2。 可以带有一个参数,例7.5 也可以具有多个参数;如例7.3、例7.4、例7.6、例7.7 参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;如例7.3、例7.4、例7.5 、例7.7。,宏定义体可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列;如例8。,河南师范大学计算机与信息技术学院,20,2020/1/29,宏操作符,;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展开时不出现。 &替换
10、操作符,用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符。 字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字符串实参中含有逗号、空格等间隔符号,则必须用这对操作符,以保证字符串的完整。 !转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义。 %表达式操作符,用在宏调用中,表示将后跟的一个表达式的值作为实参,而不是将表达式本身作为参数。,河南师范大学计算机与信息技术学院,21,2020/1/29,7.2.3 LOCAL伪操作,局部标号伪指令: LOCAL 标号列表,宏定义体采用了标号,应使用LOCAL加以说明。,
11、它必须是宏定义MACRO语句之后的第一条语句。,在MACRO和LOCAL之间不允许有注释和分号标志。,例7.8,河南师范大学计算机与信息技术学院,22,2020/1/29,7.2.4 在宏定义中使用宏,例7.9、例7.10、例7.11,河南师范大学计算机与信息技术学院,23,2020/1/29,7.2.5 列表伪操作,MASM提供.XALL、.LALL和.SALL来控制汇编清单中宏展开的列出情况。,.XALL为默认情况,它指示清单中只列出产生目标代码的宏展开;,.LALL指示列出包括注释在内的所有宏展开。,.SALL则不列出任何展开信息。,MASM6.0中,三个伪操作分别为:,.LISTMAC
12、ROALL .LISTMACRO .NOLISTMACRO,见P256 例7.12,河南师范大学计算机与信息技术学院,24,2020/1/29,7.2.6 宏库的建立和调用,宏库:包含若干宏定义的文件,扩展名为.MAC或.INC。,如果程序中定义了很多宏,或者用户可以把自己编程中常用的宏定义建立成一个独立的文件,即宏库。,当程序中需要宏库中的宏定义时,只需在程序的开始部分用INCLUDE语句说明即可。如: INCLUDE C:MACRO.MAC,汇编程序将把宏库中的所有宏定义都包含在应用程序中。,INCLUDE语句不一定要放在程序的最前面,但必须放在所有宏调用之前。,见P259261的代码,河
13、南师范大学计算机与信息技术学院,25,2020/1/29,7.2.7 PURGE和EXITM伪操作,宏定义删除伪指令 PURGE 宏名表,不需要某个宏定义时,可以把它删除。,宏定义退出伪指令 EXITM,伪指令EXITM表示结束当前宏调用的展开。,河南师范大学计算机与信息技术学院,26,2020/1/29,7.3 重复汇编,河南师范大学计算机与信息技术学院,27,2020/1/29,重复汇编,重复汇编指在汇编过程中,重复展开一段(基本)相同的语句。,重复汇编没有名字,不能被调用。,重复汇编常用在宏定义体中,也可以在一般汇编语句中使用。,重复汇编伪指令有三个:,REPEAT按参数值重复; FOR
14、按参数个数重复 FORC按参数的字符个数重复 (在MASM5.0版本中依次是REPT/IRP/IRPC),最后,用ENDM结束。,河南师范大学计算机与信息技术学院,28,2020/1/29,7.3.1 重复伪操作,按参数值重复REPEAT/REPT:,REPEAT(REPT) 重复次数 重复体 ENDM,例7.13、例7.14、例7.15、例7.16,河南师范大学计算机与信息技术学院,29,2020/1/29,7.3.2 不定重复伪操作,按参数个数重复FOR/IRP:,FOR 形参,实参表 重复体 ENDM,按参数字符个数重复FORC/IRPC:,FORC 形参, 字符串 重复体 ENDM,例
15、7.17、例7.18,例7.19、例7.20,河南师范大学计算机与信息技术学院,30,2020/1/29,7.4 条件汇编,河南师范大学计算机与信息技术学院,31,2020/1/29,条件汇编语句,条件汇编伪指令在汇编过程中,根据条件决定汇编的语句。,IFxx 表达式 ;满足,汇编分支语句体1 分支语句体1 ELSE ;不满足,汇编分支语句体2 分支语句体2 ENDIF ;条件汇编结束,表达式中可以使用的关系操作符EQ、NE、LT、LE、GT和GE。,条件伪操作可以用在宏定义体内,也可以用在宏定义体外,还允许嵌套。,河南师范大学计算机与信息技术学院,32,2020/1/29,条件汇编伪操作,河
16、南师范大学计算机与信息技术学院,33,2020/1/29,条件伪操作应用举例,IF伪操作 例7.21、例7.22、例7.23 P266-268,IF1伪操作 例7.24 P269-230,IFNDEF伪操作 P270-274 例7.25,IFB伪操作 例7.26、例7.27 P274-276,IFIDN伪操作 P276-278 例7.28,例9,河南师范大学计算机与信息技术学院,34,2020/1/29,练习与作业,练习: 7.9、7.15 提交作业: 7.7、7.11,河南师范大学计算机与信息技术学院,35,2020/1/29,条件表达式中的操作符,格式: 数值表达式 & 位数,优先级顺序,
17、河南师范大学计算机与信息技术学院,36,2020/1/29,例1 单分支,求AX绝对值 .IF AX 0 ;等价于.IF SIGN? NEG AX ;满足,求补 .ENDIF MOV RESULT , AX,河南师范大学计算机与信息技术学院,37,2020/1/29,例2 双分支,.IF ax=5 mov bx , ax mov ax , 0 .ELSE dec ax .ENDIF,汇编后的列表文件,河南师范大学计算机与信息技术学院,38,2020/1/29,例2的列表文件,例2汇编后的列表文件: .IF ax=5 * cmp ax , 05h * jne C0001 mov bx , ax
18、mov ax , 0 .ELSE * jmp C0003 *C0001:dec ax .ENDIF *C0003:,河南师范大学计算机与信息技术学院,39,2020/1/29,例3 有无实根-1,.model small .stack .data _a sbyte ? _b sbyte ? _c sbyte ? tag byte ? .code .startup mov al , _b imul al mov bx , ax,河南师范大学计算机与信息技术学院,40,2020/1/29,例3 有无实根-2,mov al , _a imul _c mov cx , 4 imul cx .if sw
19、ord ptr bx=ax mov tag , 0 .else mov tag , 1 .endif .exit 0 end,河南师范大学计算机与信息技术学院,41,2020/1/29,例4,实现1100求和。 xor ax , ax mov cx , 100 .while cx!=0 add ax , cx dec cx .endw mov sum , ax,河南师范大学计算机与信息技术学院,42,2020/1/29,例5,xor ax , ax mov cx , 100 .repeat add ax , cx dec cx .until cx=0 mov sum , ax,.repeat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 语言程序设计 第七 高级 汇编语言 技术
链接地址:https://www.31doc.com/p-5028993.html