Я реализую двоичную трансляцию и должен иметь дело с последовательностями NOP (0x90) длиной около 16 кодов операций. Лучше ли для производительности помещать JMP (до конца) в начале таких последовательностей?
Что быстрее: JMP или строка NOP?
Ответы (3)
Руководство разработчика программного обеспечения архитектуры Intel, том 2B (инструкции, Новая Зеландия) содержит следующую таблицу (стр. 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 байтов, хотя я поддерживаю предложение проверить руководства по оптимизации (для ЦП, на который вы ориентируетесь), является ли JMP
быстрее, чем два таких NOPs
.
nop ***word*** ptr [eax + eax*1 + 00H]
(и то же самое для 9-байтовой записи). Не ваша вина, это, по-видимому, давние ошибки, происходящие из документов Intel.
- person Glenn Slayden; 30.05.2018
66 NOP
? NOP
сама по себе представляет собой 1-байтовую последовательность для ничего не делающих, что я знаю.
- person phil294; 23.07.2018
Если NOP
должны выравнивать поток, то они имеют большую ценность, чем просто NO OP. если вас интересует чистая скорость, см. Руководства по оптимизации Agner Fog Vol. 4а>.
будучи двоичным переводом, я бы начал с перевода (их в эквивалентные nops в целевой системе). Как только все заработает, оптимизируйте мертвый код. В то же время, поскольку эта строка инструкций попалась вам на глаза, попытайтесь понять, для чего они были там, возможно, ожидая, что оборудование что-то сделает, и убедитесь, что ваша переведенная система работает так же.