Ale*_*lke -2
NOP请注意,在代码方面,英特尔处理器中只有一条指令。它的代码是 0x90,它只是一个字节。
较长的“nop”是不执行任何操作的指令,例如XCHG寄存器本身。例如,对于“2 个字节NOP”,您可以这样写:
XCHG AL, AL
Run Code Online (Sandbox Code Playgroud)
其编码为:
86 C0
Run Code Online (Sandbox Code Playgroud)
所以你可以编写宏来获得你想要的任何大小。找到所有这些“不执行任何操作”的指令需要做一些工作。另外,有时(大多数情况下)编译器会尝试优化您的表达式。这就是可能需要输入代码的地方。
我所知道的最长的编码将使用该LEA指令。这是可以优化地址偏移量的地方,因为它们将是零,很多零,并且应该优化它们。
正如 Jester 提到的,您可以使用现有的宏。互联网上有该文件的副本。
https://github.com/lettolabs/nasm/blob/master/macros/smartalign.mac
解码所有这些指令并看看它们是什么是很有趣的。
例如,他们使用 aMOV %si, %si创建 2 个字节NOP。