What is faster: JMP or string of NOPs?

后端 未结 3 727
死守一世寂寞
死守一世寂寞 2020-12-17 17:25

I\'m implementing binary translation and have to deal with sequences of NOPs (0x90) with length about 16 opcodes. Is it better for performance to place JMP (to the end) at s

相关标签:
3条回答
  • 2020-12-17 17:53

    The Intel Architecture Software developer's guide, volume 2B (instructions N-Z) contains the following table (pg 4-12) about NOP:

    Table 4-9. Recommended Multi-Byte Sequence of NOP Instruction

    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

    This allows you to construct "padding NOP" of certain sizes. With two of those, you can bridge 16 Bytes, although I second the suggestion to check the optimization guides (for the CPU you're targeting) whether a JMP is faster than two such NOPs.

    0 讨论(0)
  • 2020-12-17 18:00

    If the NOPs are to align the stream, then they have more value than just being a NO OP. if your concerned with pure speed, see Agner Fog's Optimization Manuals Vol. 4.

    0 讨论(0)
  • 2020-12-17 18:15

    being a binary translation I would start by translating (them into equivalent nops on the target system). Once things are working then optimize out dead code. At the same time since this string of instructions caught your eye, try to understand what they were there for, perhaps waiting on hardware to do something, and make sure that your translated system functions the same.

    0 讨论(0)
提交回复
热议问题