Команды преобразования длины
Эти команды используются перед делением, флаги – не модифицируют.
CBW
– преобразует байт со знаком в AL, в слово со знаком в АХ путем распространения старшего бита AL по всем разрядам AH;
CWD
– преобразует слово в АХ в двойное слово в (DX,AX).
Команды побитовой обработки (логические команды)
Данная группа команд отличается отсутствием межразрядных переносов. Команды делятся на 2 группы.
а) Логические команды.
Общие черты:
1) команды выполняют логические операции над соответствующими разрядами операндов параллельно;
2) единица трактуется как «истина», ноль – «ложь»;
3) модифицируют флаги, но важен только флаг ZF «нулевой результат»;
4) операндами могут быть байты или слова в регистрах или ячейках памяти, второй операнд может быть непосредственным операндом.
Перечислим основные команды
NOT op; отрицание (инверсия кода)
Флаги не модифицирует.
AND op1, op2; op1:= op1^ op2
Например, 0Fh ^ 15h = 05h
^ | |
OR op1, op2; op1:= op1 v op2
Например, 0Fh v 15h = 1Fh
XOR op1, op2; op1 := op1Å op2
Например, 0Fh v 15h = 1Ah
TEST op1, op2; op1^ op2 – результат не запоминается
Эта операция называется «логическое сравнение». Цель формирование флага
ZF = 1 - если результат нулевой, иначе ZF = 0.
Как правило, второй операнд трактуется как маска, хранящая единицы в тех разрядах, которые нужны для дальнейшей обработки.
б) Команды сдвигов
Сдвиги на n разрядов влево можно трактовать, как умножение на 2n, потому все команды сдвигов имеют 2 операнда:
оp1 – рассматривается, как набор битов, подлежащих сдвигу;
op2 – константа сдвига, т.е. целое число без знака, может принимать значение 1 или CL. Единица означает сдвиг на 1 разряд, а CL – содержимое регистра CL, хранящего значение n. Сдвиг с CL выполняется как повтор однократных сдвигов, содержимое CL не меняется, при CL=0, сдвиг блокируется.
Результат записывается на место первого операнда.
Команды сдвига модифицируют флаги, кроме AF, а “уходящий” бит фиксируется в CF.
Команды сдвига бывают логические, арифметические и циклические.
Рассмотрим их на командах однократного сдвига.
Логический сдвиг – для беззнаковых чисел может применяться для ускоренного умножения (деления) на 2, выполняется по схеме (см. рис.8)
|
|
SHR op,1 ; сдвиг вправо 0
Рис.8
Арифметический сдвиг – применяется для ускоренного умножения (деления) на 2 чисел со знаком, выполняется по схеме (см. рис.9).
SAL op,1 ; сдвиг влево
SAR op,1 ; сдвиг вправо 0
Рис.9
Циклический сдвиг – для беззнаковых целых, выполняется по схеме (см. рис.10).
ROL op,1 ; сдвиг влево
ROR op,1 ; сдвиг вправо
Рис.10
Циклический сдвиг через флаг , выполняется по схеме (см. рис.11).
|
|
RCR op,1 сдвиг вправо
Рис.11
Команды работы со стеком
Стек – это область оперативной памяти, запись и чтение данных в которой основан на принципе LIFO (Last input first output, т.е. «последним пришел – первым ушел»).
Последовательность данных, которая загружена в стек, может быть считана только в обратном порядке. Стек используется в ПЭВМ для временного хранения данных, необходимых для организации процедур, для передачи параметров в процедуры, а так же для хранения некоторых промежуточных данных.