В операциях сдвига эти инструкции играют ту же роль, что и инструкции сложения с переносом (adc
) или вычитания с переносом (sbb
) в дополнениях:
Используетсяв качестве второй инструкции при обработке чисел, длина которых превышает максимальный размер регистра ЦП, поэтому число должно обрабатываться с использованием нескольких операций.
Пример: на процессоре 386 можно выполнять 32-разрядные операции с использованием одной инструкции,Однако вам может потребоваться обработать 320-разрядные целые числа.
Допустим, у нас есть 4-разрядный ЦП, и мы хотим выполнить операцию "арифметического сдвига вправо" (sar
) на 16-разрядномцелое число:
Integer: ABCDEFGHIJKLMNOP (A-P = some bits that may be 1 or 0)
Operation on a 16 bit CPU:
ABCDEFGHIJKLMNOP (SAR 1) -> AABCDEFGHIJKLMNO, CF = P
Operation on a 4 bit CPU:
ABCD (SAR 1) -> AABC, CF = D
EFGH, CF = D (RCR 1) -> DEFG, CF = H
IJKL, CF = H (RCR 1) -> HIJK, CF = L
MNOP, CF = L (RCR 1) -> LMNO, CF = P
So the final result on the 4-bit CPU is AABCDEFGHIJKLMNO, CF = P
Конечно, тот же пример будет работать с 256-битным числом на 64-битном процессоре ...
Обратите внимание:
Используя add/adc
, sub/sbc
или shl/rcl
, мы начинаем с младших бит и продолжаем с старших бит.Однако, используя shr/rcr
или sar/rcr
, это наоборот.