【汇编】宏和MASM编译时语言

宏和MASM编译时语言

echo和".err"

    echo Hello, world!
    end

        在这个程序中唯一的编译时语言是echo语句。end语句是必须的。在MASM汇编期间,echo语句显示其参数列表的文本表示。

        与echo一样,".err"伪指令也会在汇编过程中向控制台显示一个字符串,将文本显示为MASM错误诊断的一部分,并会递增错误计数器,在处理完当前源文件后停止汇编过程。

    .err <Statement must have exactly on operand>

编译时常量和变量

        可以使用textequ或者equ伪指令声明编译时常量,使用"="伪指令声明编译时变量。

    inc_by equ 1
    ctlVar = 0

MASM转义运算符(!)

        将该运算符防止在另一个符号前面,该运算符指示MASM将该字符视为文本,而不是特殊符号。包括分号,视为文本常量而不是注释,例如,"!;"。

MASM求值运算符(%)

        百分号运算符指示MASM对其后面的表达式求值,并用结果替换该表达式。

    num10   =       10
    text10  textequ <10>
    tn11    textequ %num10+1    ;值为文本11

catstr伪指令

        连接字符串为文本对象。

    helloWorld catstr <hello>, <, >, <World!!>

instr伪指令

        查找另一个字符串第一次出现的位置。

    WorldPosn instr 1, <Hello World>, <World>

        从1开始搜索,源字符第一个字符为第1位而不是第0位。

sizestr伪指令

        计算字符串的长度。

    hwlen sizestr <Hello World>     ;值为11

substr伪指令

        从较大的字符串中提取子字符串。

    hString substr <Hello World>, 1, 5

        从"Hello World"提取"Hello"。如果没有指定长度,提取完剩余部分。

条件汇编(编译时决策)

    if constant_boolean_expression1
        Text
    elseif constant_boolean_expression2
        Text
    else
        Text
    endif

重复汇编(编译时循环)

    while constant_boolean_expression
        Text
    endm

标准宏

    macro_namme macro arguments
        ;宏功能体
        endm

        MASM将宏参数视为可选参数。如果定义了两个参数,并使用一个,MASM(通常)不会报错。

        给宏定义行参数加一个":req"后缀,显式的告诉MASM该参数是必须的。

默认参数宏

    neg128 macro reg64HO:=<rdx>, reg64LO:=<rax>
    
        endm

可变参数宏

    varParms macro varying:vararg
        for curArg,<varying>
        byte curArg
        endm
        endm
        
    varParms 1, 2, 3

        一个宏最多只能有一个vararg参数,如果有多个参数,并且有一个是vararg参数,则vararg参数必须是最后一个。

宏展开运算符(&)

        此运算符在任何地方都有效,将就宏名称(或)其他文本符号替换为实际值。

    expand  marcro parm
            byte '&parm',0
            endm
            
            .data
            expand a    ;展开为 byte 'a', 0

宏中局部符号

    jzc marco target
        local NotTarget ;可以多个
        jnz NotTarget
        jc target
    NotTarget:
        endm

        local伪指令明确指示MASM哪些符号是局部符号。

exitm伪指令

立即终止对宏的处理。

扩展资料

参考

  1. [美]兰德尔·海德.64位汇编语言的编程艺术

  2. Microsoft 宏汇编程序参考 | Microsoft Learn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值