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?
Odpowiedz
Jeśli NOP
s mają wyrównać strumień, to mają większą wartość niż zwykłe NIE. jeśli zależy Ci na czystej prędkości, zobacz Agner Fog's Optimization Manuals Vol. 4.
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.
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
.
- 1. Co jest szybsze? File_exist lub zapytanie MySQL?
- 2. Co jest szybsze: JDBC lub JNDI?
- 3. Co jest szybsze DOM Insertion lub Manipulation?
- 4. co jest szybsze: odtworzyć lub wyczyścić()?
- 5. pisać lub drukować, co jest szybsze?
- 6. Co jest lepsze/szybsze? Spróbuj złapać lub uniknąć wyjątku?
- 7. Co jest szybsze, surowe style CSS lub wbudowane w ReactJS?
- 8. Co jest szybsze: powtarzanie stylów lub powtarzanie selektorów?
- 9. Co jest szybsze: drzewa wyrażeń lub ręczne emitowanie IL
- 10. Lua - Jeśli i i, co jest szybsze?
- 11. Co jest szybsze: Union czy Concat?
- 12. Co jest szybsze niż std :: pow?
- 13. Co jest szybsze w pamięci, intach lub znakach? Czy mapowanie plików lub czytanie fragmentów?
- 14. Powolna instrukcja jmp
- 15. Zestawienie JLE Przykład instrukcji Jmp
- 16. co jest lepszego php, JSP lub inne
- 17. Szybsze stały Dołączanie ciąg bez makro
- 18. Co jest szybciej w IN lub OR?
- 19. Instrukcja JMP - kod heksadecymalny
- 20. Co sprawia, że jedno z tych zapytań jest szybsze?
- 21. Co jest szybsze/lepsze w użyciu: funkcja MySQL lub PHP md5?
- 22. memcached: co jest szybsze, dodawanie (i sprawdzanie wyniku) lub uzyskiwanie (i ustawianie, gdy zwraca false)
- 23. Co jest szybsze - ładowanie wytrawionego obiektu słownika lub ładowanie pliku JSON - do słownika?
- 24. Co jest szybsze? Używanie biblioteki cUrl PHP lub wywoływanie formularza użyteczności curl shell_exec()
- 25. Co jest szybsze, zapisywanie nieprzetworzonych danych na dysku lub zapisywanie do pliku?
- 26. Co zużywa mniej zasobów i czy jest szybsze przechowywanie File.AppendText lub File.WriteAllText w StringBuilder?
- 27. Android SQLite: które zapytanie ("zapytanie" lub "rawQuery") jest szybsze?
- 28. Czy HttpWebRequest lub Webclient są szybsze?
- 29. Jaki jest efekt korzystania z JMP na adres funkcji?
- 30. Dlaczego ".join() jest szybsze niż + = w Pythonie?
Czy istnieje jakiś powód, dla którego nie można po prostu usunąć NOP? – DaMacc