汇编代码是
mov eax, 0x3a14a5
jmp eax
GAS 产生一个操作码
0xB8, 0xA5, 0x14, 0x3A, 0x00
0xFF, 0xE0
而 NASM 产生和操作码
0x66, 0xB8, 0xA5, 0x14, 0x3A, 0x00
0x66, 0xFF, 0xE0
因此,您会看到 NASM 在代码之前预先附加了一个 0x66。在我的程序中(我不会详细介绍),GAS 操作码可以正常工作,而 NASM 代码会导致崩溃,表明这两个操作码不相等。为什么 NASM 预先附加 0x66,我怎样才能摆脱它?
更新:该bits 32
指令有效。感谢您的快速回复、链接和解释!