// Code I'll be working with
int shift_left2_rightn(int x, int n)
{
x <<= 2;
x >>= n;
return x;
}
Вопрос 1. Сдвиг влево = SAL
и SHL
. Моя книга говорит, что они имеют тот же эффект. Тогда почему две смены?
Например:
movl 8(%ebp), %eax //Get x
_______ //x <<= 2
Моя книга дает ответ на
sall $2, %eax
было бы
shll $2, %eax
также был правильный ответ?
Вопрос 2:
С точки зрения непрофессионала, в чем разница между SHR
и SAR
? В моей книге говорится, что один — это логический сдвиг (заполняется нулями), а другой — арифметический сдвиг (заполняется копиями знакового бита).
Что заполняет битами 0/знака?
Например:
Как я узнаю, какой из них использовать со следующими инструкциями по сборке?
movl 12(%ebp), %ecx //Get n
______ //x >>=n
В конце книги есть ответ
sarl %cl, %eax
Пожалуйста, объясните мне, что произойдет, если мы используем shrl
.
Спасибо за вашу помощь в понимании этого!!