`
zhaole609
  • 浏览: 338085 次
  • 性别: Icon_minigender_1
  • 来自: 河南
社区版块
存档分类
最新评论

关于汇编中宏的操作

 
阅读更多

1.宏操作符"<>"

在宏调用时, 当实在参数包含空格或逗号等间隔符号时,必须使用"<"和">"作为参数的定界符。例如:

Data      marco   TheData;宏定义

db  TheData

endm;

调用:Data  5,4,3;展开为 db 5

 Data  <5,4,3>;展开为 db 5,4,3

2.宏操作符"&"

    在宏定义时,当形式参数作为标识符或字符串的一部分时,必须使用&作为分隔符

DebugMsg  macro Point,String

               local  SkiData

       push ds

               push  cs

               pop   ds

               lea    dx,Msg&Point&

               mov   ah,9

               int     21h

               pop   ds

               jmp   ds

Msg&Point&     db   'At point &Point&:&String&',0dh,0ah,'$'

SkipData:

       endm

调用:DebugMsg   2,<Invalid   operand>

输出信息:“At point 2:Invalid operand”

被展开发:Msg2   db   'At  point 2:Invalid operand',0dh,0ah,'$'

3.宏操作符 ’ %‘

当宏调用时,若在实在参数中使用"%",则MASM将"%"后常数表达式的值作为参数,而非表达式本身。

GetData     marco   Param

                  mov    ax,Array [Param*2]

 endm

调用:GetData    100+5;展开为mov ax,Array[100+5*2]

调用 :GetData     %100+5;展开为mov ax,Array[105*2]

4.宏操作符"!"

对于包含在"<"和">"这间的文本串,MASM将出现在"!"之后的特殊字符(<,>,%,",',,)作为普通字符处理。若将"!"作为普通字符,则使用"!!"."!"不适用于 包含在引号中的字符串。

DefString    macro  String

                  db          "&String&$"

宏调用:        DefString  <Input a Integer(!>0):>

宏展开:      db         "Input a  Integer (>0):$"

再如:

<20!%!>10!%>;被 汇编为文本串20%>10%

5.宏注释符";;"

在宏定义中,以";;"开始的宏注释,在宏展开时被忽吃略。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics