Команды сложения и вычитания. Операции сложения и вычитания одинаково для знаковых и беззнаковых целых

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

Перечислим команды, относящиеся к группе команд сложения и вычитания:

а) ADD op1, op2 ; op1 := op1+op2

SUB op1, op2 ; op1 := op1 – op2

Сложение (вычитание) операндов в дополнительном двоичном коде, результат помещается на место первого операнда, второй операнд не изменяется.

Команда модифицирует регистр флагов FLAGS в соответствии с результатом операции, а именно:

ZF – нулевой рез-т,

SF – знак результата,

PF – флаг четности,

CF, AF – флаги переносов,

OF – флаг переполнения.

Примеры:

ADD AH, 12 ; AH := AH + 12 (1Б)

SUB z, BX ; z := z – BX (2Б)

б) ADC op1, op2 ; op1 := op1+op2+CF

SBC op1, op2 ; op1 := op1 – op2 – CF

Сложение (вычитание) операндов с переносом, образованным предыдущей командой.

Модифицирует флаги аналогично п.(а).

Например, если требуется сложить двойные слова, расположенные в парах регистров

(AX, BX) := (AX, BX) + (CX, DX),

причем AX, CX – старшие байты слагаемых,

BX, DX – младшие байты.

Сложение выполняется двумя командами:

ADD BX, DX

ADC AX, CX

в) Специальный случай сложения – изменение операнда на единицу.

INC op ; op:= op +1 инкремент

DEC op ; op:= op –1 декремент

г) Десятичная коррекция результата предыдущей операции. Это анализ флагов и преобразование результата сложения (вычитания) BCD-кодов. BCD-операнды обрабатываются обычными командами сложения и вычитания, а затем размещается команда десятичной коррекции.

Команда коррекции обрабатывает только однобайтовый операнд, находящийся в AL, поэтому команды десятичной коррекции операнда не имеют (подразумеваемая адресация).

DAA; коррекция после сложения

DAS; коррекция после вычитания.

Например,

ADD AL, y

DAA

SUB AL, DH

DAS

Примечание: BCD-операнды, представленные более, чем одним байтом должны обрабатываться побайтно.

Команды десятичной коррекции модифицирует флаги аналогично п.(а), за исключением флагов AF и OF.

Дополнительные команды

а) Команда сравнения

CHP op 1, op 2; op 1 - op2

Результат нигде не запоминается.

Цель команды – модификация флагов: ZF, SF,PF,CF,AF,OF.

б) Команда изменения знака

NEG op

Операнд может быть байт или слово в регистре или в ячейке памяти.

Пример,

MOV AH, 12

NEG AH ; AH := -12

Если операнд равен нулю, то его значение не изменяется.

Команда модифицирует флаги аналогично п.(а), причем

CF=1, кроме случая, когда операнд равен нулю;

OF=0, кроме случая, когда op=-128 (для 1Б), тогда OF=1, а операнд остается без изменения.

Наши рекомендации