- •4. Программирование микропроцессоров
- •4.1. Запись программ
- •4.2. Методы адресации
- •4.3. Состав команд арифметических действий
- •4.4. Состав команд логических операций
- •4.5. Команды перемещения данных
- •4.6. Команды операций перехода и передачи управления
- •4.7. Команды операций вызова подпрограмм и возврата в основную программу
- •4.8. Команда загрузки в стек и возврата в основную программу
- •4.9. Команды управления
- •Вопросы для самоконтроля
4.3. Состав команд арифметических действий
Команды арифметических действий: сложить, вычесть, сравнить, инкрементировать и декрементировать приведены в табл. 4.1. Из таблицы следует, что существует четыре типа команды сложения, в которых одно из слагаемых находится в аккумуляторе (регистре А), а второе слагаемое может быть в регистре L или Н, или в данных, извлеченных из программной памяти, это команды АDD, АDI, АDС, ACI.
Рассмотрим команду АDD R - сложить содержимое аккумулятора А и одного из регистров РОН (В, С, Д, Е, Н, L). Символика этих команд (А)+(К)→А. Команды с регистровой адресацией, однобайтовые, формат их КОП от 80 до 85. Команда АDD R выполняется по схеме, приведенной на рис. 4.3, а. Содержимое аккумулятора (0000 1000) складывается с содержимым одного из регистров РОН, например (0000 0010), получающаяся в результате сложения сумма (0000 1010) помещается в аккумулятор. Следующая команда АDD М - однобайтовая команда с косвенно регистровой адресацией, ее символика (А) + (М) → А. Адрес второго операнда здесь задан косвенно, т. е. пара регистров НL указывает 16-разрядный адрес программной памяти, т. е. LОС (от Location - место расположения), (см. рис. 4.3, б). Содержимое LОС (0000 0011) суммируется с содержимым А (0110 0100), а сумма (0110 0111) помещена в аккумулятор. Команды косвенного сложения используют в качестве указателя адреса 16-разрядный регистр (обычно пару HL), поэтому часто символика команды записывается так (A) + ((Н)( L))→ А, где двойная скобка (( )) указывает команду косвенной адресации.
Рассмотрим двухбайтовую команду ADI b1 - сложить с непосредственным операндом (см. рис. 4.3, в). Ее формат КOП(С6) содержится в первом байте команды, непосредственно за ним, во втором байте (b2) находятся данные для сложения с содержимым A . Команда АDI выполняется по схеме, приведенной на рис. 4.3, в, где содержимое А (0000 1111) суммируется со вторым байтом (b2) (0001 0000), а сумма (0001 1111) помещается в аккумулятор.
При сложении двухбайтных и больших чисел возможен перенос старшего бита результата, что будет фиксироваться битом СY регистра состояния F0, т. е. СY=1. Эта единица должна суммироваться с младшими битами следующего байта. При этом берутся команды сложения АDC R, АDС М и ADI b2.
Рис. 4.3. Арифметические действия
Команд вычитания у МП КР580ВМ80 (см. табл. 4.1) четыре типа -SUВ, SUI, SВВ и SBI. B силу особенностей АЛУ МП не обладает возможностями прямого вычитания, оно осуществляется сложением с представлением вычитаемого в дополнительном коде.
При сложении двоично-десятичных чисел программа соcтавляется аналогично программе сложения многобайтных двоичных чисел, разница лишь в том, что после команды АDС М должна следовать команда десятичной коррекции DАА. При выполнении команды DАА к содержащемуся в аккумуляторе десятичному числу 1010 (10102) добавляется цифра 610 (1102), тем самым лишние места комбинаций автоматически исключаются.
MП КР580 имеет два типа команд сравнения двух операндов CPI b2 и CMP R. Команда CPI b2 имеет непосредственную адресацию, является двухбайтовой и сравнивает второй байт b2 команды с содержимым аккумулятора. Команд CMP R восемь, они позволяют сравнивать содержимое аккумулятора А с содержимым регистров В, С, Д, Е, Н, L, М и А. Адресация команд CMP B, С, Д, Е, Н, L, А регистровая , а команды СМР M - косвенно-регистровая. Их символика (А) - b2 и (А) - (R).
Результаты операций сравнений СMР и CPI определяются по значениям признаков Z и СY, как показано в табл. 4.3.
Операция сравнения Таблица 4.3
Z |
CY |
Результат |
0 |
0 |
(А) > ( R ) или b2 |
0 |
1 |
(А) < ( R ) или b2 |
1 |
0 |
(А) = ( R ) или b2 |
Все рассмотренные команды арифметических операций имели один операнд в аккумуляторе. Рассмотрим команды арифметических операций с операндами, расположенными в РOH.
Суммирование 16-разрядных чисел обеспечивают четыре команды DАD. Один из операндов располагается в регистровой паре Н, куда после сложения записывается сумма. Второй операнд находится в регистровой паре ВС при команде DАD В, или DЕ при команде DАD D , или в HL при команде DАD Н, или в SР при команде DАD SP. Символика команд (НL) + (RР)-> HL.
К арифметическим командам относят семь команд INR P, предусматри- вающих прибавление единицы к содержимому регистров В, С, D, Е, Н, L, А; одну команду INR M (прибавления единицы в байт памяти) и четырех команд INX RP, предусматривающих прибавление единицы к регистровым парам В, С (IN ХB), D, E (IN XD), Н, L (IN XН) и к указателю стека SР (IN XS Р). B MП имеется аналогичный инкременту набор 12 команд декремента, семь из которых DСR R предусматривают вычитание единицы из регистров В, С, Д, Е, Н, L и А (например DСR В), одной команды DСR М (вычитание единицы из байта памяти) и 4-х команд DСХ КP (вычитание единицы из содержимого регистровой пары В, С (DСХ В), D, Е (DСХ D), H, L (DСХ Н) и из содержимого указателя стека SР (DCХ SР).
При выполнении арифметических операций применятся команда сдвигов в аккумулятор на 1 разряд. Команды RRC и RLС обеспечивают циклический сдвиг байта в аккумуляторе влево и вправо с дублированием вытесняемого разряда в бите СY регистpa F, а команды RАL и RAR циклический сдвиг влево и вправо 9-разрядного слова, где девятым разрядом является бит СY регистра F.
При сложении двоично-десятичных чисел программа соcтавляется аналогично программе сложения многобайтных двоичных чисел, разница лишь в том, что после команды АDС М должна следовать команда десятичной коррекции DАА. При выполнении команды DАА к содержащемуся в аккумуляторе десятичному числу 1010 (10102) добавляется цифра 610 (1102), тем самым лишние места комбинаций автоматически исключаются.
