2011-07-21 12 views
11

Wdrażam tłumaczenie binarne i mam do czynienia z sekwencjami NOP (0x90) o długości około 16 opkodów. Czy na początku takich sekwencji lepiej jest umieścić JMP (do końca)?Co jest szybsze: JMP lub ciąg NOPów?

+4

Czy istnieje jakiś powód, dla którego nie można po prostu usunąć NOP? – DaMacc

Odpowiedz

1

Będąc tłumaczeniem binarnym, zacznę od przetłumaczenia (ich odpowiedniki w systemie docelowym). Gdy wszystko działa, zoptymalizuj martwy kod. W tym samym czasie, ponieważ ten ciąg instrukcji przykuł twoje oko, spróbuj zrozumieć, po co tu są, może czekaj na sprzęt, aby coś zrobić, i upewnij się, że twój przetłumaczony system działa tak samo.

12

Intel Architecture Software developer's guide, volume 2B (instructions N-Z) zawiera się w poniższej tabeli (str 4-12) o NOP:

Tabela 4-9. Zalecana Sequence Multi-Byte z NOP Instrukcji

 
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

To pozwala skonstruować "wyściółkę" NOP niektórych rozmiarach. W przypadku dwóch z nich można mostkować 16 bajtów, ale proponuję sprawdzić przewodniki optymalizacji (dla procesora, na który kierujesz procesor), czy numer JMP jest szybszy od dwóch takich NOPs.

Powiązane problemy