《【教学课件】第8章高级汇编语言技术.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第8章高级汇编语言技术.ppt(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术第第8 8章章 高级汇编语言技术高级汇编语言技术 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术基本内容基本内容宏汇编宏汇编重复汇编重复汇编条件汇编条件汇编 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.1 8.1 宏汇编宏汇编 宏指令的定义、调用和展开 宏操作符 局部符号伪指令 宏嵌套 宏库的建立与使用 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语
2、言技术高级汇编语言技术8.1.1 8.1.1 8.1.1 8.1.1 宏指令的定义、调用和展开宏指令的定义、调用和展开宏指令的定义、调用和展开宏指令的定义、调用和展开宏定义宏定义 宏定义用一组伪操作实现:宏名 MACRO 形参列表 (宏体)ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术SHRT MACRO MOV CL,3 SAR DL,CL ENDM 例例:用宏指令实现将DL寄存器右移3位 注意:宏定义可出现在源程序的任何位置,但必须出现在宏调用之前,也就是必须先定义后调用。IBM PC 80X86汇编语言程序设计 冶金工业出版
3、社第第8章章 高级汇编语言技术高级汇编语言技术 宏调用宏调用 经过宏定义后,宏指令就可以在源程序中调用,即宏调用。宏调用的格式是:宏名 实参1,实参2,实参3,宏展开宏展开 当汇编程序对源程序进行汇编时,汇编程序 每个宏调用作宏展开。宏展开就是用宏体代源程序中的宏名,用实参取代宏定义中的形参。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术 例例例例:用宏指令定义两个字节数据相加,并存放到一个单元:用宏指令定义两个字节数据相加,并存放到一个单元中中 ,并作宏调用和宏展开。,并作宏调用和宏展开。ADDB MACRO AD1,AD2,RESULT
4、 ;宏定义 PUSH AX MOV AL,AD1 ADD AL,AD2 MOV RESULT,AL POP AX ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术 ADDB 5CH,43H,DL ;宏调用 1 PUSH AX ;宏展开1 MOV AL,5CH1 ADD AL,43H1 MOV DL,AL1 POP AX IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.1.2 8.1.2 8.1.2 8.1.2 宏操作符宏操作符宏操作符宏操作符操作符操作符&操作符操作符%操作符操
5、作符操作符操作符 !IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术操作符操作符操作符操作符&操作符&在宏定义中使用时可以在形参之前,也可 以出现在形参之后,宏展开时将&前后两个符号合并成 一个符号,该符号可以是操作码、操作数,也可以是字 符串。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例例例例:宏定义:宏定义:DSEG MACRO NUMDSEG MACRO NUM,LETTER LETTER LAS&NUM DB WRITING&LETTER LAS&NUM DB WRITING&
6、LETTER ENDM ENDM宏调用:宏调用:DSEG 1DSEG 1,ERROR ERROR DSEG 2 DSEG 2,RIGHT RIGHT宏展开:宏展开:1 1 LAS1 DB WRITINGERRORLAS1 DB WRITINGERROR 1 LAS2 DB WRITINGRIGHT 1 LAS2 DB WRITINGRIGHT 在这里,第一个参数合并成标号,第二个参数用于字符串中。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术操作符操作符操作符操作符%汇编程序将操作符%后的表达式的值而不是表达式文本本身作为当前值,宏展开时,
7、用该值取代形参,%操作符不允许出现在形参前面。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例例例例:宏定义宏定义:SARF1 MACRO CON1,DECT MOV CL,CON1 S&DECT AL,CL ENDM SARF2 MACRO CON2 CNT=CON2 SARF1%CNT,AL ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术宏调用宏调用宏调用宏调用:SARF2 2SARF2 2 SARF2 4 SARF2 4 宏展开宏展开:1 MOV CL,2 1 SAL A
8、L,CL 1 MOV CL,4 1 SAL AL,CL IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术 操作符操作符操作符操作符 汇编程序将操作符括起的内容作为一个字符串处 理。宏调用中,实参如果含有空格、逗号等间隔符,就用 操作符将实参括起,作为一个单一完整的实参。若将 一个特殊字符作为实参,也可以用该操作符处理,如&表示一个字符“&”,而不是操作符。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例:例:宏定义宏定义:HELLOW MACRO DSG,SENTENS DSG DB&SE
9、NTENS ENDM宏调用:宏调用:HELLOW MASG,HOW ARE YOU HELLOW MASG,HOW ARE YOU宏展开宏展开:1 MASG DB HOW ARE YOU 1 MASG DB HOW IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术操作符操作符操作符操作符 !汇编程序将操作符!后的字符只作字符含义进行处 理。如“!%”表示%只作百分号使用。在宏调用时,为使实 参中的一些特殊字符作一般字符处理,就要在其前加上该 操作符。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语
10、言技术 例:例:宏定义:宏定义:HELLOW MACRO DSG,SENTENS DSG DB&SENTENS ENDM 宏调用:宏调用:HELLOW !%(2+9-1)宏展开:宏展开:1 DB%(2+9-1)IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.1.3 8.1.3 8.1.3 8.1.3 局部符号伪指令局部符号伪指令局部符号伪指令局部符号伪指令 汇编程序中提供伪指令LOCAL,解决标号的多重定义 问题。伪指令LOCAL格式:LOCAL 标号表 在每次宏展开时,汇编程序对LOCAL伪指令说明的 标号或变量用唯一的符号“?XXXX
11、”(XXXX表示0000-FFFF的十六进制数)代替。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例:例:宏定义宏定义:ROTAE MACRO NUM LOCAL NEXT MOV CL,NUM SAR AL,CL CMP AL,9 JNBE NEXT NEXT:AND AL,0FH ENDM宏调用宏调用:ROTAE 1 ROTAE 2 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术宏展开宏展开:1 MOV CL,1 1 SAR AL,CL 1 CMP AL,9 1 JNBE?0000
12、 1?0000:AND AL,0FH 1 MOV CL,2 1 SAR AL,CL 1 CMP AL,9 1 JNBE?0001 1?0001:AND AL,0FH IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术 须要说明的是,须要说明的是,LOCALLOCAL伪指令只用于宏定义体内,且伪指令只用于宏定义体内,且必须是宏定义伪指令必须是宏定义伪指令MACROMACRO之后的第一条语句,在之后的第一条语句,在MACROMACRO和和LOCALLOCAL伪指令之间不允许有注释和分号标志。伪指令之间不允许有注释和分号标志。如果伪指令LOCAL后有
13、多个标号,如:LOCAL NEXT1,NEXT2宏展开时,汇编程序分别用?0000、?0001取代第一次宏调用中NEXT1、NEXT2。用?0002、?0003分别取代第二次宏调用中的NEXT1、NEXT2,依次类推。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术宏定义中使用宏调用宏定义中使用宏调用宏定义中使用宏调用宏定义中使用宏调用例例例例:宏定义:宏定义SHRFQSHRFQ中使用宏调用中使用宏调用SHRF MACRO X MOV CL,X SAR AL,CL ENDMSHRFQ MACRO Y,Z,RESU PUSH AX PUSH C
14、X MOV AL,Z SHRF YAND AL,ZMOV RESU,ALPOP CXPOP AXENDM8.1.4 8.1.4 宏嵌套宏嵌套 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术宏定义中定义宏指令宏定义中定义宏指令宏定义中定义宏指令宏定义中定义宏指令例例例例:宏定义:宏定义SHEATSHEAT中定义宏指令中定义宏指令INMOVINMOV SHEAT MACRO INMOV,OPTR INMOV MACRO X,Y,RESULT PUSH AX PUSH CX MOV CL,X MOV AL,Y S&OPTR AL,CL MOV R
15、ESULT,AL POP CX POP AX ENDM ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.1.5 8.1.5 8.1.5 8.1.5 宏库的建立与使用宏库的建立与使用宏库的建立与使用宏库的建立与使用 为了节约编程时间和减少错误,我们可以将常用的为了节约编程时间和减少错误,我们可以将常用的 宏定义集中放在一个文件中,这个文件称为宏库。调用宏定义集中放在一个文件中,这个文件称为宏库。调用 宏库中的宏时,只需在源文件前面用伪指令宏库中的宏时,只需在源文件前面用伪指令INCLUDEINCLUDE将将 宏库加入到自己的源文件
16、中。宏库加入到自己的源文件中。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.2 8.2 重复汇编重复汇编 重复汇编指源程序中用重复伪指令定义需要重复 的语句序列,汇编程序对该语句序列进行多次汇编。伪指令REPT 伪指令IRP 伪指令IRPC IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术伪指令伪指令伪指令伪指令REPTREPTREPTREPT 格式:REPT 表达式 (重复语句序列)ENDM 其中,表达式包含的项必须有定义,不能包含外部 变量,且必须可求出常数值,表达式的值给出重复块
17、的 重复次数。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例例例例:将将0-500-50中中5 5的倍数存放到的倍数存放到1010个字节单元中个字节单元中 N=0 REPT 10 N=N+5 DB N ENDM汇编产生如下结果 1 DB 5 1 DB 10 1 DB 15 1 DB 50 IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术伪指令伪指令伪指令伪指令IRPIRPIRPIRP 格式:IRP 形参,实参1,实参2,(重复语句序列)ENDM 其中实参个数确定重复汇编的次数,重复汇编语
18、句序列时,依次用尖括号中的实参取代形参。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例:例:IRP R,A,B,C,D PUSH R&X ENDM汇编期间得到如下结果:1 PUSH AX 1 PUSH BX 1 PUSH CX 1 PUSH DX IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术伪指令伪指令IRPCIRPC 格式:IRPC 形参,字符串 (重复语句序列)ENDM 与伪指令IRP 相似,但实参必须是字符串,其中字符串中字符个数确定重复汇编的次数,重复汇编语句序列时,依次用字
19、符串中的一个字符取代形参,直到用完字符串中的所有字符。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例:例:IRPC S,ABCDEFGHI DB S ENDM汇编期间得到如下结果:1 DB A 1 DB B 1 DB I IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术8.3 8.3 条件汇编条件汇编 条件汇编的作用是使汇编程序能根据条件条件汇编的作用是使汇编程序能根据条件有选择的对程序段进行汇编。源程序中依需要有选择的对程序段进行汇编。源程序中依需要设定条件,汇编时汇编程序根据条件是否
20、满足,设定条件,汇编时汇编程序根据条件是否满足,对该段程序进行汇编或不进行汇编,以得到所对该段程序进行汇编或不进行汇编,以得到所需的目标代码。需的目标代码。IF和IFE IFB和IFNB IFIDN和IFDIF IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术IFIF和和IFEIFE IF 表达式的值不为0,则满足条件,即条件为真,其表达式的值应该是一个常数。IFE 表达式的值为0,则条件为真。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术 例:宏例:宏MOVSNMOVSN判断参数判断参数
21、N N是否为是否为0 0,如果不为,如果不为0 0,则将,则将N N右移两位,否则将右移两位,否则将ALAL寄存器置寄存器置0 0。MOVSN MACRO N IF N MOV AL,N MOV CL,2 SAR AL,CL ELSE MOV AL,0 ENDIF ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术IFBIFBIFBIFB和和和和IFNBIFNBIFNBIFNB 伪指令IFB和IFNB测试宏定义中的参数,如果参数是空格,则IFB条件为真。否则IFNB条件为真。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第
22、8章章 高级汇编语言技术高级汇编语言技术 例:例:例:例:宏宏MOVSMMOVSM在汇编时,测试参数在汇编时,测试参数HANDLEHANDLE的值,判断的值,判断对对MOV BXMOV BX,HANDLEHANDLE或或 MOV BXMOV BX,1 1 进行汇编。进行汇编。MOVSM MACRO BYTE,HANDLE MOV AH,42H MOV AL,00 IFNB HANDLE MOV BX,HANDLE ELSE MOV BX,1 ENDIF MOV CX,00 MOV DX,BYTE INT 21H ENDM IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级
23、汇编语言技术高级汇编语言技术 IFIDNIFIDNIFIDNIFIDN和和和和IFDIFIFDIFIFDIFIFDIF 伪指令IFIDN和IFDIF比较字符串参数1和字符串参数2的值是否相等,如果相等则IFIDN条件为真,否则IFDIF条件满足。IBM PC 80X86汇编语言程序设计 冶金工业出版社第第8章章 高级汇编语言技术高级汇编语言技术例:例:例:例:宏宏FILEOP FILEOP 将参数将参数OPREATEOPREATE作为判断条件。作为判断条件。FILEOP MACRO FILENAME OPREATE IFIDN OPREATE,CREAT MOV AH,16H MOV DX,SEG FILENAME MOV DS,DX MOV DX,OFFSET FILENAME INT 21H ENDIFIFIDN OPREATE,ENDSS MOV AH,10H MOV DX,SEG FILENAME MOV DS,DX MOV DX,OFFSET FILENAME INT 21H ENDIF ENDM