汇编语言第9周-高级汇编.ppt
《汇编语言第9周-高级汇编.ppt》由会员分享,可在线阅读,更多相关《汇编语言第9周-高级汇编.ppt(56页珍藏版)》请在三一办公上搜索。
1、汇编语言程序设计,主讲:江苏苏,第9周 大课,本周 主要内容,宏汇编与宏指令 高级汇编伪指令*重复汇编 条件汇编 汇编控制语句*汇编语言和C/C+语言混合编程*C语言程序的汇编输出 多模块程序设计的基本方法 程序库的建立,汇编语言程序设计,2,汇编语言程序设计,3,第7章 高级汇编语言技术,主要内容,宏汇编与宏指令 重复汇编 条件汇编 汇编控制语句*,汇编语言程序设计,4,宏汇编、重复汇编、条件汇编 统称宏结构,宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法。,宏(宏定义)具有宏名的一段汇编语句序列宏定义时书写宏指令宏名作为一条指令直接使用,相当于宏定
2、义体的缩写宏调用时书写宏展开汇编时用宏体代替宏指令的过程宏汇编时实现,宏汇编的概念,汇编语言程序设计,5,宏定义的格式,宏名macro 形参表宏定义体endm,汇编语言程序设计,6,宏定义例:,mainbeginMACRO;定义名为mainbegin的宏,无参数mov ax,data;宏定义体mov ds,axENDM;宏定义结束mainendMACRO retnum;带有形参retnummov al,retnum;宏定义中使用参数mov ah,4chint 21hENDMdispmsg MACRO stringlea dx,offset stringmov ah,09hint 21hENDM
3、,汇编语言程序设计,7,宏调用的格式,宏名实参表,msgdb this is a macro instruction.,$start:mainbegin;宏调用,建立DS内容dispmsg msg;宏调用,显示字符串mainend 0;宏调用,返回DOSend start 宏调用的实质是在汇编过程中进行宏展开 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参取代形参,汇编语言程序设计,8,宏展开,在汇编时,用宏定义体的代码序列替代宏指令的过程。,start:mainbegin;宏指令 1mov ax,data;宏展开 1
4、mov ds,axdispmsg msg;宏指令 1 lea dx,offset string;宏展开 1mov ah,09h 1int 21hmainend 0;宏指令 1mov al,0;宏展开 1mov ah,4ch 1int 21h,汇编语言程序设计,9,宏定义例 shlextmacro shlreg,shlnumpush cxmov cl,shlnumshl shlreg,clpop cxendm 宏指令shlext ax,6 宏展开 1push cx 1mov cl,06 1shl ax,cl 1pop cx,灵活使用宏的参数-1,宏定义时,参数可以是常数、变量、存储单元、指令(操
5、作码)或它们的一部分,也可以是表达式;宏定义体可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列。,汇编语言程序设计,10,统一4条移位指令的宏指令shiftmacro soprand,snum,sopcodepush cxmov cl,snums&sopcode soprand,clpop cxendm统一移位和循环移位8条指令的宏指令shrotmacro sroprand,srnum,sropcodepush cxmov cl,srnumsropcode sroprand,clpop cxendm,灵活使用宏的参数-2,此时sopcode的取值范围是:hl、hr、al、ar可
6、以得到指令SHL、SHR、SAL、SAR,此时sropcode的取值范围是:SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR,汇编语言程序设计,11,;宏定义dstringmacro stringdb&string&,0dh,0ah,$endm;宏调用dstringdstring;宏展开 1db This is a example.,0dh,0ah,$1db 0 Number 10,0dh,0ah,$,转义操作符,传递操作符,灵活使用宏的参数-3,替换操作符,汇编语言程序设计,12,宏操作符,;宏注释符,用于表示在宏定义中的注释。采用这个符号的注释,在宏展开时不出现&替换操作符,
7、用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符;又称为哑元前缀,在宏定义中连接前后符号构成一个符号 字符串传递操作符,用于括起字符串。在宏调用时,如果传递的字符串实参数含有逗号、空格等间隔符号,则必须用这对操作符,以保证字符串的完整!转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义%表达式操作符,用在宏调用中,表示将后跟的一个表达式的值作为实参,而不是将表达式本身作为参数,汇编语言程序设计,13,与宏有关的伪指令,局部标号伪指令LOCAL 标号列表宏定义体采用了标号,应使用LOCAL加以说明它必须是宏定义MACRO语
8、句之后的第一条语句宏展开时会按顺序自动生成唯一的序号式标号宏定义删除伪指令PURGE 宏名表当不需要某个宏定义时,可以把它删除;该指令后相关宏定义不再起作用中止宏扩展/宏定义退出伪指令EXITM遇到伪指令EXITM表示结束当前宏调用的展开转移伪指令GOTO标号;用于实现宏定义体内的转移功能,标号:;标号后不能写指令,但可写注释,汇编语言程序设计,14,;宏定义absolmacro oprdlocal nextcmp oprd,0jge nextneg oprdnext:endm;有二条宏调用absol word ptr bxabsol bx,;宏展开1 1cmp word ptr bx,0 1
9、jge?0000 1neg word ptr bx 1?0000:;宏展开2 1cmp bx,0 1jge?0001 1neg bx 1?0001:,必须独占一行,局部标号伪指令例:,汇编语言程序设计,15,宏与子程序的不同,LOCAL在子程序中用于说明局部变量,在不同的子程序调用中,局部变量名不会改变;LOCAL在宏定义中用于说明局部标号,在不同的宏展开中,标号由唯一的序号替代。子程序的工作方式是每次调用执行相同的目标代码段;宏调用的工作方式是每次调用会生成相关的汇编源语句,汇编程序再将它们翻译成位于多处的目标代码段。子程序的参数通过变量或堆栈传递,子程序在调用后还必须返回,因而执行时要花较
10、多的时间;宏的参数通过实参替换形参来传递,参数形式多样,宏调用不需要返回。,汇编语言程序设计,16,比较,仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变,还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数,宏,子程序,宏与子程序具有各自的特点,程序员应该根据具体问题选择使用当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序,汇编语言程序设计,17,宏库的建立与调用
11、,宏库的建立当源程序中包含较多的宏定义时,可以把这些宏定义单独建一个文件,使用扩展名.MAC或.INC表示。宏库的调用在使用宏库中的宏定义之前,要象C语言那样用伪指令INCLUDE把有关“宏库”文件包含在用户的源程序中。eg.Include d:mymacros.mac系统定义的宏MASM 6.11系统定义了大量的标准宏,程序员能很方便地使用它们。主要的系统宏库文件有:DOS.INC和BIOS.INC,它们存放在系统的include子目录中。,高级汇编伪指令,重复汇编 条件汇编 汇编控制语句*,汇编语言程序设计,18,这些伪指令会因汇编程序版本的不同而有不同的形式和规则。,汇编语言程序设计,1
12、9,重复汇编,重复汇编指在汇编过程中,重复展开一段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编常用在宏定义体中,也可以在一般汇编语句中使用重复汇编伪指令有三个:REPEAT按参数值重复FOR按参数个数重复FORC按参数的字符个数重复最后,均用ENDM结束,或MASM5.0对应写成REPTIRPIRPC,汇编语言程序设计,20,按参数值重复,REPEAT 重复次数 重复体ENDM,char=AREPEAT 26 db char char=char+1ENDM,1db char;等效于db A 1char=char+1 1db char;等效于db B 1char=char+1.1db
13、char;等效于db Z 1char=char+1,汇编后,汇编语言程序设计,21,按参数个数重复,FOR 形参,实参表 重复体ENDM,FOR regad,push regadENDM,1push ax 1push bx 1push cx 1push dx,汇编后,汇编语言程序设计,22,按参数字符个数重复,FORC 形参,字符串 重复体ENDM,FORC regad,dcba pop®ad&xENDM,1pop dx 1pop cx 1pop bx 1pop ax,汇编后,汇编语言程序设计,23,条件汇编,条件汇编伪指令在汇编过程中,根据条件决定汇编的语句IFxx 表达式;满足,汇编
14、分支语句体1分支语句体1 ELSE;不满足,汇编分支语句体2分支语句体2 ENDIF;条件汇编结束,汇编语言程序设计,24,汇编语言程序设计,25,pdatamacro num IF num lt 100;如果num 100,则汇编如下语句db num dup(?)ELSE;否则,汇编如下语句db 100 dup(?)ENDIFendmpdata 12;宏调用db 12 dup(?);宏汇编结果pdata 102;宏调用db 100 dup(?);宏汇编结果,条件汇编例:,汇编语言程序设计,26,mainendMACRO retnum;返回DOS,可不带参数ifb mov ah,4ch;没有参
15、数else mov ax,4c00h+(retnum AND 0ffh);有参数endifint 21hENDM,例:修改宏定义mainend,使其可以不带参数调用,mainendMACRO retnum;带有形参retnummov al,retnum;宏定义中使用参数mov ah,4chint 21hENDM,可以调用mainend也可以调用mainend 6,汇编语言程序设计,27,宏的嵌套和递归*,1、在宏定义体中出现其它宏调用,原则是先定义后调用。例:abs macro opr1,opr2mopm sub,opr1,opr2mopm add,opr1,opr2endm2、在宏定义体中包
16、含其他宏定义,原则是只有先调用外层宏,才能调用内层宏;不推荐此编程方式,降低了源程序的可读性、可维护性!,mopm macro op,v1,v2mov ax,v2op v1,axendm,汇编语言程序设计,28,宏的递归调用例:,书上例7.23:计算数X乘2N,通过宏递归来实现,利用IF语句来结束递归。定义宏:POWER MACRO X,NIFE N EXITMENDIFSAL X,1 COUNT=COUNT+1IF COUNT-N POWER X,NENDIFENDM,调用宏:Count=0POWER X,4宏展开:SAL X,1SAL X,1SAL X,1SAL X,1调用宏:Count=
17、0POWER X,0,汇编语言程序设计,29,灵活运用条件汇编-1,书上例7.25:检查将参与运算的符号有否定义。P.270定义宏:Divide MACRO dividend,divisor,quotientlocal comp,outcntr=0IFNDEF dividendcntr=1ENDIFIFNDEF divisorcntr=1ENDIFIFNDEF quotientcntr=1ENDIFif cntrexitmendif,mov ax,dividendmov bx,divisorsub cx,cx Comp:cmp ax,bxjb outsub ax,bxinc cxjmp com
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 高级 汇编
链接地址:https://www.31ppt.com/p-5993789.html