Команда SAR в сборке X86 с одним параметром

В дизассемблированной программе, которую я анализирую, я нашел команду

sar %eax

Что это делает? Я знаю, что sar с двумя аргументами выполняет правый сдвиг, но я не могу найти, что это означает, только с одним параметром.

Эта программа была скомпилирована для процессора Intel x86.

Ответы

Ответ 1

Похоже, что dissembler использовал короткую руку для SAR EAX,1, которая имеет код операции 0xD1F8. когда немедленное значение не равно 1, aka SAR EAX,xx, код операции 0xC1F8 xx, см. ссылку на инструкцию Intel, том. 2B, 4-353.

Ответ 2

Если имеется только один операнд, подразумеваемый сдвиг равен 1.

Так....

SAR %EAX подразумевает подписанный %EAX >> 1

для этого,

SAR %eax = SAR $1, %eax

Я успешно доказал это, анализируя некоторый код в GDB.