1
有人可以幫助我理解x64 asm行爲嗎?我無法找到任何類型的文件。x64 asm奇怪行爲
所以,基本上,我們有:
- 64註冊
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
寄存器溢出,但導致改變所有8個字節,而不是4,爲什麼它是0x0000000000000000但不0xFFFFFFFF00000000)
參見:https://stackoverflow.com/questions/11177137/why-do-most-x64-instructions-zero-the-upper-part-of -a-32位寄存器 –
注意'add eax,0'也將清除RAX的最重要的一半。 –
順便說一句,只有你寫的字節的一半,'al'是1字節,'ax'是兩個字節等。 – harold