В.В. Демьянов Изучение системы команд микропроцессора серии К580 на учебно-отладочной микроЭВМ
.pdf20
3) разработанные программы 3, 4 и 5 и результаты их исследования.
6. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В чем отличие машинного цикла от машинного такта?
2.Сколько машинных циклов и тактов может длиться выполнение одно-, двух- и трехбайтной команды?
3.Какие типы машинных циклов вам известны?
4.Какие группы систем команд МП К580ВМ80 вы знаете?
5.Перечислите и запишите мнемонику команды пересылки и загрузки, команд обработки данных?
6.Какие команды обработки данных не меняют содержание регистра признаков, какие меняют только признаки Z и CY?
7.Какие способы адресации вам известны? В чем их сущность?
Лабораторная работа № 4
ОРГАНИЗАЦИЯ УСЛОВНЫХ ПЕРЕХОДОВ, ПОДПРОГРАММ И СТЕКА, МАСКИРОВАНИЕ ДАННЫХ
ЦЕЛЬ РАБОТЫ: исследование организации условных переходов, особенностей записи и обращения к подпрограммам, методов использования стека при создании программ, программных способов маскирования данных.
1. КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
Организация условных переходов в микроЭВМ осуществляется с помощью регистра признаков МП. В МП К580ВМ80 используется 5 признаков, каждый из которых устанавливается по определенному правилу в соответствии с выполнением МП последней команды.
Признаки часто используют для вызова подпрограмм и выхода из них.
Во многих случаях при выполнении программ необходимо проверять или изменять (маскировать) состояние одного или нескольких раз-
20
21
рядов числа в аккумуляторе. Это можно осуществить с помощью следующих операций:
1) логического умножения числа в аккумуляторе и маски, которое очищает разряд числа, если в соответствующем разряде маски будет записан 0, и не изменяет его, если в разряде маски записана 1;
2)логического сложения числа в аккумуляторе и маски, которое устанавливает разряд числа в 1, если в таком же разряде маски будет записана 1, и не изменяет его, если в этом разряде записан 0;
3)логического “исключающее ИЛИ” числа в аккумуляторе и маски, которое инвертирует содержание разряда числа, если в соответствующем разряде маски записана 1, и не изменяет его, если в этом разряде записан 0.
Проведение логических операций возможно также с содержимым аккумулятора и регистрами МП. При выполнении всех логических команд задействуются разряды Z, S, Р, АС регистра признаков (в разряд СY записывается 0). Это позволяет проверять состояние любого разряда числа и выполнять условные переходы в программах.
Условные переходы организуются в программах с помощью команд условных переходов. При выполнении этих команд МП проверяет состояние соответствующего разряда регистра признаков. Если при проверке условие не подтверждается, то управление передается следующей по порядку команде, иначе - по адресу, записанному двумя байтами после кода команды условного перехода.
Ниже приведена программа (программа 1) для определения 1 в пятом разряде числа аккумулятора и занесения числа FF в десять ячеек памяти или записи в них 1, если этот разряд числа аккумулятора равен
0.
Программа 1
Адрес |
|
Код |
Метка |
Мнемокод |
Комментарий |
|||
|
команды |
|
|
|
|
|
|
|
8200 |
06 |
0A |
|
MVI B, 0A |
Занести число 10 в ре- |
|||
|
|
|
|
|
гистр B |
|
|
|
8202 |
11 |
0084 |
|
LXI D 8400 |
Занести |
адрес |
первой |
|
|
|
|
|
|
ячейки памяти |
(8400) в |
||
|
|
|
|
|
пару DE |
|
|
|
8205 |
E6 10 |
|
ANI 10 |
Проверка |
на |
1 |
пятого |
|
|
|
|
|
|
разряда в аккумуляторе |
21
22
|
|
|
|
Продолжение программы 1 |
|
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
команды |
|
|
|
|
8207 |
CA OF 82 |
|
JZ M1 |
Если в пятом разряде 0, |
|
|
|
|
|
идти к M1 |
|
820A |
3E FF |
|
MVI A, FF |
Занести FF в аккумулятор |
|
820C |
C3 1182 |
|
JMP M2 |
Идти к M2 |
|
820F |
3E 01 |
M1 |
MVIA, 01 |
Занести 1 в аккумулятор |
|
8211 |
12 |
M2 |
STAX D |
Занести содержимое ак- |
|
|
|
|
|
кумулятора по адресу ре- |
|
|
|
|
|
гистров DE |
|
8212 |
13 |
|
INХ D |
Увеличить на 1 содержи- |
|
|
|
|
|
мое DE |
|
8213 |
05 |
|
DCR B |
Уменьшить на 1 содер- |
|
|
|
|
|
жимое B |
|
8214 |
C2 1182 |
|
JNZ M2 |
Если B≠ 0, идти к M2 |
|
8217 |
E7 |
|
RST4 |
Окончить |
выполнение |
|
|
|
|
программы |
|
В связи с тем, что память микроЭВМ ограничена, нужно делать программы как можно короче. С этой целью часть программы, которая часто используется, обычно оформляется в виде подпрограммы - последовательности команд, выполнение которых может быть выдано из программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом. Данные и адреса, требуемые для работы подпрограммы, называются входными параметрами. Результаты подпрограммы, передаваемые по окончании ее работы в основную программу, называются выходными параметрами.
Для вызова подпрограммы и возврата из них используют команды
CALL (A2) (A1) и RET. Команда CALL (А2)(А1) загружает в про-
граммный счетчик МП содержимое двух байтов, записанных в последующих адресах памяти после адреса, где записан код команды CALL. Содержимое байта (А2) записывается в младший байт программного счетчика РС, а третий байт (А1) команды - в старший байт РС. При этом МП автоматически сохраняет в стеке адрес основной программы, к которой произойдет обращение после выполнения подпрограммы.
22
23
Стек - специально организованная область ОЗУ, задействованная в микроЭВМ для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым.
Команда RET помещает в программный счетчик РС последнее записанное в данный момент в стеке число. После этого выполнение программы произойдет с этого адреса. Любая подпрограмма должна заканчиваться командой RET.
Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяют сделать подпрограммы вложенными, т.е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микроЭВМ определяется лишь размером стека.
Помимо команд CALL и RET можно обмениваться информацией со стеком с помощью команд PUSH(R) и POP(R). Эти команды являются однобайтными и в них содержится указание на пару регистров МП. Кроме регистров общего назначения в стек можно загрузить содержимое счетчика РС, а также аккумулятора и регистра признаков, к которым обращаются как к регистровой паре PSW.
По команде PUSH(R) содержимое регистровой пары заносится в стек, при этом по адресу SP-1 заносится содержимое старшего регистра, а по адресу SP-2 - содержимое младшего регистра. Содержимое указателя вершины стека SР уменьшается на 2.
По команде РОР(R) содержимое адреса SP заносится в младший регистр, а содержимое адреса SP+1 - в старший регистр пары. Содержимое указателя вершины стека SР увеличивается на 2.
Таким образом, при записи данных в стек он расширяется в сторону младших адресов, а указатель SP указывает на адрес, по которому занесен последний байт.
При разработке программ необходимо первоначально назначать область стека, записывая в SP адрес с помощью команды LXI SP (A2)(A1) или команды SPHL. Все операции со стеком должны быть сбалансированы, т.е. каждая программа должна содержать равное количество команд PUSH(R) и POP(R) и оканчиваться командой RET, в противном случае выполнение команды RET приведет к записи в программный счетчик случайного числа из стека, адрес возврата в основную программу будет потерян, нарушится порядок ее выполнения.
Обычно в начале каждой подпрограммы в стек заносят для сохранения содержание тех регистров, которые будут использованы в под-
23
24
программе. В конце подпрограммы восстанавливают содержание этих регистров в обратной последовательности по отношению к их записи в стек.
Алгоритм простой программы выдержки времени приведен на рис.3.
Общее время выдержки вычисляется по формуле. TD = T1+(T2+T3+T4) N1 + T5,
где N1 - число, первоначально записанное в счетчике.
В качестве счетчика выбран регистр В, в который записывается число N1 из регистра С. Команда NOP нужна для увеличения времени выполнения цикла, а следовательно, и общей задержки. Вместо NOP может быть записана любая последовательность команд, выполнение которых не изменяет содержимое регистров В и С микропроцессора.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рассмотрим пример использо- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
вания |
подпрограммы |
выдержки |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
времени для организации мигания |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
правого |
разряда дисплея |
учебной |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
микроЭВМ. |
Особенность |
схемы |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
микроЭВМ такова, что на дисплей |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
путем использования прямого дос- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
тупа к памяти выводится содержа- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ние ячеек с адресами 83F883FF, |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
причем |
правому |
разряду |
дисплея |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
соответствует |
ячейка |
83FF. |
При |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
записи в ячейку 83FF нуля все сег- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
менты индикатора будут погаше- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ны, а при записи числа FF - все |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
сегменты будут гореть. Ориенти- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ровочная |
длительность выдержки |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
времени |
должна |
составить |
0,5с |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(программа 2). Организуем 10 пе- |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
риодов |
мигания. |
Подпрограмма |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
выдержки |
времени |
имеет |
имя |
||||
Рис. 3. Алгоритм подпрограммы |
DLIT. Счетчики расположены в ре- |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
выдержки времени |
гистрах В и С. |
|
|
|
|
24
25
Программа 2
Адрес |
|
Код |
Метка |
Мнемокод |
Комментарий |
|||
|
команды |
|
|
|
|
|
|
|
8200 |
06 |
0A |
|
MVI B, 0A |
Занести |
количество |
перио- |
|
|
|
|
|
|
|
дов =10 |
|
|
8202 |
11 |
FF83 |
|
LXI 83FF |
|
Занести адрес ячейки инди- |
||
|
|
|
|
|
|
кации в регистры DE |
||
8205 |
3E00 |
M1 |
MVI A, 00 |
Занести 0 в аккумулятор |
||||
8207 |
12 |
|
|
STAX |
|
Занести 0 в ячейку индика- |
||
|
|
|
|
|
|
ции |
|
|
8208 |
CD 2082 |
|
CALL DLIT |
Вызвать |
подпрограмму за- |
|||
|
|
|
|
|
|
держки |
|
|
820B |
3E FF |
|
MVI A, FF |
Занести FF в аккумулятор |
||||
820D |
12 |
|
|
STAX D |
|
Занести FF в ячейку инди- |
||
|
|
|
|
|
|
кации |
|
|
820E |
CD 2082 |
|
CALL DLIT |
Вызвать |
подпрограмму за- |
|||
|
|
|
|
|
|
держки |
|
|
8211 |
05 |
|
|
DCR B |
|
B-1→ B |
|
|
8212 |
C2 0582 |
|
JNZ M1 |
|
Если B≠ 0, идти к M1 |
|
||
8215 |
E7 |
|
|
RST4 |
|
Окончание программы |
||
8220 |
C5 |
|
DLIT |
PUSH B |
|
Подпрограмма выдержки |
||
8221 |
D5 |
|
PUSH D |
|
Сохранение данных в реги- |
|||
|
|
|
|
|
|
страх B, C, D, E |
|
|
8222 |
01 |
F8C8 |
|
LXI |
B, |
Счетчик |
B=200, |
счетчик |
|
|
|
|
C8F8 |
|
С=248 |
|
|
8225 |
15 |
|
DLI |
DCR |
|
“пустой оператор” |
|
|
8226 |
05 |
|
|
DCR B |
|
B-1→ B |
|
|
8227 |
C2 2582 |
|
JNZ DLI |
|
Выдержка 10мкс |
|
||
822A |
06 C8 |
|
MVI B, 01 |
Загрузить счетчик B=200 |
||||
822C |
0D |
|
DCR C |
|
C-1→ C |
|
|
|
822D |
C2 2582 |
|
JNZ DLI |
|
Кратные выдержки |
|
||
8230 |
D1 |
|
POP D |
|
Восстановление содержимо- |
|||
|
|
|
|
|
|
го регистровых пар |
|
|
8231 |
C1 |
|
|
POP B |
|
|
|
|
8232 |
C9 |
|
|
RET |
|
Возврат из подпрограммы |
25
26
2. ЗАДАНИЕ ДЛЯ ДОМАШНЕЙ ПОДГОТОВКИ
1. Изучите группу логических команд и команд условной передачи управления.
2.Ознакомьтесь с разрядами регистра признаков МП серии К580 и правилами записи в них единицы.
3.Ознакомьтесь с программой 1.
4.Разработайте программу занесения числа 12 по адресу 8400, если содержимое аккумулятора больше 3, но меньше 10, иначе в ячейку памяти занести нуль.
5.Видоизмените программу 1 так, чтобы микроЭВМ реагировала на нуль в пятом разряде при записанных 1 во всех остальных разрядах.
6.Вычислите временную задержку, реализованную подпрограммой DLIТ в программе 2.
7.Видоизмените программу 2 так, чтобы обеспечить выдержку времени 0,2с, если машинный такт равен 0,5 мкс.
3.ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
3.1. Исследовать программу 1
Ввести в микроЭВМ программу 1, занести в аккумулятор число и запустить программу. Представить число в двоичном коде и проанализировать его на 1 в пятом разряде. Проанализировать содержание десяти ячеек, начиная с адреса 8400. Проанализировать содержание регистра признаков при пошаговом выполнении программы.
3.2. Исследовать программу 2
Ввести в микроЭВМ программу 2, изменить начальное значение счетчиков (регистров В и С) в командах LXI B (адрес 8222) и MOV B (адрес 822А) на 02 и исследовать выполнение программы, просматривая содержание регистра В, признака Z, указателя стека и вершины стека в пошаговом режиме. Запустить программу на выполнение в режиме прогона, предварительно установив указанные в программе 2 начальные значения счетчиков, замерить время выдержки. Установить такие значения счетчиков, чтобы выдержка времени была равной 0,2 ±
26
27
0,02с. Заменить команду POP на любую однобайтовую команду в программе 2 и проанализировать результаты выполнения программы.
4. РАБОТА НА УЧЕБНОЙ МИКРОЭВМ
Доступ к регистровым парам осуществляется по команде ADDR, X; где X - имя регистровой пары (В, D, H, S - указатель стека, P - вершина стека).
5. СОДЕРЖАНИЕ ОТЧЕТА
Отчет должен содержать:
1) перечень команд передачи управления по условию;
2)полный перечень команд вызова и возврата из подпрограммы;
3)видоизмененные программы 1 и 2 в соответствии с заданием для домашней подготовки;
4)выражение для расчета времени выдержки для программы 2;
5)перечень команд работы со стеком.
6. КОНТРОЛЬНЫЕ ВОПРОСЫ
1. При выполнении каких команд в программе 1 задействуются разряды регистра признаков МП?
2.По каким условиям записывается 1 в каждый из разрядов регистра признаков?
3.Какой разряд регистра признаков соответствует каждому из признаков?
4.Перечислите логические операции, выполняемые МП серии
К580.
5.Сколько машинных тактов нужно для выполнения команд CALL
иRET?
6.В какой последовательности происходит запись и считывание из стека по командам PUSH и POP?
7.С помощью каких команд можно обозначить область памяти, отведенную под стек?
8.С помощью каких команд сохраняется и извлекается содержимое регистровых пар МП при выполнении подпрограммы?
9.Укажите порядок выполнения команды RET.
27
28
10. Укажите область адресов, занимаемую стеком в программе 2. Какие значения принимает при этом указатель стека?
Лабораторная работа №5
ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ
ЦЕЛЬ РАБОТЫ: изучение способов организации и исследование программ выполнения арифметических операций.
1. КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ
В микроЭВМ, построенных на базе МП серии К580, наибольшее распространение получил способ определения чисел с фиксированной запятой, т.к. в этом МП отсутствуют специальные команды для работы с числами с плавающей запятой. Двоичное же восьмиразрядное число можно представить как двоичное число со знаком, имеющее значение от -128 до +127. При этом отрицательные числа представлены в дополнительном коде, а старший разряд числа используется как знаковый.
Число с фиксированной запятой можно представить двоичным числом без знака, имеющим значения от 0 до 255.
Для МП серии К580 можно представить числа без знака и в виде двоично - десятичного числа, при котором каждый байт рассматривается как два полубайта - две тетрады, каждая из которых кодирует десятичную цифру. Такое представление позволяет занести в один байт числа от 0 до 99.
Проведение арифметических операций сложения, вычитания, умножения и деления рассмотрены на примерах соответствующих программ.
Программа сложения массивов однобайтных чисел с получением двухбайтного результата MAIN - программа 1. Слагаемые должны быть расположены в последовательных адресах памяти. Входными параметрами подпрограммы ADDB являются адрес первого слагаемого, записанный в регистровой паре НL, и число слагаемых, записанное в регистре В. Выходным параметром программы MAIN является сумма, старший байт которой записан в регистре С, а младший - в аккумуляторе А. Особенность алгоритма сложения в данной программе состоит в том, что после прибавления каждого элемента массива определяется
28
29
переполнение аккумулятора (признак СY=1), и если это имеет место, то содержимое регистра С увеличивается на 1.
МикроЭВМ может проводить арифметические операции с числами с двойной или большей длиной машинного слова. Так как МП серии К580 имеет восьмиразрядное арифметическо-логическое устройство (АЛУ), то операции с числами должны производиться по байтам, начиная с младших. При этом целесообразно использовать команды ADC для сложения и SBB для вычитания, которые учитывают значение признака переноса (займа) СY.
Программа нахождения разности двух чисел, имеющих одинаковую длину, - программа 2. Входные параметры: регистр С - длина чисел (в байтах), регистровые пары Н - адрес младшего байта вычитаемого, D - адрес младшего байта уменьшаемого. Результат заносится в область памяти, отведенную под вычитаемое. В том случае, если уменьшаемое меньше вычитаемого, по адресу 8000 заносится 1.
Программа 1
Адрес |
Код |
Метка |
Мнемокод |
Комментарий |
|
|
команды |
|
|
|
|
8200 |
21 0084 |
MAIN |
LXI H, 8400 |
Записать в |
регистры HL |
|
|
|
|
адрес первого слагаемого |
|
8203 |
06 05 |
|
MVI B, 05 |
Загрузить в B количество |
|
|
|
|
|
слагаемых |
|
8205 |
CD 0982 |
|
CALL |
Вызов программы сложе- |
|
|
|
|
ADDB |
ния |
|
8208 |
E7 |
|
RST4 |
Прервать |
выполнение |
|
|
|
|
программы |
|
8209 |
AF |
ADD |
XRA A |
Очистить аккумулятор |
|
|
|
B |
|
|
|
820A |
4F |
|
MOV C,A |
Очистить |
счетчик пере- |
|
|
|
|
носов |
|
820B |
86 |
CNT |
ADD M |
Прибавить к содержимо- |
|
|
|
|
|
му аккумулятора число из |
|
|
|
|
|
массива слагаемых |
|
820C |
D2 1082 |
|
JNC TRM |
Если признак C=0, идти к |
|
|
|
|
|
TRM |
|
29