2016-06-13 6 views
0

NasmでCスタイルの共用体を再現する必要がありますが、方法を見つけることはできません。NASMでどのように組合を作りますか?

私はr_axがr_eaxの下位16ビットと同じメモリ位置に存在する必要があり

r_eax dd 0 
r_ax dw 0 

を必要とします。 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を見てください。しかし、それはすべての種類のショートカットを許可しています... –

関連する問題