Арифметические операции над (A) и (r)
а) Сложение
ADD ri | A(A) +(ri) <B1> | ri |
б) Сложение с переносом
ADC ri | A(A) +(ri) + (Tc) <B1> | ri |
в) Вычитание
SUB ri | A(A) -(ri) <B1> | ri |
г) Вычитание с переносом
SBB ri | A(A) -(ri) - (Tc) <B1> | ri |
В рассмотренных командах производятся арифметические действия над содержимым двух регистров, один из которых (или оба) - аккумулятор. В результате выполнения операции прежнее содержимое аккумулятора замещается суммой или разностью, старое содержимое аккумулятора теряется.
Применение операций с переносом позволяет обрабатывать не только байтовые числа, но и многобайтовые.
При выполнении команд сложения все триггеры признаков устанавливаются всегда в соответствии с результатом.
При выполнении команд вычитания 3 флага из 5 устанавливаются всегда одинаковым образом, независимо от того сводится вычитание к сложению или нет. Это TS, TZ ,TP; флаги TC и Th ведут себя иначе. Изменение Th определяется при преобразовании вычитания в сложение (путем смены знака вычитаемого и преобразования значения в дополнительный код). Флаг TC=1 если код уменьшаемого меньше кода вычитаемого, т.е. имеет место заем.
Применение операций с переносом позволяет обрабатывать не только байтовые числа, но и многобайтовые.
Примеры:
015B) ADD M
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
015B | ||
H | 3E | 3E |
L | ||
3E23 | 6C | 6C |
A | A4 | |
FL | ||
PC | 015B | 015C |
1A20) ADC E
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1A20 | 8B | 8B |
A | 6A=16+54+0 | |
E | ||
FL | 02; (Tc)=0 | |
PC | 1A20 | 1A21 |
00B3) ADC C
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
00B3 | ||
C | DB | DB |
A | AF | 8B=DB+AF+1 |
FL | 13; Tc=1 | |
PC | 00B3 | 00B4 |
Рассмотренные команды являются однобайтовыми, выполняются за один цикл (4 такта); если операнд хранится в памяти (М), то операция выполняется за два цикла (7 тактов). При выполнении команд меняется содержимое всех триггеров регистра признаков.
1A30) SUB D
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1A30 | ||
D | ||
A | FC | B7 |
FL | ||
PC | 1A30 | 1A31 |
1A40) SBB B
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
1A40 | ||
B | 6A | 6A |
A | 5B | F0 = 5B-6A-1 |
FL | 03; Tc=1 | |
PC | 1A40 | 1A41 |
Рассмотрим несколько особенных примеров.
082А) SBB H
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
082A | 9C | 9C |
A | ||
H | FF | FF |
FL | 83, TC=1 | |
PC | 082A | 082B |
Особенностью данной команды является то, что триггеры признаков TC и TH устанавливаются так, как это происходит при выполнении этой команды в два этапа:
1) (A) - TC = 60 – 1= 5F
2) ((A) - TC ) – H = 5F – FF = 60;
и признаки переноса и полупереноса (TC и TH) устанавливаются в соотвествии со вторым этапом, т.е. TC = 1, TH = 1.
0903) АDD L
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
A | 7F | |
L | ||
FL | ||
PC |
0A09) SUB D
Адрес/регистр | Код до выполнения операции | Код после выполнения операции |
0A09 | ||
A | ||
D | 0A | 0A |
FL | ||
PC | 0A09 | 0A0A |
Особенностью двух последних команд является то, что их результаты имеют смысл только в тех случаях, когда обрабатываемые коды являются кодами чисел без знака.
Дата добавления: 2016-03-10; просмотров: 1266;