2015-10-09 252 views
1

我使用nasm來學習程序集。下面是源代碼:mov eax,0和mov ax之間的機器碼差異,0

[BITS 32] 
mov ebx, 0 
mov bx, 0 
mov bl, 0 

然後我用 'ndisasm -b 32 TEST.bin,燒寫' 得到輸出如下:

00000000 BB00000000  mov ebx,0x0 
00000005 66BB0000   mov bx,0x0 
00000009 B300    mov bl,0x0 

我的問題是BB00000000和差異66BB0000,我知道MOV的操作碼是B,但是B之前的66是什麼?

回答

0

0x66是操作數大小覆蓋前綴,這意味着如果默認操作數大小爲32位(根據您的情況),它將成爲16位a操作碼在16位大小寄存器上工作(bx在您的情況下)

+0

噢,謝謝,你能給我一些線程來獲取有關操作數大小的更多信息嗎? – Bobo

+0

@bobo此圖表可能有所幫助:http://wiki.osdev.org/X86-64_Instruction_Encoding#Operand-size_and_address-size_override_prefix –

+0

@MichaelPetch好的,謝謝。 – Bobo

相關問題