Что такое регистр %eiz?

В следующем ассемблерном коде, что я разгрузил использование objdump:

lea    0x0(%esi,%eiz,1),%esi

Что такое регистр %eiz? Что предыдущее кодирует средний?

52
задан starblue 31 March 2010 в 06:35
поделиться

1 ответ

См. Почему GCC LEA EIZ? :

Очевидно % eiz - это псевдорегистр, который всегда принимает нулевое значение (например, r0 ] на MIPS).

...

В конце концов я нашел сообщение в списке рассылки гуру binutils Яна Лэнса Тейлора, которое раскрывает ответ. Иногда GCC вставляет инструкции NOP в поток кода, чтобы обеспечить правильное выравнивание и тому подобное. Инструкция NOP занимает один байт, поэтому можно подумать, что можно просто добавить столько, сколько нужно. Но, по словам Яна Лэнса Тейлора, чип быстрее выполняет одну длинную инструкцию, чем несколько коротких. Таким образом, вместо того, чтобы вставлять семь инструкций NOP, они вместо этого используют один причудливый LEA, который использует семь байтов и семантически эквивалентен NOP.

55
ответ дан 7 November 2019 в 09:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: