什么是更快:JMP或NOP串?

dc0*_*dc0 11 assembly opcode

我正在实现二进制转换,并且必须处理长度约为16个操作码的NOP序列(0x90).在这样的序列开始时将JMP放到最后(性能)是否更好?

Fra*_*kH. 13

英特尔架构软件开发人员指南,2B卷(指令NZ)包含以下表(第4-12)约NOP:

表4-9.推荐的NOP指令多字节序列

Length    Assembly                                   Byte Sequence
=================================================================================
2 bytes   66 NOP                                     66 90H
3 bytes   NOP DWORD ptr [EAX]                        0F 1F 00H
4 bytes   NOP DWORD ptr [EAX + 00H]                  0F 1F 40 00H
5 bytes   NOP DWORD ptr [EAX + EAX*1 + 00H]          0F 1F 44 00 00H
6 bytes   66 NOP DWORD ptr [EAX + EAX*1 + 00H]       66 0F 1F 44 00 00H
7 bytes   NOP DWORD ptr [EAX + 00000000H]            0F 1F 80 00 00 00 00H
8 bytes   NOP DWORD ptr [EAX + EAX*1 + 00000000H]    0F 1F 84 00 00 00 00 00H
9 bytes   66 NOP DWORD ptr [EAX + EAX*1 + 00000000H] 66 0F 1F 84 00 00 00 00 00H

这允许您构造NOP特定大小的"填充".有两个,你可以桥接16字节,虽然我建议检查优化指南(针对你的目标CPU)是否JMP比两个这样快NOPs.


Nec*_*lis 4

如果NOPs 要对齐流,那么它们比仅仅作为 NO OP 更有价值。如果您关心纯粹的速度,请参阅Agner Fog 的优化手册卷。4 .