Ответ 1
Похоже, что dissembler использовал короткую руку для SAR EAX,1
, которая имеет код операции 0xD1F8
. когда немедленное значение не равно 1, aka SAR EAX,xx
, код операции 0xC1F8 xx
, см. ссылку на инструкцию Intel, том. 2B, 4-353.
В дизассемблированной программе, которую я анализирую, я нашел команду
sar %eax
Что это делает? Я знаю, что sar
с двумя аргументами выполняет правый сдвиг, но я не могу найти, что это означает, только с одним параметром.
Эта программа была скомпилирована для процессора Intel x86.
Похоже, что dissembler использовал короткую руку для SAR EAX,1
, которая имеет код операции 0xD1F8
. когда немедленное значение не равно 1, aka SAR EAX,xx
, код операции 0xC1F8 xx
, см. ссылку на инструкцию Intel, том. 2B, 4-353.
Если имеется только один операнд, подразумеваемый сдвиг равен 1.
Так....
SAR %EAX
подразумевает подписанный %EAX >> 1
для этого,
SAR %eax = SAR $1, %eax
Я успешно доказал это, анализируя некоторый код в GDB.