Читать «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
В ПК имеется несколько команд сложения и вычитания. Основными из них являются следующие:
Сложение: ADD opl,op2
Вычитание (subtract): SUB opl,op2
В этих командах допустимы следующие комбинации операндов:
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.