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

一、与宏有关的伪指令 在宏定义时,为了满足某种特殊需要,汇编语言还提供了几个伪指令。? 9.3.1?局部标号伪指令LOCAL? 在宏定义体中,如果存在标号,则该标号要用伪指令LOCAL说明为局部标号,否则,当在源程序中,有多于一次引用该宏时,汇编程序在进行宏扩展后将会给出:标号重复定义的错误。? 伪指令LOCAL的一般格式如下:? LOCAL 标号1,?标号2,?……? 伪指令LOCAL必须是伪指令MACRO后的第一条语句,并且在MACRO和LOCAL之间也不允许有注释和分号标志。? 汇编程序在每次进行宏扩展时,总是把由LOCAL说明的标号用一个唯一的符号(从??0000到??FFFF)来代替,从而避免标号重定义的错误。? 例9.7?编写求一个求绝对值的宏。? 解:? 方法1:? ABSMACROword1? CMPword1,?0? JGEnext? NEGword1? next:? ENDM? 假设对宏ABS有以下两次引用,点击它们将会显示汇编程序对它们进行宏扩展后所得到程序片段:?     ABS??BX??   1    ?CMP BX,?0?   1    ?JGE ?next?   1    ?NEG BX?   1 next:? …?     ABS??AL??   1    ?CMP AL,?0?   1    ?JGE ?next?   1    ?NEG AL?   1 next:? 在上述程序片段中,显然标号next定义了二次,所以,汇编程序将显示“标号重复定义”的错误信息。为了避免这种情况的发生,我们需要用下面的方法来定义该宏。? 方法2:? ABSMACROword1? LOCALnext? CMPword1,?0? JGEnext? NEGword1? next:? ENDM? 假设对宏ABS有以下两次引用,点击它们将会显示汇编程序对它们进行宏扩展时所得到程序片段:?     ABS??BX??   1      CMP BX,?0?   1      JGE ???0000?   1      NEG BX?   1 ??0000:? …?     ABS??AL??   1      CMP AL,?0?   1      JGE ??0001?   1      NEG AL?   1 ??0001:? 在上述程序片段中,宏体内部的局部标号next分别用符号??0000和??0001来对应它的二次引用。因此,汇编程序不会再显示“标号重复定义”的错误信息。? 伪指令LOCAL在子程序中也可起作用(参见7.5.10节),但它的作用与宏定义的作用是不同的,有关该伪指令在子程序的宏定义***能的主要差异如表9.1所列。? 表9.1?伪指令LOCAL在子程序和宏中的比较? 在子程序中在宏定义中? 语句的位置在所有指令之前在所有指令之前? 伪指令的作用说明局部变量说明局部标号? 伪指令的格式可用一条伪指令来说明多个局部变量,也可连续用多条伪指令来说明可用一条伪指令来说明多个局部标号,也可连续用多条伪指令来说明? 调用或引用子程序的不同调用,其局部变量名保存不变在每次宏引用的扩展时,将会自动产生出一个唯一的局部标号 二、取消宏定义伪指令 伪指令PURGE的一般格式如下:? PURGE 宏名1,?宏名2,?……? 该伪指令通知汇编程序取消“宏名1,?宏名2,?……”宏名表中的宏定义。在此语句后,如果还有这些宏的引用语句,则汇编程序不会把它们当作宏引用来进行扩展,并且还将显示出错信息。? 伪指令PURGE的使用频率较低。? 9.3.3?中止宏扩展伪指令? 伪指令EXITM的一般格式如下:? EXITM? 该伪指令书写在宏定义体中,用来告诉汇编程序:如果遇到该伪指令,那么,立即中止对该伪指令之下语句的扩展。如果在嵌套的内层宏中遇到了该伪指令,则退出到宏嵌套的外层。? 在一般情况下,伪指令EXITM与条件伪指令一起使用,以便在不同的条件下挑选出不同的语句。? 伪指令EXITM的使用频率也很低。 三、重复汇编伪指令 在编写源程序时,有时会出现连续相同或相似的语句(组)。当出现这种情况时,可利用重复伪指令来重复语句,从而达到简化程序的目的。? 重复汇编伪指令所定义的重复块是宏的一种特殊形式,也是由伪指令ENDM来结束重复块。用重复汇编伪指令定义的重复块也可带有参数,并在汇编过程中参数被实参代替,但重复块不会被命名,不能在程序的其它地方引用。? 9.4.1?伪指令REPT? 伪指令REPT的作用是把一组语句重复指定的次数,该重复次数由伪指令后面的数值表达式来确定。其一般使用格式如下:? REPT数值表达式? 重复的语句组? ENDM? 例9.8?定义100个初值为32的字节单元,该存储单元的起始符号地址为Ta

文档评论(0)

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

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

1亿VIP精品文档

相关文档