宏汇编2.ppt

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
宏汇编2

* 第七章 高级汇编语言技术 第一节 宏汇编 子程序有很多优点,但在子程序本身较短或是需要传送的参量较多的情况下使用宏汇编就更加有利。 一、宏定义和宏调用 宏是源程序中一段有独立功能的程序代码。 它只需在源程序中定义一次,就可以多次调用它,调用时,只需要用一个宏指令语句就可以了。 用伪操作符MACRO和ENDM来实现宏定义 格式: macro-name MACRO [形参表] ? ? (宏定义) ENDM 宏指令名: 给出该宏定义的名称(第一个符号必须是字母) 形参表:给出宏定义中所用到的形式参数,每个哑元之间用逗号隔开。 宏定义体:一组有独立功能的程序代码 调用时,只需使用宏指令名来调用该宏定义。 调用:汇编时,汇编程序对每个宏调用作宏展开–––用宏定义体取代源程序中的宏指令名,用实元代替宏定义中的哑元。取代时,实元和哑元是一一对应的。若实元个数哑元个数?多元实元不允考虑, 若实元个数哑元个数? 多余哑元作空 处理 注:? 取代后,所得到的语句应该是有效的,否则汇编程序将会指示出错。 ? 实元可以是常数、寄存器、指令的操作码、或操作码的一部分。 ? 每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关。 ? 程序段较短的且变元较多的功能段,则使用宏,但代码较长的功能段?使用子程序。 例7.1 用宏指令定义两个字操作数相乘,得到一个16位的第三个操作数,作为结果。 宏定义:MULT MACRO OPR1, OPR2, RESULT push DX push AX mov AX, OPR1 IMUL OPR2 mov RESULT, AX pop AX pop DX ENPM 宏调用: MULT1 CX, VAR, xyz[BX] MULT1 240, BX, SAVE 宏展开: + push DX + push AX + mov AX, CX + IMUL VAR + mov xyz[BX], AX + pop AX + pop DX + push DX + push AX + mov AX, 240 + IMUL BX + mov SAVE, AX + pop AX + pop DX 例7.2 宏定义可以无变元 SAVEREG MACRO PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ENDM 例7.3 宏定义变元可以是操作码 F00 MACRO P1,P2,P3 MOV AX,P1 P2,P3 ENDM 宏调用:F00 WORD-VAR, INC,AX 宏展开:+ MOV AX, WORD-VAR + INC,AX 例7.4 变元可以是操作码的一部分, 但在宏定义体中必须用作分隔符 宏定义:LEAP MACRO COND, LAB JCOND LAB ENDM 宏调用:LEAP Z, THERE LEAP NZ, HERE ? 宏展开:+ JZ THERE ? + JNZ HERE 注:是一个操作符,它在宏定义体中可以作为哑元的前缀,展开时可以把前、后两个符号合并而形成一个符号,这个符号可以是操作码、操作数或是一个字符串。 例7.5 FO MACRO P1 JMP TAP1 ENDM 宏调用:FO WORD_VAR 宏展开:+ JMP TAWORD_VAR 例7.6 变元是ASCII串的情况 宏定义:MSGGEN MACRO LAB,NUM,XYZ LABNUM DB HELLO MR.XYZ ENDM 调用: MSGGEN MSG, 1, TAYLOR 展开: + MSG1 DB HELLO MR.TALOR 宏指令名可以与指令助记符或伪操作名相同。 此时宏指令的优先级最高,而同名的指令或伪操作就失效了。 伪操作 PURGE可以用来在适当的时候取消宏定义,以便恢复指令的原始含义。 可同时取消多个宏定义–––各宏指令名间用逗号隔开。 例:ADD MACRO OPR1,OPR2,RESULT ? ENDM 宏调用:ADD XX,YY,ZZ PURGE ADD ; 在该语句后的ADD指令,服从机器指令的定义。 LOCAL伪操作的使用: 由于宏定义体内可以使用标号,但如果程序多次调用该宏定义时,展开后会出现标号的多重定义––––这是不允许的。 为此系统提供了LOCAL伪操作符。 格式:LOCAL list of local lalels 其中: 局部标号表内的各标号之间用逗号隔开 注:? LOCAL伪操作只能用在宏定义体内,而且它必须是MACRO伪操作后的第一个语句,在MACRO和LO

文档评论(0)

pt540099 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档