2016-06-13 49 views
0

我需要在Nasm中复制C风格的联盟,但无法找到如何。你如何在NASM中建立一个工会?

我需要

r_eax dd 0 
r_ax dw 0 

其中r_ax应该驻留在相同的存储单元r_eax的低16位。

在C中,这将是:

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

我明白,NASM并不关心变量的大小,但我还是希望能够使用不同的参考/变量名。

回答

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 
+0

谢谢!后续问题:这些信息在哪里?我花了很长时间搜索答案并浏览各种文档,但没有找到它。 –

+0

简短的回答是:http://www.nasm.us/上的NASM文档。较长的答案是:痛苦的经历。我真的不喜欢NASM,只有一个原因:请参阅http://wiki.osdev.org/JohnBurger:NASMCritique。但它确实允许各种快捷方式...... –