如何在 NASM 中建立工会?
How do you make a union in 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 不关心变量大小,但我仍然希望能够使用不同的引用/变量名称。
真的很容易。 EQU
指令表示 "make this symbol the same as another one" - 因此您可以在示例中简单地编写 r_ax EQU r_eax
。
如果您使用 NASM 的 "local notation"(我强烈推荐...),这甚至可以工作
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
我需要在 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 不关心变量大小,但我仍然希望能够使用不同的引用/变量名称。
真的很容易。 EQU
指令表示 "make this symbol the same as another one" - 因此您可以在示例中简单地编写 r_ax EQU r_eax
。
如果您使用 NASM 的 "local notation"(我强烈推荐...),这甚至可以工作
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