Win32asm обучение


    d8ef8794     

После выполнения команды регистр bl



shl bl, 2
После выполнения команды регистр bl будет равен 10010100 (двоичное). Два последних бита заполнились нулями, флаг переноса установлен, потому, что последний выдвинутый слева бит был равен 1

Здесь есть еще два других опкода: (сдвиг арифметический операнда влево/вправо)
SAL операнд, количество_сдвигов (Shift Arithmetic Left)

SAR операнд, количество_сдвигов (Shift Arithmetic Right)
Команда SAL такая же, как SHL, а вот SAR не совсем такая, как SHR. Команда SAR также, как и SHR сдвигает все биты операнда вправо на один разряд, при этом выдвигаемый справа бит становится значением флага переноса cf.

Обратите внимание: одновременно слева в операнд вдвигается не нулевой бит, как в SHR, а значение старшего бита операнда. Пример:
al = 10100110

sar al, 3

al = 11110100

sar al, 2

al = 11111101
bl = 00100110

sar bl, 3

bl = 00000010
Циклический сдвиг
rol операнд, количество_сдвигов ; циклический сдвиг операнда влево

ror операнд, количество_сдвигов ; циклический сдвиг операнда вправо

rcl операнд, количество_сдвигов ; циклический сдвиг операнда влево через флаг переноса

rcr операнд, количество_сдвигов ; циклический сдвиг операнда вправо через флаг переноса

Циклический сдвиг напоминает смещение, выдвигаемые биты, снова вдвигаются с другой стороны:
Пример: команды ror (циклический сдвиг вправо)


















































    бит 7
бит 6
бит 5
бит 4
бит 3
бит 2
бит 1
бит 0
выдвиг- ается
Операнд   1
0
0
1
1
0
1
1
 
ror операнд,3         1
0
0
1
1
0 1 1
Результат   0
1
1
1
0
0
1
1
 

Как видно из рисунка выше, биты вращаются, то есть каждый бит, который выталкивается снова вставляется с другой стороны. Флаг переноса cf содержит значение последнего выдвинутого бита.
RCL и RCR фактически такие же как ROL и ROR. Их названия предлагают, что они используют флаг переноса cf, для указания последнего выдвигаемого бита, но поскольку ROL и ROR делают тот же самое, они не отличаются от них.

Содержание  Назад  Вперед