assembly - 在 MASM 的宏中使用本地标签的问题

标签 assembly macros x86 masm

我要编写一个宏,它采用 E,NE,A,B... 作为参数和单个命令,即 mov eax,ebx ,这将如果前面的 cmp 操作设置的条件为真,则执行。

调用示例如下所示。

cmp bx,20
mDoIf E,<call Dumpregs>

我遇到的问题是,当我尝试使用以下定义进行编译时,出现两个错误之一。使用 LOCAL 定义,我得到一个 undefined symbol 错误:??0000。当我删除 LOCAL 定义时,出现错误:跳转目标必须指定标签

mDoIf MACRO op, command
    LOCAL true
    J&op true
    exitm
    true: 
        command
        exitm

endm

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

试试这个:

mDoIf MACRO op, command
    LOCAL L1, L2

    J&op    short L1
    jmp     short L2

L1: 
    call command
L2:
    exitm
endm

.code
start:
    mov     eax, 1
    cmp     eax, 2
    mDoIf l, DumpRegs

    invoke  ExitProcess, 0
end start

关于assembly - 在 MASM 的宏中使用本地标签的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534589/

相关文章:

c++ - 我怎样才能阻止 gcc 在较新的 ARM cpu 上发出 swap{b}?

c - assembly 功率(A,b)功能

c++ - 读/写一个步长远大于其宽度的矩阵会导致性能损失很大

C++:从宏调用非静态方法

c++ - 预处理器定义在 Release模式下工作,而不是调试

linux - Linux AMD64 中如何使用 fs/gs 寄存器?

assembly - 有没有办法获取寄存器的地址?

c - 内联汇编跳转错误

c - 如何在ARM代码战士项目中调用C语言的汇编代码?

c++ - 替换这个宏