我正在做一些汇编编程(实际上编写汇编程序),我注意到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
Run Code Online (Sandbox Code Playgroud)
在16位模式下:
BB 34 12 mov bx, 0x1234
66 BB 78 56 34 12 mov ebx, 0x12345678
Run Code Online (Sandbox Code Playgroud)