Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 36

Unknown Author

При сложении и вычитании чисел меняются также флаг нуля ZF и флаг знака SF. <ItaarZF получает значение 1, если результат оказался нулевым, и значение 0, если результат ненулевой; этот флаг представляет интерес при работе как со знаковыми, так и беззнаковыми числами. В флаг же SF заносится знаковый (самый левый) бит результата; этот флаг полезен при работе со знаковыми числами, т. к. он получает значение 1, если результат оказался отрицательным, и значение 0 иначе.

Примеры (ячейки размером в байт):

9-9 = 0 = 00000000b ==> ZF=1, SF=0

8- 9 = -1 - 11111111b ==> ZF=0, SF=1

9- 8=1= 00000001b ==> ZF=0, SF=0

33.2. Команды сложения и вычитания

В ПК имеется несколько команд сложения и вычитания. Основными из них являются следующие:

Сложение:    ADD opl,op2

Вычитание (subtract):    SUB opl,op2

В этих командах допустимы следующие комбинации операндов:

op Г

ор2

r8

m8

i8, r8, m8 i8, r8

сложение/вычитание байтов

г16

il6, rl6, ml6

сложение/вычитание слов

ml6

il6, rl6

Команда ADD складывает операнды и записывает их сумму на место первого операнда: opl:=opl+op2. По команде SUB из первого операнда вычитается второй операнд и полученная разность записывается вместо первого операнда: opl:=opl-op2.

Например:

ADD АН,12    ;АН:=АН+12

SUB SI,Z    ;SI:=SI-Z

ADD Z,-300    ;Z:=Z+(-300)

Мы уже рассмотрели особенности сложения и вычитания целых чисел, поэтому отметим лишь следующее. Команды ADD и SUB работают как с числами размером в байт, так и с числами размером в слово; нельзя, чтобы один операнд был бантом, а другой - словом. При этом числа могут быть как знаковыми, так и беззнаковыми. В этих командах меняются флаги переноса CF, переполнения OF, знака SF и нуля ZF (а также флаги AF и PF, но мы их не будем рассматривать), правила изменения которых мы уже рассмотрели.

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

Увеличение на 1 (increment): INC op Уменьшение на 1 (decrement): DEC op

В этих командах допустимы следующие типы операнда: г8, ш8, г 16, ш1б. Примеры:

INC BL

DEC WORD PTR A

Команда INC аналогична команде ADD op,l, т. e. увеличивает свой операнд на 1: opl:=opl+l, а команда DEC аналогична команде SUB ор,1, т. е. уменьшает операнд на 1: opl:=opl-l (единственное отличие: команды INC и DEC не меняют флаг переноса CF). Выгода от команд INC и DEC в том, что они занимают меньше места в памяти и выполняются быстрее, чем соответствующие команды ADD и SUB.

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

Изменение знака (negative): NEG op

Допустимые типы операнда этой команды: г8, ш8, г16, ш16.