2016-06-13 48 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。但它確實允許各種快捷方式...... –