1
誰かがx64 asmの動作を理解できますか?私はそのためのあらゆる種類の文書を見つけることができません。x64 asm奇妙な振る舞い
ので、基本的に、我々は持っている:
- のx64は
RAX
を登録します。 - x32レジスタ
EAX
。 - x16レジスタ
AX
。 - x8レジスタ
AL
。
となりましたコード:
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add al, 1
結果は0xFFFFFFFFFFFFFF00になります(正しい、al
レジスタオーバーフローが、我々は唯一のAL
1バイトを変更)
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add ax, 1
結果が正しい(0xFFFFFFFFFFFF0000なり、 ax
レジスタオーバーフローですが、変更するのはAX
2バイト)
mov rax, -1 (0xFFFFFFFFFFFFFFFF)
add eax, 1
結果は0x0000000000000000である(WTF?eax
レジスタオーバーフロー、それは0x0000000000000000なく0xFFFFFFFF00000000なぜ全8バイトの代わりに4を変更結果)
を参照してくださいになります。https://stackoverflow.com/questions/11177137/why-do-most-x64-instructions-zero-the-upper-part-of -a-32-bit-register –
'add eax、0'も' RAX'の最も重要な部分をクリアすることに注意してください。 –
Btwあなたが書いたバイト数の半分だけです.'al'は1バイト、 'ax'は2バイトです。 – harold