Assembler 30

Логічний зсув операнда вліво / вправо

SHL і SHRсдвігают біти операнда (регістр / пам'ять) вліво або вправо відповідно на один розряд і змінюють прапор переносу cf. При логічному зсуві все біти рівноправні, а вивільнені біти заповнюються нулями. Зазначене дію повторюється кількість разів, рівне значенню другого операнда.

Це означає: зсув всіх бітів регістра al на 3 розряду вправо. Так що al стане 00001011. Біти зліва заповнюються нулями, а біти справа висуваються. Останній висунутий біт, стає значенням прапора перенесення cf.

Після виконання команди регістр bl буде дорівнює 10010100 (двійкове). Два останніх біта заповнилися нулями, прапор переносу встановлений, тому, що останній висунутий зліва біт дорівнював 1

Команда SAR - зрушує біти операнда (регістр / пам'ять) вправо на один розряд, значення останнього виштовхнутого біта потрапляє в прапор переносу, а вивільнені біти заповнюються знаковим бітом.

Команда SAL - зрушує біти операнда (регістр / пам'ять) вліво на один розряд, значення останнього виштовхнутого біта потрапляє в прапор переносу, а вивільнені біти заповнюються нулями, при цьому знаковий біт не рухається.


Команди циклічного зсуву

Циклічний зсув нагадує зміщення, висунуті біти, знову вдвигаются з іншого боку:

Приклад: команди ror (циклічний зсув вправо)

З малюнка вище, біти обертаються, тобто кожен біт, який виштовхується знову вставляється з іншого боку. Прапор переносу cf містить значення останнього висунутого біта.

ROL і RORсдвігают все біти операнда вліво (для ROL) або вправо (для ROR) на один розряд, при цьому старший (для ROL) або молодший (для ROR) біт операнда вдвигается в операнд справа (для ROL) або зліва (для ROR) і стає значенням молодшого (для ROL) або старшого (для ROR) біта операнда; одночасно висунутий біт стає значенням прапора перенесення cf. Зазначені дії повторюються кількість раз, рівне значенню другого операнда.

RCL і RCRсдвігают все біти операнда вліво (для RCL) або вправо (для RCR) на один розряд, при цьому старший (для RCL) або молодший (для RCR) біт стає значенням прапора перенесення cf; одночасно старе значення прапора перенесення cf вдвигается в операнд справа (для RCL) або зліва (для RCR) і стає значенням молодшого (для RCL) або старшого (для RCR) біта операнда. Зазначені дії повторюються кількість раз, рівне значенню другого операнда.