Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МП устройства СУ / Конспект лекций (дополнительный, обновленный).doc
Скачиваний:
127
Добавлен:
19.03.2015
Размер:
552.45 Кб
Скачать

13.9.2. Команды выполнения арифметических операций.

С помощью команд выполнения арифметических действий производится совместная обработка двух двоичных кодов по правилам двоичной арифметики, а также операции отрицательного или положительного приращения содержимого регистров или ячеек памяти. Команды этой группы обычно воздействуют на все флаги или большую их часть.

1. Команда АDD А,r способом регистровой адресации выполняет арифметическое сложение содержимого аккумулятора с содержимым одного из регистров общего назначения. Результат выполнения команды помещается в аккумулятор. Например, команда АDD A,A удваивает содержимое аккумулятора. Размещение одного из операндов и результата арифметических и логических команд в аккумуляторе характерно для многих восьмиразрядных микропроцессоров и микроконтроллеров. Связано это с дефицитом разрядов однобайтового формата кода операции этих команд для кодирования различных регистров-источников обоих операндов.

2. Команда ADС A,r является командой сложения содержимого аккумулятора с содержимым регистра общего назначения, учитывающей при этом флаг переноса СF. Если при ранее выполненной команде флаг переноса был установлен в единицу, то к полученному результату арифметически будет прибавлена единица. В противном случае, прибавление единицы не произойдет. Результат данной команды также размещается в аккумуляторе. С помощью данной команды можно поэтапно складывать двоичные коды с разрядностью, превышающей разрядность АЛУ микропроцессора, без потери переносов единиц из младших байтов в старшие.

3. Команда АDD А,M арифметически прибавляет к содержимому аккумулятора содержимое косвенно адресуемой ячейки памяти. Адрес ячейки памяти M указывается регистровой парой (в нашем случае BC) или специальным регистром-указателем адреса.

4. Команда ADС A,M аналогично предыдущей команде выполняет сложение аккумулятора с косвенно адресуемой ячейкой памяти M, но с учетом значения флага переноса CF.

5. Команда ADDI A,data является командой с непосредственной адресацией данных и осуществляет сложение содержимого аккумулятора с явно указанным в команде в виде константы значением операнда data. Результат команды будет также размещен в аккумуляторе.

6. Команда ADCI A,data выполняет арифметическое сложение аккумулятора с непосредственно указанным в команде значением операнда data, учитывая при этом значение ранее установленного флага переноса CF.

7. Команда SUB A,r является командой с регистровой адресацией данных и выполняет операцию арифметического вычитания из содержимого аккумулятора содержимого указанного в команде регистра общего назначения r. Результат команды как и в предыдущих случаях размещается в аккумуляторе. Например, команда SUB А,А вычтет из содержимого аккумулятора его же собственное содержимое, в результате чего аккумулятор обнулится. Такая команда часто используется для обнуления аккумулятора (или иного регистра общего назначения, если в команде можно указывать размещение обоих операндов в произвольных РОНах), поскольку имеет короткий формат и по времени выполнения более оптимальна, нежели запись в аккумулятор нуля непосредственно командой LDI A,0.

8. Команда SBC A,r выполняет операцию арифметического вычитания из содержимого аккумулятора содержимого регистра общего назначения с учетом флага переноса CF. Если раннее выполненная команда установила этот флаг в единичное значение, то из результата вычитания дополнительно еще арифметически отнимется единица. Эта команда позволяет реализовывать вычитание двоичных чисел с разрядностью, превышающей разрядность АЛУ микропроцессора.

9. Команда SUB A,M вычитает из аккумулятора содержимое косвенно адресуемой ячейки памяти M, адрес которой указывается указательной регистровой парой или специальным адресным регистром.

10. Команда SBC A,M выполняет аналогичное предыдущей команде действие, но учитывает при этом ранее установленное значение флага переноса CF.

11. Команда SUBI A,data является командой с непосредственной адресацией данных и выполняет операцию вычитания из содержимого аккумулятора значение явно заданной в качестве операнда константы data.

12. Команда SBCI A,data вычитает из содержимого аккумулятора значение операнда data и единичное значение флага переноса CF, если таковой был установлен ранее выполненной командой.

Команды ADС A,r , ADC A,M , ADCI A,data , SBC A,r , SBC A,M и SBCI A,data используются для выполнения арифметических операций суммирования и вычитания с повышенной точностью, т.е. при работе с двоичными кодами, разрядность которых больше разрядности микропроцессора (его АЛУ). Например, при сложении двух чисел с длиной в два слова (байта) сначала складываются их младшие слова (байты) с помощью команды ADD A,r или ADDI A,data. При этом может образоваться перенос единицы из самого старшего разряда младшего слова (байта) суммы, который зафиксируется во флаге переноса CF. Поэтому, чтобы результат сложения старших слов (байтов) слагаемых был корректным и учел перенос единицы из младшего слова (байта) в старшее, необходимо старшие слова (байты) складывать командой АDС A,r или ADCI A,data соответственно. Если перенос имел место, то единица, занесенная в разряд флага переноса СF регистра признаков командами сложения младших слов (байтов) будет участвовать в сложении старших слов (байтов). Если же переноса не было, то к старшему слову (байту) прибавится ноль, т.е. сумма старших слов не изменится. Аналогично организуется вычитание многоразрядных чисел. При этом для вычитания младших слов (байтов) необходимо на первом этапе использовать команды вычитания, не учитывающие флаг переноса CF, а затем при вычитании старших слов (байтов) необходимо использовать команды вычитания, учитывающие этот флаг.

13. Команда MUL A,B является командой арифметического умножения. При этом разрядность результата умножения всегда в два раза больше разрядности исходных операндов. Обычно в командах умножения и деления участвуют специально отведенные для них регистры. В нашем случае будем в качестве таких регистров рассматривать введенные нами гипотетические аккумулятор A и регистр общего назначения B. В этой интерпритации данная команда выполняет операцию арифметического умножения содержимого аккумулятора на содержимое регистра В. Младшее слово (байт) результата умножения будет размещаться в аккумуляторе, а старшее – в регистре B. Команда устанавливает флаг четности PF в зависимости от четности количества единиц в коде результата. Флаг переполнения OF устанавливается в единичное значение, если старшее слово (байт) результата не равно нулю, или в нулевое значение в противном случае.

14. Команда DIV A,B выполняет деление содержимого аккумулятора (делимое) на содержимое регистра B (делитель). При этом целая часть результата деления записывается в аккумулятор, а остаток – в регистр B. Команда устанавливает флаг четности PF в зависимости от четности количества единиц в коде результата. Флаг переполнения OF устанавливается в единичное значение, если делитель в регистре B был равен нулю, т.е. имело место деление на ноль, или в нулевое значение в противном случае.

15. Команда DA A является командой десятичной коррекции результата сложения, размещенного в аккумуляторе. Поскольку АЛУ складывает числа по правилам двоичной арифметики, то и двоично-десятичные числа будут складываться по таким же правилам. Для того, чтобы сложить двоично-десятичные коды и результат получить в виде двоично-десятичного числа, необходимо ввести соответствующие поправки. Такие поправки и вводятся командой DА А. Эта команда используется непосредственно после команды сложения. Для коррекции результата вычитания команда DА А не может быть использована. Коррекция производится путем последовательного анализа тетрад результата сложения, начиная с самой младшей тетрады. Если значение текущей тетрады результата сложения больше девяти или имел место перенос единицы в следующую старшую тетраду, то к текущей тетраде прибавляется шестерка. Делается это для того, чтобы исключить присутствующие в двоичной системе счисления, но отсутствующие в двоично-десятичной, кодовые комбинации тетрад со значениями A, B, C, D, E и F в количестве шести штук.

16. Команда INC r является командой положительного приращения регистра и изменяет содержимое регистра общего назначения r на +1. Обычно такая команда используется в циклических структурах для организации подсчета каких-либо событий путем инкремента счетчика на каждом шаге цикла, в качестве которого выступает регистр r.

17. Команда DEC r выполняет обратное действие по отношению к предыдущей команде, т.е. изменяет содержимое регистра r на -1. Такая команда может быть полезна для организации циклических структур с определенным количеством шагов. Для этого в регистр r, используемый в качестве счетчика цикла, предварительно заносится некоторое число, равное количеству шагов цикла. Затем в теле цикла вписывают команду DEC r. На каждом шаге цикла содержимое регистра r будет декрементироваться. Проверяя каждый раз в цикле содержимое регистра r на равенство его нулю, можно определить, когда необходимо выполнить выход из цикла.

18. Команда INC M выполняет положительное приращение на единицу содержимого косвенно адресуемой через регистр-указатель или регистровую пару ячейки памяти.

19. Команда DEC M выполняет отрицательное приращение на единицу содержимого косвенно адресуемой ячейки памяти.

20. Команда INRP rp увеличивает на единицу содержимое регистровой пары (или иного указательного адресного регистра). С помощью такой команды можно организовывать обращение к области последовательно расположенных ячеек памяти в сторону увеличения их адресов путем инкремента в цикле содержимого адресного регистра или регистровой пары, хранящей адрес ячейки памяти при косвенной адресации.

21. Команда DCRP rp выполняет обратное действие, т.е. уменьшает на единицу содержимое регистровой пары или адресного регистра-указателя. Соответственно с помощью такой команды можно в цикле косвенно адресоваться к соседним ячейкам пяти в сторону уменьшения их адресов. Часто команды инкремента и декремента регистровых пар на флаги не воздействют.