2015-10-09 181 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

相关问题