你如何在NASM建立联盟?

时间:2016-06-13 04:23:26

标签: nasm

我需要在Nasm中复制一个C风格的联盟,但无法找到方法。

我需要

r_eax dd 0
r_ax dw 0

其中r_ax应与r_eax的低16位位于相同的存储单元中。

在C中,这将是:

union RegType {
    long eax;
    short ax;
} reg_a;

我知道Nasm并不关心变量大小,但我仍然希望能够使用不同的引用/变量名称。

1 个答案:

答案 0 :(得分:1)

真的很容易。 EQU指令意味着“使此符号与另一个符号相同” - 因此您只需在示例中编写r_ax EQU r_eax

如果你使用NASM的“本地符号”(我强烈推荐......),这甚至都有效。

STRUC Reg_A
    .eax RESD 1
    .ax EQU .eax
    .al EQU .ax
    .ah EQU ????? ; Ummm!
ENDSTRUC

我会重新安排它,但是:

STRUC Reg_A
    .al RESB 1
    .ah RESB 1
    .eah RESW 1  ; Not a real symbol - but NASM won't allow unnamed members
    .ax EQU .al
    .eax EQU .ax
ENDSTRUC