为什么这两条指令有相同的操作码?
Why do these two instructions have the same opcode?
我正在做一些汇编编程(实际上是在写一个汇编程序),我注意到 MOV EBX, <something>
和 MOV BX, <something>
有相同的操作码 0xBB
!为什么会这样,处理器如何区分两者?它是否根据第二个操作数的大小进行区分?而这就是为什么说80386指令集复杂的原因吗?
默认操作数大小由当前操作模式定义,您可以使用 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
我正在做一些汇编编程(实际上是在写一个汇编程序),我注意到 MOV EBX, <something>
和 MOV BX, <something>
有相同的操作码 0xBB
!为什么会这样,处理器如何区分两者?它是否根据第二个操作数的大小进行区分?而这就是为什么说80386指令集复杂的原因吗?
默认操作数大小由当前操作模式定义,您可以使用 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