为什么这两个指令具有相同的操作码?

时间:2015-05-25 17:45:42

标签: assembly x86

我正在做一些汇编编程(实际编写汇编程序),我注意到MOV EBX, <something>MOV BX, <something>具有相同的操作码0xBB!为什么这样,处理器如何区分这两者?它是根据第二个操作数的大小区分的吗?这就是说80386指令集复杂的原因吗?

1 个答案:

答案 0 :(得分:5)

默认操作数大小由当前操作模式定义,您可以使用0x66前缀切换。在32位模式下运行时0xBB是32位移动,0x66 0xBB是16位。在16位模式下,情况正好相反。

在32位模式下:

66 BB 34 12               mov bx, 0x1234
BB 78 56 34 12            mov ebx, 0x12345678

在16位模式下:

BB 34 12                  mov bx, 0x1234
66 BB 78 56 34 12         mov ebx, 0x12345678