1、第七章 高级汇编语言技术w 子程序结构有很多优点提供模块化程序设计的条件,便于程序调试及维护等。编程效率高,可以节省存储空间及程序设计所花的时间。 w 但使用子程序也有一些不足:增加了一些额外开销,包括转子及返回、保存及恢复寄存器现场以及参数的传送等。 7.1 宏汇编7.2 重复汇编7.3 条件汇编宏( Macro) 是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法 统称宏结构7.1 宏汇编w 宏定义n 源程序中一段有独立功能的程序代码组成宏。它只需定义一次,就可以用一条宏指令多次调用它。宏定义用一组伪操作来实现。格式:宏定义名 MACRO 哑元表 .(宏定义体 ).E
2、NDM 7.1 宏汇编w 例 7.1 用宏指令定义两个字操作数相乘,得到一个16位的第三个操作数作为结果。宏定义:MULTIPLY MACRO OPR1,OPR2,RESULTPUSH DX PUSH AX MOV AX, OPR1 IMUL OPR2 MOV RESULT, AX POP AX POP DX ENDM7.1 宏汇编w 宏调用.MULTIPLY CX, VAR, XYZBX ;第一次宏调用.MULTIPLY 240, BX, SAVE ;第二次宏调用. 7.1 宏汇编w PUSH DX1 PUSH AXw MOV AX,CX ;第一个操作数在 CX中1 IMUL VAR ;第二
3、个操作数是变量VARw MOV XYZBX, AX ;结果存入实参 XYZBX1 POP AX1 POP DX 2 PUSH DX2 PUSH AX2 MOV AX,240 ;第一个操作数是立即数 240w IMUL BX ;第二个操作数在 BX中2 MOV SAVE, AX ;结果存入变量 SAVE2 POP AX2 POP DX 7.1 宏汇编一般说来,实元的个数和哑元的个数相等,但汇编程序并不要求它们必须相等。若实元个数大于哑元个数,则多余的实元不予考虑;若实元个数小于哑元个数,则多余的哑元作 “空 “处理。另外需要注意的是,宏展开后,即用实元取代哑元后,所得到的语句应该是有效的,即汇编语法应是正确的,否则汇编程序将会指示出错。 7.1 宏汇编TEST MACRO VAR1,VAR2mov ah,var1mov bh,var2cmp ah,bhjne exitmov ah,01hexit: mov ah,02hENDM7.1 宏汇编w 仅是 源程序级的简化 :宏调用 在汇编时 进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变w 通过形参、实参结合实现参数传递,简捷直观、灵活多变 还是 目标程序级的简化 :子程序调用在执行时 由 CALL指令转向、 RET指令返回;形成的目标代码较短,执行速度减慢 需要利用寄存器、存储单元或堆栈等传递参数比较宏 子程序