专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »汇编语言 » 伪指令:与宏有关的伪指令 »正文

伪指令:与宏有关的伪指令

来源: 发布时间:星期三, 2008年12月10日 浏览:2次 评论:0
在宏定义时,为了满足某种特殊需要,汇编语言还提供了几个伪指令。
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有以下两次引用,点击它们将会显示汇编程序对它们进行宏扩展后所得到程序片段:
    ABSBX
  1    CMP BX,0
  1    JGE next
  1    NEG BX
  1 next:

    ABSAL
  1    CMP AL,0
  1    JGE next
  1    NEG AL
  1 next:

在上述程序片段中,显然标号next定义了二次,所以,汇编程序将显示“标号重复定义”的错误信息。为了避免这种情况的发生,我们需要用下面的方法来定义该宏。
方法2:
ABSMACROword1
LOCALnext
CMPword1,0
JGEnext
NEGword1
next:
ENDM

假设对宏ABS有以下两次引用,点击它们将会显示汇编程序对它们进行宏扩展时所得到程序片段:
    ABSBX
  1      CMP BX,0
  1      JGE ??0000
  1      NEG BX
  1 ??0000:

    ABSAL
  1      CMP AL,0
  1      JGE ??0001
  1      NEG AL
  1 ??0001:

在上述程序片段中,宏体内部的局部标号next分别用符号??0000和??0001来对应它的二次引用。因此,汇编程序不会再显示“标号重复定义”的错误信息。
伪指令LOCAL在子程序中也可起作用(参见7.5.10节),但它的作用与宏定义的作用是不同的,有关该伪指令在子程序的宏定义中功能的主要差异如表9.1所列。
表9.1伪指令LOCAL在子程序和宏中的比较
在子程序中在宏定义中
语句的位置在所有指令之前在所有指令之前
伪指令的作用说明局部变量说明局部标号
伪指令的格式可用一条伪指令来说明多个局部变量,也可连续用多条伪指令来说明可用一条伪指令来说明多个局部标号,也可连续用多条伪指令来说明
调用或引用子程序的不同调用,其局部变量名保存不变在每次宏引用的扩展时,将会自动产生出一个唯一的局部标号

如果本文没有解决您的问题,请进老妖怪开发者社区提问

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: