IBM-PC汇编语言(⑦高级汇编语言技术).ppt
《IBM-PC汇编语言(⑦高级汇编语言技术).ppt》由会员分享,可在线阅读,更多相关《IBM-PC汇编语言(⑦高级汇编语言技术).ppt(58页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章第第7 7章章 高级汇编语言技术高级汇编语言技术1 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章7.1 7.1 宏汇编宏汇编为什么使用宏汇编?为什么使用宏汇编?在编制汇编语言程序过程中,有些功能程序段需要在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。多次重复使用,所不同的只是参与操作的操作数。为了减少编程的工作量,通常采用两种方法为了减少编程的工作量,通常采用两
2、种方法:将程序段编写为独立的子程序将程序段编写为独立的子程序将程序段编写为独立的子程序将程序段编写为独立的子程序 将将将将程序段定义成宏程序段定义成宏程序段定义成宏程序段定义成宏 大家想一下大家想一下 子程序有什么优缺点?子程序有什么优缺点?什么是宏?什么是宏?宏(或宏指令)是源程序中一段有独立功能宏(或宏指令)是源程序中一段有独立功能宏(或宏指令)是源程序中一段有独立功能宏(或宏指令)是源程序中一段有独立功能的程序代码,的程序代码,的程序代码,的程序代码,只需定义一次,可以多次调用。只需定义一次,可以多次调用。只需定义一次,可以多次调用。只需定义一次,可以多次调用。第第第第7 7 7 7章章
3、章章2 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章1.宏定义宏定义用伪指令用伪指令MACRO/ENDMMACRO/ENDM实现,其语句格式是:实现,其语句格式是:宏指令名宏指令名 MACRO形参形参形参形参1 1 1 1,形参,形参,形参,形参2 2 2 2,形参,形参,形参,形参n n n n 宏定义体宏定义体ENDM 7.1.1 7.1.1 宏定义、宏调用和宏展开宏定义、宏调用和宏展开3说明说明 宏指令名宏指令名宏指令名宏指令名是该宏定义的名称。调用时使用是该宏定义的名称。调用时使用是该宏定义的名称。调用时使用是该
4、宏定义的名称。调用时使用宏指令名宏指令名宏指令名宏指令名对该宏定义进行调用对该宏定义进行调用对该宏定义进行调用对该宏定义进行调用。宏指令符合标识符规定。宏指令符合标识符规定。宏指令符合标识符规定。宏指令符合标识符规定。宏指令名不能重复,并且宏指令名不能重复,并且宏指令名不能重复,并且宏指令名不能重复,并且指令的第一个字符必须是字母。但可以和源程序中的指令的第一个字符必须是字母。但可以和源程序中的指令的第一个字符必须是字母。但可以和源程序中的指令的第一个字符必须是字母。但可以和源程序中的其他变量、标号、指令、伪指令名相同其他变量、标号、指令、伪指令名相同其他变量、标号、指令、伪指令名相同其他变量
5、、标号、指令、伪指令名相同,在这种情况,在这种情况,在这种情况,在这种情况下宏指令的优先级最高下宏指令的优先级最高下宏指令的优先级最高下宏指令的优先级最高。MACROMACROMACROMACRO必须与必须与必须与必须与ENDMENDMENDMENDM成对出现。成对出现。成对出现。成对出现。MACROMACROMACROMACRO标识宏定义的开标识宏定义的开标识宏定义的开标识宏定义的开始始始始 。形式参数(即形参,也称哑元、虚参)是可选项,形式参数(即形参,也称哑元、虚参)是可选项,形式参数(即形参,也称哑元、虚参)是可选项,形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时
6、,多个形参间用逗号分隔宏可以不带参数;带参数时,多个形参间用逗号分隔宏可以不带参数;带参数时,多个形参间用逗号分隔宏可以不带参数;带参数时,多个形参间用逗号分隔。安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章42.2.宏调用宏调用宏调用的格式为宏调用的格式为:宏指令名宏指令名宏指令名宏指令名 实参实参实参实参1 1 1 1,实参,实参,实参,实参2 2 2 2,实参,实参,实参,实参nnnn 3.3.宏展开宏展开 4.宏展开就是宏定义体取代源程序中的宏宏展开就是宏定义体取代源程序中的宏宏展开就是宏定义体取代源程序中的宏宏展
7、开就是宏定义体取代源程序中的宏指令名,而且用实元取代哑元。指令名,而且用实元取代哑元。指令名,而且用实元取代哑元。指令名,而且用实元取代哑元。汇编源程序时,汇编源程序时,汇编源程序时,汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,宏汇编程序将对每条宏指令语句进行宏展开,宏汇编程序将对每条宏指令语句进行宏展开,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相用实参替代相应的形参,对宏体目标代码作相用实参替代相应的形参,对宏体目标代码作相用实参替代相应的形参,对宏体目标代码作相应改变。应改变。应改变。应改变。说明说明:实参可以是常数、寄存器、存储单元、地实参
8、可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分址表达式、指令的操作码或者是操作码的一部分。安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章5Call QCall QCall QQ:RET子程序QQ A,BQ C,DQ E,F Q MACRO X,YENDM主程序主程序主程序主程序主程序主程序主程序主程序主程序主程序主程序主程序展开子程序调用和宏调用的工作方式子程序调用和宏调用的工作方式 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章
9、章章章6 用一个例子来说明宏定义、宏调用和宏展开的情况用一个例子来说明宏定义、宏调用和宏展开的情况用一个例子来说明宏定义、宏调用和宏展开的情况用一个例子来说明宏定义、宏调用和宏展开的情况例:将两个例:将两个例:将两个例:将两个16161616位数相加,结果存入位数相加,结果存入位数相加,结果存入位数相加,结果存入16161616位位位位 RESULT RESULT RESULT RESULT 单元单元单元单元中中中中 。;对两数相加功能进行宏定义;对两数相加功能进行宏定义;对两数相加功能进行宏定义;对两数相加功能进行宏定义 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬
10、兆汇编语言汇编语言第第第第7 7 7 7章章章章7 BCDADD BCDADD MACROMACRO VARX VARX,VARYVARY,RESULTRESULT MOV AL MOV AL,VARX VARX ADD AL ADD AL,VARYVARY MOV RESULT MOV RESULT,ALAL MOV AL MOV AL,VARXVARX1 1 ADC AL ADC AL,VARYVARY1 1 MOV RESULT MOV RESULT1 1,AL AL ENDMENDMDATA SEGMENTDATA SEGMENT A1 DW 1234H A1 DW 1234H A2
11、DW 5678H A2 DW 5678H A3 DW A3 DW?B1 DW 1357H B1 DW 1357H B2 DW 2468H B2 DW 2468H B3 DW B3 DW?DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS ASSUME CS:CODECODE,DSDS:DATADATASTART:PUSH DSSTART:PUSH DS MOV AX MOV AX,0 0 PUSH AX PUSH AX 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章8
12、MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX BCDADD BCDADD A1A1,A2A2,A3A3;宏宏宏宏调调调调用用用用 BCDADD BCDADD B1B1,B2B2,B3B3 ;再再再再次宏调用次宏调用次宏调用次宏调用 RET RETCODE ENDSCODE ENDS END START END START经宏展开后:经宏展开后:经宏展开后:经宏展开后:PUSH DS PUSH DS MOV AX MOV AX,0 0 PUSH AX PUSH AX MOV AX MOV AX,DATADATA MOV DS MOV DS,AXAX1 MOV
13、ALMOV AL,A1A1 2 21 ADD AL1 ADD AL,A2A21 MOV A31 MOV A3,ALAL1 MOV AL1 MOV AL,A1A11 11 ADC AL1 ADC AL,A2A21 11 1 MOV A3 MOV A31 1,ALAL1 MOV AL1 MOV AL,B1 B1 1 ADD AL1 ADD AL,B2 B2 1 MOV B31 MOV B3,ALAL1 MOV AL1 MOV AL,B1B11 11 1 ADC AL ADC AL,B2B21 11 1MOV B3MOV B31 1,ALAL2 2 宏宏宏宏汇汇汇汇编编编编程程程程序序序序在在在在所
14、所所所展展展展开开开开的的的的指指指指令令令令前前前前标标标标识识识识以以以以1111号号号号以以以以示示示示区区区区别别别别。较较较较早早早早的的的的版版版版本本本本用用用用+安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章97.1.2 7.1.2 宏定义中的参数:宏定义中的参数:1 1 1 1 宏定义可以无参数宏定义可以无参数宏定义可以无参数宏定义可以无参数 saveregsavereg macromacropushaxpushaxpushbxpushbxpushcxpushcxpushsipushsiendmendm2
15、 2 2 2 参数可以是操作码参数可以是操作码参数可以是操作码参数可以是操作码 amacroamacrop1,p1,p2p2,p3p3movmovax,p1ax,p1p2p2p3p3endmendm调用调用调用调用:aword_var,aword_var,incinc,axax 展开:展开:展开:展开:1 1 movmovax,word_ax,word_varvar2 211incinc axax 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章10 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇
16、编语言汇编语言第第第第7 7 7 7章章章章3 参数可以是操作码或操作数的一部分,但在宏定义体中必须参数可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符使用分隔符&,即即&是操作符,在宏定义中可作为形参的前缀,是操作符,在宏定义中可作为形参的前缀,展开时把展开时把&前后的两个符号连接起来,形成操作码、操作数或前后的两个符号连接起来,形成操作码、操作数或字符串。字符串。&只能出现在宏定义中只能出现在宏定义中。例例例例 宏定义宏定义宏定义宏定义:SHIFT MARCO XSHIFT MARCO X,Y Y,Z Z MOV CL MOV CL,X X S S&Z YZ Y,CLCL END
17、M ENDM形参形参形参形参Z Z是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的是操作码的一部分。宏汇编中规定,若宏定义体中的形参没有适当的分隔符,就不被当作形参,调用时也不会被实参代替。分隔符,就不被当作形参,调用时也不会被实参代替。分隔符,就不被当作形参,调用时也不会被实参代替。分隔符,就不被当作形参,调用时也不会被实参代替。上例被调用时:上例被调用时:上例被调用时:上例被调用时:SHIFT4SHIFT4,CLCL,ALAL SHIFT 6SHIFT 6SH
18、IFT 6SHIFT 6,BXBXBXBX,ARARARAR则宏展开时的目标代码:则宏展开时的目标代码:则宏展开时的目标代码:则宏展开时的目标代码:1 MOV CL1 MOV CL,4 4 1 1 SALSAL AL AL,CLCL 1 MOV CL1 MOV CL1 MOV CL1 MOV CL,6 6 6 6 1 1 1 1 S S S SARARARAR BX BX BX BX,CLCLCLCL11 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章例例例例 fo macro fo macro fo macro fo m
19、acro p1p1p1p1 jmp jmp jmp jmp tatatata&p1p1p1p1 endm endm endm endm 宏调用:宏调用:宏调用:宏调用:fo fo fo fo word_varword_varword_varword_var宏展开:宏展开:宏展开:宏展开:1 Jmp 1 Jmp 1 Jmp 1 Jmp tatatataword_varword_varword_varword_var如果这样:如果这样:如果这样:如果这样:fo macro p1 fo macro p1 fo macro p1 fo macro p1 jmp tap1 jmp tap1 jmp ta
20、p1 jmp tap1 endm endm endm endm 宏调用:宏调用:宏调用:宏调用:fo word_varfo word_varfo word_varfo word_var宏展开:宏展开:宏展开:宏展开:1 Jmp1 Jmp1 Jmp1 Jmp?12 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章4 伪操作%不能出现在形参的前面,通常用在宏调用在宏调用中,将跟在它后面的表达式的值转换成以当前基数中,将跟在它后面的表达式的值转换成以当前基数下的数,下的数,在宏展开时,用转换后的值代替形参。例例例例 宏定义宏定义宏
21、定义宏定义:MAKER MAKER MACROMACRO COUNT COUNT,STRSTR MAKER&COUNT DB STR MAKER&COUNT DB STR ENDMENDMERRMA ERRMA MACROMACRO TEXT TEXT CNTR=CNTR CNTR=CNTR1 1 MAKERMAKER%CNTR%CNTR,TEXTTEXT ENDMENDM经宏调用:经宏调用:经宏调用:经宏调用:13 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章 CNTR=0CNTR=0 ERRMA SYNTAX ERR
22、OR ERRMA SYNTAX ERROR ERRMA INVALID OPERAND ERRMA INVALID OPERAND 宏展开:宏展开:宏展开:宏展开:2 MAKER1 DB SYNTAX ERROR 2 MAKER1 DB SYNTAX ERROR 2 MAKER2 DB INVALID OPERAND 2 MAKER2 DB INVALID OPERAND 14 安徽理工大学安徽理工大学计算机科学与技术系计算机科学与技术系李敬兆李敬兆汇编语言汇编语言第第第第7 7 7 7章章章章 7.1.3 7.1.3 伪指令伪指令 LOCAL LOCAL 宏宏宏宏定定定定义义义义体体体体内内
23、内内可可可可以以以以使使使使用用用用标标标标号号号号。对对对对于于于于使使使使用用用用了了了了标标标标号号号号的的的的宏宏宏宏定定定定义义义义,若若若若多多多多次次次次调调调调用用用用,势势势势必必必必产产产产生生生生标标标标号号号号的的的的多多多多重重重重定定定定义义义义,汇汇汇汇编编编编时时时时出出出出错错错错。解解解解决决决决这这这这一一一一问问问问题题题题可可可可使使使使用用用用伪伪伪伪指指指指令令令令LOCALLOCALLOCALLOCAL,其其其其一一一一般般般般格格格格式为:式为:式为:式为:LOCAL LOCAL LOCAL LOCAL 局部标号局部标号局部标号局部标号1 1
24、1 1,局部标号,局部标号,局部标号,局部标号2 2 2 2,宏宏宏宏汇汇汇汇编编编编程程程程序序序序将将将将为为为为标标标标号号号号分分分分别别别别生生生生成成成成格格格格式式式式为为为为“?XXXX”XXXX”XXXX”XXXX”的的的的唯唯唯唯一一一一的的的的符符符符号号号号以以以以代代代代替替替替各各各各局局局局部部部部标标标标号号号号。XXXXXXXXXXXXXXXX代代代代表表表表四四四四位位位位十十十十六六六六进进进进制制制制数数数数0000000000000000FFFFFFFFFFFFFFFF。这这这这样样样样,在在在在汇汇汇汇编编编编源源源源程程程程序序序序中中中中,避免了
25、多次宏调用时生成的标号重复。避免了多次宏调用时生成的标号重复。避免了多次宏调用时生成的标号重复。避免了多次宏调用时生成的标号重复。注注注注意意意意:LOCALLOCALLOCALLOCAL伪伪伪伪操操操操作作作作只只只只能能能能用用用用在在在在宏宏宏宏定定定定义义义义体体体体内内内内,而而而而且且且且必必必必须须须须是是是是MACROMACROMACROMACRO伪伪伪伪操操操操作作作作后后后后的的的的第第第第一一一一个个个个语语语语句句句句,在在在在MACROMACROMACROMACRO与与与与LOCALLOCALLOCALLOCAL不不不不能能能能出现注释和分号标志。出现注释和分号标志。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IBM PC 汇编语言 高级 技术
限制150内