Найти в Дзене
Junior Coder

Ассемблер. Команды битового сдвига

Эта статья поможет вам лучше понять не только как работают команды сдвига, но и то, как компьютер оперирует с цифрами и символами. Языки высокого уровня вам такого понимания не дадут. Команды сдвига бывают циклическими, логическими и арифметическими. Циклические сдвиги влияют на значения флагов OF и CF, остальные на значения флагов OF, SF, PF, CF, ZF. Циклические команды ROL и ROR сдвигают биты влево и вправо соответственно при этом выдвигаемые биты за пределы размера регистра или переменной в памяти, заносятся в освобождающиеся биты. (Как расшифровываются точно не знаю, но скорее всего - rotate overflow left или right соответственно). Чтобы лучше понять как работает команда и где ее можно использовать я написал небольшую программу, которая выводит на экран значение переменной. Для этого сдвигаем старшие биты на четыре позиции в младшую часть регистра и выводим их на экран. Надеюсь, что все будет понятно из комментариев к программе. Команда AND - это команда логического сравнения,

Эта статья поможет вам лучше понять не только как работают команды сдвига, но и то, как компьютер оперирует с цифрами и символами. Языки высокого уровня вам такого понимания не дадут.

Команды сдвига бывают циклическими, логическими и арифметическими. Циклические сдвиги влияют на значения флагов OF и CF, остальные на значения флагов OF, SF, PF, CF, ZF.

Циклические команды ROL и ROR сдвигают биты влево и вправо соответственно при этом выдвигаемые биты за пределы размера регистра или переменной в памяти, заносятся в освобождающиеся биты. (Как расшифровываются точно не знаю, но скорее всего - rotate overflow left или right соответственно).

Это команда ROL, команда ROR работает в обратном направлении.
Это команда ROL, команда ROR работает в обратном направлении.

Чтобы лучше понять как работает команда и где ее можно использовать я написал небольшую программу, которая выводит на экран значение переменной. Для этого сдвигаем старшие биты на четыре позиции в младшую часть регистра и выводим их на экран. Надеюсь, что все будет понятно из комментариев к программе.

-3

Команда AND - это команда логического сравнения, она поочередно сравнивает биты маски и регистра, работает так:

0+0=0

0+1=0

1+1=1

Для чего мы это делаем: символ у нас занимает один байт, но его значение равно четырем битам, поэтому, для вывода на экран, старшие четыре бита необходимо обнулить.

00001111b - это "f"

00001010b - это "a"

00000001b - это 1

прибавляем к этим значениям "0" (30h), теперь значения равны символьным эквивалентам по ASCII-таблице:

00111111b - это "f" (3fh)

00111010b - это "a"

00110001b - это 1

00110000b - это 30-ть.

объясняльщик из меня тот еще, но надеюсь что все понятно, скачайте таблицу ASCII если остались вопросы.

Значение переменной я выбрал случайно, вы можете использовать какое-то свое.

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

-4

Приведенная для примера программа поможет вам лучше понять как работает эта команда. Программа выводитна экран ту же переменную A24Fh, но уже в бинарном виде.

-5

Команды логического сдвига SHL и SHR сдвигают биты влево и вправо соответсвенно, но в данном случае в освободившиеся биты заносятся нули. Эти команды часто используют для быстрого деления или умножения:

00000011 - это 3, допустим что в AX

shl ax,1

00000110 - это 6

приведенная ниже программа демонстрирует работу SHL

-6

-7

после каждого нажатия на любую клавишу значение переменной будет увеличиваться вдвое.

Команды арифметического сдвига SAL и SAR работают точно также как и SHL, SHR, но они предназначены для работы со знаковыми числами. Для обозначения знака числа в компьютере используется самый старший бит (самый левый), 0 - для положительных чисел, 1 - для отрицательных. При использовании команд SAL и SAR этот бит не меняется.

11111111b - это минус один, допустим, что в AX

SAR AX,2

10011111b - результат.

Команды арифметического сдвига так же обычно используют для операций деления и умножения знаковых чисел.

На этом все, надеюсь, что статья была полезной для вас.

#Ассемблер #команды сдвига #shl #shr #rol #ror #rcl #rcr