汇编语言第9周-高级汇编

上传人:油条 文档编号:47838774 上传时间:2018-07-05 格式:PPT 页数:56 大小:686.50KB
返回 下载 相关 举报
汇编语言第9周-高级汇编_第1页
第1页 / 共56页
汇编语言第9周-高级汇编_第2页
第2页 / 共56页
汇编语言第9周-高级汇编_第3页
第3页 / 共56页
汇编语言第9周-高级汇编_第4页
第4页 / 共56页
汇编语言第9周-高级汇编_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《汇编语言第9周-高级汇编》由会员分享,可在线阅读,更多相关《汇编语言第9周-高级汇编(56页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序设计主讲:江苏苏第9周 大课本周 主要内容 宏汇编与宏指令 高级汇编伪指令* 重复汇编 条件汇编 汇编控制语句* 汇编语言和C/C+语言混合编程* C语言程序的汇编输出 多模块程序设计的基本方法 程序库的建立汇编语言程序设计汇编语言程序设计3第7章 高级汇编语言技术 主要内容 宏汇编与宏指令 重复汇编 条件汇编 汇编控制语句* 汇编语言程序设计4宏汇编、重复汇编、条件汇编 统称宏结构宏(Macro)是汇编语言的一个特点,它是与子程序 类似又独具特色的另一种简化源程序的方法。宏(宏定义)具有宏名的一段汇编语句序列 宏定义时书写 宏指令宏名作为一条指令直接使用,相当于宏定 义体的缩写

2、宏调用时书写 宏展开汇编时用宏体代替宏指令的过程 宏汇编时实现宏汇编的概念汇编语言程序设计5 MACRO和ENDM是二个必须成对出现的关键字,它们分别表 示宏定义的开始和结束; MACRO和ENDM之间的部分是宏的定义体,它是由指令、伪 指令或引用其它宏所组成的程序片段,是宏所包含的具体内容 “宏名”是由程序员指定的一个合法的标识符,它代表该宏 宏名可以与指令助忆符、伪指令名相同。在这种情况下,宏指 令优先,而同名的指令或伪指令都失效;此方法不提倡 在ENDM的前面不要再写一次宏名,这与段或子程序定义的结 束方式有所不同; 在宏定义的首部可以列举若干个形式参数,每个参数之间要用 逗号分隔。宏定

3、义的格式宏名macro 形参表 宏定义体 汇编语言程序设计6宏定义例: mainbeginMACRO ;定义名为mainbegin的宏,无参数 mov ax,data;宏定义体 mov ds,ax ENDM;宏定义结束mainendMACRO retnum;带有形参retnum mov al,retnum;宏定义中使用参数 mov ah,4ch int 21h ENDMdispmsg MACRO string lea dx, offset string mov ah, 09h int 21h ENDM宏注释符汇编语言程序设计7宏调用的格式宏名实参表 msgdb this is a macro

4、instruction., $ start: mainbegin;宏调用,建立DS内容 dispmsg msg;宏调用,显示字符串 mainend 0;宏调用,返回DOS end start 宏调用的实质是在汇编过程中进行宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定 义的宏调用时,即用相应的宏定义体取代源程序的宏指令, 同时用位置匹配的实参取代形参汇编语言程序设计8宏展开在汇编时,用宏定义体的代码序 列替代宏指令的过程。start: mainbegin;宏指令1mov ax, data;宏展开1mov ds, axdispmsg msg;宏指令1 lea dx, offset s

5、tring;宏展开1mov ah, 09h1int 21hmainend 0;宏指令1mov al, 0;宏展开1mov ah, 4ch1int 汇编语言程序设计9宏定义例 shlextmacro shlreg, shlnum push cx mov cl, shlnum shl shlreg, cl pop cx endm宏指令 shlext ax, 6宏展开1push cx1mov cl, 061shl ax, cl1pop cx灵活使用宏的参数 -1宏定义时,参数可以 是常数、变量、存储单 元、指令(操作码)或 它们的一部分,也可以 是表达式;宏定义体可以是任何 合法的汇编语句,既可 以

6、是硬指令序列,又可 以是伪指令序列。汇编语言程序设计10 统一4条移位指令的宏指令 shiftmacro soprand, snum, sopcode push cx mov cl, snum s标号后不能写指令,但可写注释 汇编语言程序设计14;宏定义 absolmacro oprd local next cmp oprd,0 jge next neg oprd next: endm;有二条宏调用 absol word ptr bx absol bx;宏展开11cmp word ptr bx,01jge ?00001neg word ptr bx1 ?0000:;宏展开21cmp bx,01

7、jge ?00011neg bx1 ?0001:必须独占一行局部标号伪指令例:汇编语言程序设计15宏与子程序的不同 LOCAL在子程序中用于说明局部变量,在不同的子程序 调用中,局部变量名不会改变; LOCAL在宏定义中用于说明局部标号,在不同的宏展开 中,标号由唯一的序号替代。 子程序的工作方式是每次调用执行相同的目标代码段; 宏调用的工作方式是每次调用会生成相关的汇编源语句 ,汇编程序再将它们翻译成位于多处的目标代码段。 子程序的参数通过变量或堆栈传递,子程序在调用后还 必须返回,因而执行时要花较多的时间; 宏的参数通过实参替换形参来传递,参数形式多样,宏 调用不需要返回。汇编语言程序设计

8、16比较仅是源程序级的简化:宏 调用在汇编时进行程序语 句的展开,不需要返回; 不减小目标程序,执行速 度没有改变通过形参、实参结合实现 参数传递,简捷直观、灵 活多变还是目标程序级的简化: 子程序调用在执行时由 CALL指令转向、RET指 令返回;形成的目标代码 较短,执行速度减慢需要利用寄存器、存储单 元或堆栈等传递参数宏子程序宏与子程序具有各自的特点,程序员应该根据具体问题 选择使用 当程序段较短或要求较快执行时,应选用宏;当程序段 较长或为减小目标代码时,要选用子程序汇编语言程序设计17宏库的建立与调用 宏库的建立 当源程序中包含较多的宏定义时,可以把这些宏定义单 独建一个文件,使用扩

9、展名.MAC或.INC表示。 宏库的调用 在使用宏库中的宏定义之前,要象C语言那样用伪指令 INCLUDE把有关“宏库”文件包含在用户的源程序中。eg. Include d: mymacros.mac 系统定义的宏 MASM 6.11系统定义了大量的标准宏,程序员能很方便 地使用它们。主要的系统宏库文件有:DOS.INC和 BIOS.INC,它们存放在系统的include子目录中。高级汇编伪指令 重复汇编 条件汇编 汇编控制语句* 汇编语言程序设计18这些伪指令会因汇编程序版本的不同 而有不同的形式和规则。汇编语言程序设计19重复汇编重复汇编指在汇编过程中,重复展开一段(基本) 相同的语句重复

10、汇编没有名字,不能被调用重复汇编常用在宏定义体中,也可以在一般汇编语 句中使用重复汇编伪指令有三个: REPEAT按参数值重复 FOR按参数个数重复 FORC按参数的字符个数重复最后,均用ENDM结束或MASM5.0对应写成 REPT IRP IRPC汇编语言程序设计20按参数值 重复REPEAT 重复次数重复体 ENDMchar = A REPEAT 26db charchar = char +1 ENDM1db char;等效于db A1char = char +11db char;等效于db B1char = char +1 .1db char;等效于db Z1char = char +

11、1汇编后汇编语言程序设计21按参数个数 重复FOR 形参,实参表重复体 ENDMFOR regad, push regad ENDM1push ax1push bx1push cx1push dx汇编后汇编语言程序设计22按参数字符个数 重复FORC 形参, 字符串重复体 ENDMFORC regad,dcbapop 满足,汇编分支语句体1 分支语句体1 ELSE;不满足,汇编分支语句体2 分支语句体2 ENDIF;条件汇编结束汇编语言程序设计24伪指令含义IF exp若数值表达式exp的值不为0,则语句组1包含在 目标文件中IFE exp若数值表达式exp的值为0,则语句组1包含在目 标文件

12、中IFDEF symb若符号symb有定义或被说明为EXTRN,则语句 组1包含在目标文件中IFNDEF symb若符号symb没有定义,也没被说明为EXTRN, 则语句组1包含在目标文件中IFB 在宏引用时,若该形参没有相应的实参相对应, 则语句组1包含在目标文件中IFNB 在宏引用时,若该形参有相应的实参相对应,则 语句组1包含在目标文件中 IFIDN , 若参数1参数2,则语句组1包含在目标文件中 IFDIF , 若参数1参数2,则语句组1包含在目标文件中IF1若汇编程序在第一遍扫描时,则语句组1包含在 目标文件中IF2若汇编程序在第二遍扫描时,则语句组1包含在 目标文件中汇编语言程序设

13、计25pdatamacro numIF num lt 100;如果num mov ah,4ch;没有参数 elsemov ax,4c00h+(retnum AND 0ffh) ; 有参数 endif int 21h ENDM例:修改宏定义mainend,使其可以不带参数调用mainendMACRO retnum ;带有形参retnum mov al,retnum;宏定义中使用参数 mov ah,4ch int 21h ENDM可以调用mainend 也可以调用mainend 汇编语言程序设计27宏的嵌套和递归*1、在宏定义体中出现其它宏调用,原则 是先定义后调用。 例: abs macro o

14、pr1, opr2 mopm sub, opr1, opr2 mopm add, opr1, opr2 endm2、在宏定义体中包含其他宏定义,原则 是只有先调用外层宏,才能调用内层 宏;不推荐此编程方式,降低了源程 序的可读性、可维护性!mopm macro op, v1, v2 mov ax, v2 op v1, ax 汇编语言程序设计28宏的递归调用例:书上例7.23:计算数X乘2N,通过宏递归来实现,利用IF 语句来结束递归。 定义宏: POWER MACRO X,N IFE NEXITM ENDIF SAL X,1COUNT = COUNT +1 IF COUNT - N POWER X, N ENDIF ENDM调用宏: Count =0 POWER X,4 宏展开: SAL X,1 SAL X,1 SAL X,1 SAL X,1 调用宏: Count =0 POWER X,汇编语言程序设计29灵活运用条件汇编 - 1书

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号