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