我正在实现二进制转换,并且必须处理长度约为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.