我需要在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并不关心变量大小,但我仍然希望能够使用不同的引用/变量名称。
答案 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