高级汇编语言技术

上传人:jiups****uk12 文档编号:45504723 上传时间:2018-06-17 格式:PPT 页数:69 大小:232KB
返回 下载 相关 举报
高级汇编语言技术_第1页
第1页 / 共69页
高级汇编语言技术_第2页
第2页 / 共69页
高级汇编语言技术_第3页
第3页 / 共69页
高级汇编语言技术_第4页
第4页 / 共69页
高级汇编语言技术_第5页
第5页 / 共69页
点击查看更多>>
资源描述

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

1、高级汇编语言技术第7章1ch77.1 宏汇编为什么使用宏汇编?在编制汇编语言程序过程中,有些功能程序段需要 多次重复使用,所不同的只是参与操作的操作数。为了减少编程的工作量,通常采用两种方法:将程序段编写为独立的子程序将程序段编写为独立的子程序 将程序段定义成宏将程序段定义成宏宏概念宏(或宏指令)是源程序中一段有独立功能宏(或宏指令)是源程序中一段有独立功能 的程序代码,的程序代码,只需定义一次,可以多次使用。只需定义一次,可以多次使用。第第7 7章章2ch71.宏定义用伪指令MACRO/ENMACRO/ENDMDM实现,其语句格式是:宏指令名 MACRO 形参形参1 1,形参,形参2 2,形

2、参,形参n n 宏定义体ENDM7.1.1 7.1.1 宏定义、宏调用和宏展开宏定义、宏调用和宏展开 3ch7说明 宏指令名宏指令名是该宏定义的名称。调用时使用是该宏定义的名称。调用时使用宏指令名宏指令名 对该宏定义进行调用对该宏定义进行调用。 宏指令符合标识符规定。宏指令符合标识符规定。宏指令名不能重复,并且宏指令名不能重复,并且 指令的第一个字符必须是字母。指令的第一个字符必须是字母。 MACROMACRO必须与必须与ENDMENDM成对出现。成对出现。MACROMACRO标识宏定义的开标识宏定义的开 始始 。 形式参数(即形参,也称哑元、虚参)是可选项,形式参数(即形参,也称哑元、虚参)

3、是可选项, 宏可以不带参数;带参数时,多个形参间用逗号分隔宏可以不带参数;带参数时,多个形参间用逗号分隔 。第第7 7章章4ch72.宏调用 宏调用的格式为:宏指令名宏指令名 实参实参1 1,实参,实参2 2,实参,实参nn 3. 宏展开 宏展开就是宏定义体取代源程序中的宏指宏展开就是宏定义体取代源程序中的宏指 令名,而且用实元取代哑元。令名,而且用实元取代哑元。汇编源程序时,汇编源程序时, 宏汇编程序将对每条宏指令语句进行宏展开,宏汇编程序将对每条宏指令语句进行宏展开, 用实参替代相应的形参,对宏体目标代码作相用实参替代相应的形参,对宏体目标代码作相 应改变。应改变。 说明:实参可以是常数、

4、寄存器、存储单元、地 址表达式、指令的操作码或者是操作码的一部分 。第第7 7章章5ch7Call QCall QCall QQ:RET子程序QQ A,BQ C,DQ E,FQ MACRO X,YENDM主程序主程序主程序主程序主程序主程序展开子程序调用和宏调用的工作方式第第7 7章章6ch7例例7.1 7.1 用宏指令定义两个字操作数相乘,得到一个用宏指令定义两个字操作数相乘,得到一个1616位的第位的第 三个操作数作为结果三个操作数作为结果。宏定义:宏定义:Multiply macro opr1,opr2,resultMultiply macro opr1,opr2,resultpush

5、dx push ush ax push axmov ax,opr1 mov ax,opr1imul opr2 imul opr2mov result,ax mov result,axpop ax pop axpop dx pop dxendm endm第第7 7章章7ch7宏调用: Multiply cx,var,xyzbx Multiply 240,bx,save 第第7 7章章宏展开:push ush axmov ax,cximul varmov xyzbx,axpop axpop dx push ush axmov ax,240imul bxmov save,axpop axpop dx

6、8ch77.1.2 7.1.2 宏定义中的参数宏定义中的参数例例7.2 7.2 宏定义可以无变元宏定义可以无变元 saveregsavereg macromacropush ax push axpush push bx bxpushpush cxcxpush dx push ushpush si sipush di push diendmendm例例7.37.3变元可以是操作码变元可以是操作码a macro a macro p1, p1, p2p2, ,p3p3mov mov ax,p1ax,p1p2p2 p3p3endmendm调用调用: a word_a word_ var var , ,

7、incinc, ,axax展开:展开:1 1mov mov ax,word_ ax,word_varvar 1 1 incinc axax第第7 7章章宏调用宏调用 saveregsavereg,宏展开,宏展开 则将宏定义内容全部列出则将宏定义内容全部列出9ch7例7.4 变元可以是操作码或操作数的一部分,但在宏定义体 中必须使用分隔符define macromov ax,data ; initialize segmentmov ds,ax ; registermov es,ax endm prompt macro messge ;define macro ; this macro displ

8、ays any message ; generates code that links to DOSmov ah,9 ;request displaylea dx,messge ;promptint 21hendm ;end macro finish macro ;define macromov ax,4c00h ;end processingint 21hendm ;end macro .model small .386 .stack 200h .data messg1 db Customer name?,13,10,$ messg2 db Customeraddress?,13,10,$

9、.code ;define code segment begin proc far.sallinitz.xallprompt messg1.lall prompt messg2.xallfinish begin endpend begin 30 0000 .code ;define code segment 31 0000begin proc far 32 .sall 33 initz 34 .xall 35 prompt messg1 36 0007 B4 09 1 mov ah,9 ;request display 37 0009 8D 16 0000 R 1 lea dx,messg1

10、;prompt 38 000D CD 21 1 int 21h 39 .lall 40 prompt messg2 41 1; this macro displays any message 42 1; 43 000F B4 09 1 mov ah,9 ;request display 44 0011 8D 16 0011 R 1 lea dx,messg2 ;prompt 45 0015 CD 21 1 int 21h 46 .xall 47 finish 48 0017 B8 4C00 1 mov ax,4c00h ;end processing 49 001A CD 21 1 int 2

11、1h 50 001Cbegin endp 51 001C end begin 20ch7如果如果程序中定义了很多宏程序中定义了很多宏,可以把这些宏,可以把这些宏 组合起来建立一个独立的文件,这个只包含若组合起来建立一个独立的文件,这个只包含若 干个宏定义的文件称为宏库干个宏定义的文件称为宏库。扩展名由。扩展名由macmac 或或 incinc来表示。来表示。当需要使用宏库中的某些宏定义时当需要使用宏库中的某些宏定义时 ,只需要,只需要在该程序的开始用在该程序的开始用INCLUDEINCLUDE语句说明语句说明includeinclude C: C:MACRO.MACMACRO.MAC第第7 7

12、章章7.1.6 7.1.6 宏库的建立与调用宏库的建立与调用21ch7宏库的建立(文件名macro.mac) ;a library of macro sequences-macro.mac initz macro ;define macromov ax,data ; initialize segmentmov ds,ax ; registermov es,ax endm prompt macro messge ;define macro ; this macro displays any message ; generates code that links to DOSmov ah,9 ;r

13、equest displaylea dx,messge ;promptint 21hendm ;end macro finish macro ;define macromov ax,4c00h ;end processingint 21hendm ;end macro对例7.12宏库的建立和使用 宏库的使用 Include macro.mac .model small .386 .stack 200h .data messg1 db Customer name?,13,10,$ messg2 db Customeraddress?,13,10,$ .code ;define code segment begin proc far.sallinitz.xallprompt messg1.lall prompt messg2.xallfinish begin endpend begin 22ch7宏汇编程序提供了伪操作宏汇编程序提供了伪操作PURGEPURGE,用来在删除用来在删除 不用的宏定义。不用的宏定义。 PURGEPURGE伪指令的一般格式是:伪指令的一般格式是:PURGE PURGE 宏名宏名 , 方括号表示方括号表示PURGEPURGE可以取消多个

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

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

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