由以下操作生成的操作码:

or ebx, 0ffffffffh

NASM的优势是:
83CBFF

但是在《英特尔指令手册》中:
81 /1 id      OR r/m32, imm32
83 /1 ib      OR r/m32, imm8

我的问题是,为什么NA​​SM使用操作码83而不是81,以及如何生成操作码81

这是NASM的命令行:nasm -fwin32 file.asm -l list.lst

最佳答案

NASM选择8位操作数大小作为优化,因为它做同样的事情并且占用更少的空间。您可以通过以下命令强制NASM使用特定的操作数大小:

or ebx, strict dword 0ffffffffh

结果是:
81 cb ff ff ff ff

在不进行优化的情况下汇编原始代码(nasm -O0)也会得到此结果。

请注意,如果寄存器是EAX,则执行此操作将得到0D操作码(mov eax, imm32)而不是81。因此,在这种情况下,您可能必须自己输出指令:db 0x81, 0xc8, 0xff, 0xff, 0xff, 0xff

关于assembly - 在NASM中使用OR r/m32,imm32,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44504943/

10-11 18:36