Команды преобразования длины

 

Эти команды используются перед делением, флаги – не модифицируют.

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)

op  
CF  
SHL op,1 ; сдвиг влево

SHR op,1 ; сдвиг вправо 0

 

Рис.8

Арифметический сдвиг – применяется для ускоренного умножения (деления) на 2 чисел со знаком, выполняется по схеме (см. рис.9).

SAL op,1 ; сдвиг влево

SAR op,1 ; сдвиг вправо 0

 
 

 


Рис.9

Циклический сдвиг – для беззнаковых целых, выполняется по схеме (см. рис.10).

ROL op,1 ; сдвиг влево

ROR op,1 ; сдвиг вправо

 

 

Рис.10

Циклический сдвиг через флаг , выполняется по схеме (см. рис.11).

op  
CF  
RCL ор,1 сдвиг влево

RCR op,1 сдвиг вправо

 

 
 


Рис.11

 

Команды работы со стеком

 

Стек – это область оперативной памяти, запись и чтение данных в которой основан на принципе LIFO (Last input first output, т.е. «последним пришел – первым ушел»).

Последовательность данных, которая загружена в стек, может быть считана только в обратном порядке. Стек используется в ПЭВМ для временного хранения данных, необходимых для организации процедур, для передачи параметров в процедуры, а так же для хранения некоторых промежуточных данных.