しばらくの間、x86 アセンブリで何かが混乱しました。NASM が操作のサイズを推測できる方法/タイミングです。例を次に示します。
mov ebx, [eax]
ここでは、eax に保持されているアドレスに格納されている 4 バイトを ebx に移動しています。レジスタが 32 ビットであるため、操作のサイズは 4 バイトと推測されます。
ただし、この操作は推論されず、コンパイル エラーがスローされます。
mov [eax], 123456
もちろん、解決策はこれです:
mov dword [eax], 123456
これにより、数値 123456 の 32 表現が、eax に保持されているアドレスに格納されているバイトに移動されます。
しかし、これは私を混乱させます。確かに eax が 32 ビットであることを確認できるので、mov の後に dword を指定しなくても 32 ビット値として保存したいと考えるべきではありませんか?
確かに、12345 の 16 ビット表現 (16 ビットに収まる小さい数値) を eax に入れたい場合は、次のようにします。
mov ax, 12345