如何将x86_64 64位寄存器名称转换为GNU汇编中相应的32位寄存器名称?

时间:2016-12-12 18:57:14

标签: assembly x86-64

我想清除GNU汇编中的高位32位x86_64 64位通用寄存器(我使用的是GNU汇编器2.25.2)。输出到EAX寄存器的操作清除RAX寄存器的高32位。

mov    eax, eax

可以使用宏来为所有x86_64 64位通用寄存器进行泛化。

.macro ClearUpper32bits register64
    mov  register32, register32
.endm

问题是如何获得64位寄存器名称的相应32位寄存器名称。一种解决方案是根据每个寄存器名称在宏中切换操作数。

.macro ClearUpper32bits register64
    .if (\register64 == rax)
    mov    eax, eax
    .elseif (\register64 == rbx)
    mov    ebx, ebx
    (Repeat the two lines for RCX ... R14 registers)
    .elseif (\register64 == r15)
    mov    r15d, r15d
    .endif
.endm

这是多余的,在复制行时很容易出错。有没有比这个宏更好的方法?

0 个答案:

没有答案