《汇编语言-宏指令》PPT课件.ppt_第1页
《汇编语言-宏指令》PPT课件.ppt_第2页
《汇编语言-宏指令》PPT课件.ppt_第3页
《汇编语言-宏指令》PPT课件.ppt_第4页
《汇编语言-宏指令》PPT课件.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

VIP免费下载

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

文档简介

本章学习要点: (1)宏汇编 (2)重复汇编 (3)条件汇编 一、宏、宏汇编 宏是计算机软件系统中一个广泛存在的概念。从办公软件OFFICE到程序开发语言C等等,可以把某项要操作的某一个过程定义为宏。 具体到在汇编语言中,宏也是汇编的主要特点之一,它是与子程序类似但又独具特色的另外一种简化源程序的方法。 (一)宏指令的定义和使用 宏指令在使用之前要先定义,其格式一般如下: 宏指令名 MACRO 形式参数表 ;参数的另外一个名称变元 (宏定义体) ENDM 可选的形式参数表可由若干参数组成,各形参间用逗号分隔。,例如,把通过DOS的1功能调用从键盘读入一个字符的程序片段定义为一个宏: GETCH MACRO MOV AH , 1 INT 21H ;从键盘键入一个字符时,该字符存入AL ENDM 在定义宏指令后,就可以通过宏指令来表示对应的程序片段,这成为宏调用。其格式为: 宏指令名 实参表 在对源程序汇编时,汇编程序把程序中的宏指令替换成对应的宏定义体,这称为宏展开或宏扩展。如: . GETCH 对应为 - MOV AH , 1 INT 21H ,尽管都实现了调用,但是宏调用和子程序的调用是有差别的:,宏调用更多地是表示一种替换!,(二)宏指令的用途 1. 缩短源代码 2. 扩充指令集 3. 更改某些指令助记符的意义 (宏指令的优先级高于指令和伪指令) (三)宏指令中参数的使用 宏指令可以不带参数,但往往带有参数的宏指令更具灵活性。 1. 指令的参数可以是常数、寄存器和存储单元,还可以是表达式。 例: MOV CL , 4 SAL AL , CL 如上述代码要多次使用,就可以定义为: SHIFT MACRO MOV CL , 4 SAL AL , CL ENDM,但是,如果每次的移位次数不同了,则可定义为: SHIFT MACRO X ;X为参数 MOV CL , X SAL AL , CL ENDM 这是,调用方式可为: SHIFT 4 ;移4位 SHIFT 6 ;移6位,显然,有参数时使用起来更灵活。 2. 宏指令的参数可以是操作码 例如:有下面的宏定义: MANDM MACRO OPR , X , Y MOV AX , X OPR AX , Y MOV X , AX ENDM 该宏定义的意思是?,改宏被调用和展开的时候,意义就明确了。如: MANDM MOV , BX , SI MANDM ADD , BX , ES:1234H 参数还可以是操作码的一部分: SHIFT MACRO X , Y , Z MOV CL , X S第1个“AL”为参数Z,第2个“AL”为参数Y 该宏的调用方式还可以是: “SHIFT 6 , BX , AR” 或 “SHIFT 8 , SI , HR ”等等。,3. 宏调用参数个数可以与定义时不一致 正常情况下,宏调用时使用的实参个数应该与宏定义时的形参个数一致,但汇编程序并不要求他们它们必须相等。 若实参个数多于形参个数,那么多余的实参被忽略; 若实参个数少于形参的个数,那么多余的形参用“空”代替。 4. 两个特殊的宏运算符 (1)强迫替换运算符 & 在宏定义中,若参数在其它字符的紧前或紧后,或者参数出现在带引号的字符串中时,就必须使用该运算符,以区分参数。 例:在下面宏指令JUMP中,参数CON作为操作码一部分。 JUMP MACRO CON , LAB J&CON LAB ENDM 则调用时,JUMP NZ HEAR - JNZ HEAR JUMP Z , THERE - JZ THERE,例:在下面宏指令MSGGEN中,两个参数合并成一个标号,一个参数用在字符串中。 MSGGEN MACRO LAB , NUM , XYZ LAB&NUM DB HELLO MR.&XYZ , 0DH , 0AH , 24H MSGGEN 则调用 MSGGEN MSG , 1 , TAYLOR 展开为:MSG1 DB HELLO MR.TAYLOR , 0DH , 0AH , 24H (2)表达式运算符 % 在宏调用时,使用该运算符把其后表达式的结果作为宏参替换,而非表达式自身。 宏MSGGEN的定义方式如上例。 则调用 MSGGEN MSG , %(2 + 3) , TOM 展开为: MSG5 DB HELLO MR.TOM , 0DH , 0AH , 24H,5. 与宏有关的伪指令 (1)局部标号说明伪指令 LOCAL 格式:LOCAL 标号表 标号表由标号构成,标号间用逗号分隔。 汇编程序在每次展开时,总把由LOCAL伪指令说明的标号用唯一的符号(?0000至?FFFF)代替,从而避免标号重定义错误。 例如:定义一个取绝对值的宏 ABSOL MACRO OPER LOCAL NEXT CMP OPER , 0 JGE NEXT NEG OPER NEXT: ENDM,宏调用 ABSOL VAR ABSOL BX 时,宏展开: ;主程序中的代码段 CMP VAR , 0 JGE ?0000 NEG VAR ?0000: CMP BX , 0 JGE ?0001 NEG BX ?0001: ,(2) 清除宏定义的为指令PURGE 格式: PURGE 宏名表 例如: AAA MACRO ENDM ;宏AAA可以有效使用的区间 PURGE AAA ;宏AAA不可有效地使用 ,例:利用宏指令修改某些助记符意义 宏定义: ADD MACRO OP1 , OP2 , RESULT ENDM 宏调用: ADD X , Y , Z ;使用宏ADD PURGE ADD ;使用指令ADD 当然,最后能不能达成所愿,还要具体看编译器是怎么来支持的!,6. 宏定义的嵌套 宏定义的嵌套有两种情况:宏定义体中含宏调用;宏定义体中含宏定义。 (1)宏定义体中宏调用 宏汇编语言允许在宏定义体中使用宏调用,但限制条件是:必须先定义后调用。 例如: DIF MACRO X , Y ; X Y 送 AX MOV AX , X SUB AX , Y ENDM DIFSQR MACRO OPR1 , OPR2 , RESULT; ( X Y)2 送 AX PUSH DX PUSH AX | POP AX DIF OPR1 , OPR2 ;注意堆栈 | POP DX IMUL AX | ENDM MOV RESULT , AX,(2)宏定义体中定义宏指令 宏定义体中还允许包含宏定义,但是只有在调用了外围的宏后,才能调用内层的宏。 例如: DEFMAC MACRO MACNAME , OPER MACNAME MACRO X , Y , Z PUSH AX MOV AX , X | 有宏调用: DEFMAC ADDITION,ADD OPER AX , Y | 展开:ADDITION MACRO X,Y,Z MOV Z , AX | PUSH AX POP AX | MOV AX , X ENDM | ADD AX , Y ENDM MOV Z , AX POP AX ENDM 于是:可以使用“ADDITION VAR1 ,VAR2, VAR3”调用宏。,7. 宏调用综合示例,二、重复汇编 有时候程序中会连续地重复完全相同或几乎相同的一组语句。当出现这种情况时,可考虑用重复伪指令定义重复块,以简化源程序。 1. 伪指令REPT 伪指令REPT用于创建重复块,重复块的重复次数由一数值表达式给定。一般格式如下: REPT 表达式 需重复的语句组 ENDM 宏汇编程序将把“需重复的语句组”连续低重复汇编由表达式值所决定的次数,就相当于是重写了多少次! 例: X = 0 REP 5 DB X X = X + 1 ENDM ;相当于 “DB 0,1,2,3,4”,2. 伪指令IRP 伪指令IRP用于创建重复块,重复次数及每次使用的实参由实参数列决定。 一般格式如下: IRP 形式参数, 需重复的语句组 ENDM 实参的个数规定了重复的次数。 例:下面的重复块实现把0-9的平方值存入存储区中。 IRP X , DB X * X ENDM 再如:下面重复块吧若干寄存器值压入堆栈。 IRP REG , PUSH REG ENDM,3. 伪指令IRPC 伪指令IRPC与伪指令IRP相似,但实参数列是一个字符串。 一般格式如下: IRPC 形式参数 , 字符串 需重复的语句组 ENDM 字符串的长度规定了重复的次数。 如果字符串含有空格、逗号等分隔符,那么字符串需用一对尖括号括起来。 例: IRPC X , 0123 DB X ENDM 展开后是得到: DB 0 , 1 , 2, 3 还是: DB 0 , 1 , 2 , 3 记住:宏更多地表现为一种替换!,例: IRPC X , 0123 DB &X ENDM 展开后是得到: DB 0 , 1 , 2 , 3 三、条件汇编 汇编条件语句可以根据某种条件决定是否汇编某段源程序,从而方便地产生功能不同的程序。 (一)条件汇编伪指令 基本格式: IFxxxx 条件表达式 语句组1 ELSE 语句组2 ENDIF IFxxxx是条件伪指令助记的一般形式,其中xxxx表示构成条件伪指令的其它字符。,例:宏指令MAX把三个变元中的最大值放入AX,而且使变元数不同时产生不同的程序片段。 MAX MACRO K , A , B , C LOCAL NEXT , OUT ;说明具体引用的标号NEXT,OUT MOV AX , A IF K-1 IF K 2 CMP C , AX JLE NEXT MOV AX , C ENDIF NEXT: CMP B , AX JLE OUT |宏调用: MOV AX , B | MAX 1 , P ENDIF | MAX 2 , P , Q OUT: ENDM | MAX 3 , P , Q , R,例:宏指令GOTO根据参数情况产生不同的转移效果。 GOTO MACRO L , X , REL , Y IFB JMP L ELSE MOV AX , X CMP AX ,Y J&REL L ENDIF ENDM 宏调用“GOTO LOOP ,

温馨提示

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

评论

0/150

提交评论