Файл: Конспект лекций (дополнительный, обновленный).doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.12.2024

Просмотров: 1981

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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 выполняет обратное действие, т.е. уменьшает на единицу содержимое регистровой пары или адресного регистра-указателя. Соответственно с помощью такой команды можно в цикле косвенно адресоваться к соседним ячейкам пяти в сторону уменьшения их адресов. Часто команды инкремента и декремента регистровых пар на флаги не воздействют.


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

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

1. Команда АND А,r выполняет операцию поразрядного логического умножения (операцию И, конъюнкцию) содержимого аккумулятора и регистра общего назначения r. Данная команда воздействует на все флаги, а флаги переноса CF и вспомогательного переноса AF в частности сбрасываются обычно в ноль. Поэтому команда AND А,A , например, может быть примена для воздействия на флаги без изменения содержимого аккумулятора, т.к. согласно тождествам алгебры-логики , либо для обнуления флаговCF и AF. Такая потребность может возникнуть, если нужно определить признаки содержимого аккумулятора после команд, на флаги не воздействовавших, например, после выполнения команд ввода-вывода.

2. Команда АND А,M выполняет операцию логической конъюнкции над содержимым аккумулятора и косвенно адресуемой через регистровую пару или регистр-указатель адреса ячейки памяти M. Воздействие команды на флаги аналогично воздействию предыдущей команды.

3. Команда ANDI A,data также выполняет операцию поразрядного логического умножения, но над содержимым аккумулятора и операндом data, заданным в команде. Эта команда имеет непосредственную адресацию. Воздействие команды на флаги аналогично воздействию предыдущей команды. Если необходимо, например, выделить третий разряд в байте, находящемся в аккумуляторе, а остальные его разряды обнулить, то производят операцию поразрядного логического умножения содержимого аккумулятора с маской, в третьем разряде которой должна быть записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: ANDI A,00000100B. Символ «B» в конце операнда-маски указывает на двоичную форму его записи.


4. Команда ОR А,r выполняет операцию поразрядного логического сложения (операцию ИЛИ, дизъюнкцию) содержимого аккумулятора и регистра общего назначения r. Данная команда также воздействует на все флаги, а флаги CF и AF сбрасывает в ноль. Как и в случае с командой AND A,A , команда ОR А,A может быть использована для воздействия на флаги или обнуления флагов CF или AF без изменения содержимого аккумулятора, поскольку .

5. Команда ОR А,M выполняет операцию поразрядной логической дизъюнкции над содержимым аккумулятора и косвенно адресуемой ячейки памяти M. Воздействие команды на флаги аналогично воздействию предыдущей команды.

6. Команда ORI A,data является командой непосредственной адресации и выполняет операцию поразрядной логической дизъюнкции над содержимым аккумулятора и операндом data записанным в команде в виде константы. Воздействие команды на флаги аналогично воздействию предыдущей команды. Если необходимо, например, записать в пятый разряд байта, находящегося в аккумуляторе, единицу, не изменяя при этом значения остальных его разрядов, то нужно произвести операцию поразрядного логического сложения содержимого аккумулятора с маской, в пятом разряде которой будет присутствовать 1, а в остальных - 0. Команда будет выглядеть следующим образом: ORI A,00010000B.

7. Команда XOR A,r выполняет операцию поразрядного логического сложения по модулю 2 (операцию ИСКЛЮЧАЮЩЕЕ ИЛИ) над содержимым аккумулятора и регистра общего назначения r. Воздействие команды на флаги аналогично воздействиям рассмотренных ранее логических команд. Команда XOR A,А , в частности, используется для обнуления аккумулятора и флагов CF и AF, поскольку известно, что .

8. Команда XOR A,M выполняет операцию поразрядного логического сложения по модулю 2 над содержимым аккумулятора и косвенно адресуемой ячейки памяти M. Воздействие команды на флаги аналогично воздействиям в вышеописанных командах.

9. Команда XORI A,data производит операцию поразрядного логического сложения по модулю 2 над содержимым аккумулятора и явно записанным в команде в виде константы операндом data. Воздействие команды на флаги аналогично воздействию в вышеописанных командах. Для того, чтобы изменить на противоположное значение, например, седьмого разряда байта, находящегося в аккумуляторе, при этом не изменяя значения остальных его разрядов, необходимо выполнить операцию поразрядного логического сложения по модулю 2 с маской, в седьмом разряде которой должна быть записана 1, а в остальных - 0. Команда будет выглядеть следующим образом: XORI A,01000000B.