灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2910回复:0

宏参数的特殊运算符

楼主#
更多 发布于:2012-09-10 18:55

为了宏定义和的某些特殊需要,汇编程序还支持几个具体特定含义的运算符。

9.2.1 连接运算符

在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符(;)。

例9.5 定义一个转移宏JUMP,其一个参数决定转移类别,另一个参数指定转移目标。

解:

JUMPMACROCON, here

J;CONhere

ENDM

假设存在下面二个语句,那么,点击它们可得到扩展后的指令。

    JUMP mp, next

  1     Jmp next



    JUMP nz, next1

  1     Jnz next1

例9.6 定义一个问候性的字符串宏GREETING,其一个参数说明字符串的变量名,另一个参数指名问候的对象。

解:

GREETINGMACROMSG, name

MSGDB ’Hello, ;name’

ENDM

假设有下面语句,那么,点击它们将会扩展得到三个问候性的字符串定义。

    GREETING STR1, 张三

  1     STR1 DB ’Hello, 张三’



    GREETING STR2, 李四

  1     STR2 DB ’Hello, 李四’



    GREETING MSG1, John

  1     MSG1 DB ’Hello, John’

9.2.2 字符串整体传递运算符

字符串整体传递运算符是一对尖括号<>,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。在宏时,如果实参内包含逗号、空格等间隔符,则必须使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该运算符括起来。

假设有下面定义字符串的宏DEFMSG,

DEFMSGMACROMSG

DB’;MSG’, 0DH, 0AH, ’$’

ENDM

那么,使用和不使用该运算符的宏及其宏扩展如下所示:

    DEFMSG

  1     DB ’Are you ready?’, 0DH, 0AH, ’$’



    DEFMSG Are you ready?

  1     DB ’Are’, 0DH, 0AH, ’$’

喜欢0 评分0
游客

返回顶部