为什么NASM使用0x89上的操作码(137),当它装配在两个寄存器之间MOV指令?
下面是使用NASM组装的代码的示例:
55 push ebp
89E5 mov ebp, esp
83EC04 sub esp, byte +0x4
31C0 xor eax, eax
C9 leave
C3 ret
我想是这样的:
55 push ebp
8BEC mov ebp, esp
83EC04 sub esp, byte +0x4
33C0 xor eax, eax
C9 leave
C3 ret
我想0x8B的原因是:如果你查看MOV指令的二进制表示,它看起来像这样在NASM:
Opcode Mod Reg R/M
10001001 11 100 101 (89 E5)
在这个混乱的部分是REG操作数是第二个。
NASM的语法是这样的: 0x89 11 source_reg destination_reg
和
MOV指令是mov destination_reg, source_reg