Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
PAGE \* MERGEFORMAT 2
[1] [2] Задание [3] Подпрограмма и стек [4] Выполнение арифметических операций [4.1] Сложение [4.2] Умножение [5] Способы адресации и система команд МП К1801. [5.1] Устройство МП К1801 [5.1.1] Автоинкрементная адресация (код 2) [5.1.2] Косвенная автоинкрементная адресация (код 3). [5.1.3] Автодекрементная адресация (код 4) [5.1.4] Косвенная автодекрементная адресация (код 5) [5.1.5] Индексная адресация (код 6) [5.1.6] Косвенная индексная адресация (код 7) [6] Рекомендации для выполнения задания по эмуляции команд МП 1801.
[7]
[8] |
Целью работы является получение практических навыков использования микроЭВМ МП БИС КР580ВМ80 (i8080) для выполнения арифметических операций и работой с подпрограммами, а также для изучения различных способов адресации.
Память микро-ЭВМ, построенной на основе МПК серии К580, может иметь не более 65536 однобайтных ячеек. Учитывая ограниченные возможности памяти при разработке программ, нужно стараться сделать их как можно короче. С этой целью часть программы, которая неоднократно повторяется, или программа, которая часто используется, могут быть оформлены в виде подпрограмм последовательностей команд, выполнение которых может быть вызвано из любого места программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом. Данные и адреса, требуемые для работы подпрограммы, называются входными параметрами. Результаты работы подпрограммы, передаваемые по окончании ее работы в основную программу, называются выходными параметрами.
Для вызова подпрограммы и возврата из них используются команды CALL <A2><A1> и RET.
Команда CALL <A2><A1> загружает в программный счетчик МП БИС содержимое байтов <A2><A1>, записанных в последующих двух адресах памяти после адреса, где записан код команды. Содержимое байта <A2> записывается в младший байт PCL программного счетчика, а третий байт <A1> команды в старший байт PCH программного счетчика, при этом МП БИС автоматически сохраняет в стеке адрес основной программы, к которому она будет обращаться после выполнения подпрограммы.
Стек специально организованная область ОЗУ, задействованная в микро-ЭВМ для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым.
Команда RET помещает в программный счетчик последнее записанное на данный момент в стеке число. После этого выполнение программы будет осуществляться с этого адреса. Любая подпрограмма должна кончаться командой RET.
Автоматическое сохранение и восстановление адреса основной программы при выполнении подпрограмм позволяет сделать подпрограммы вложенными, т.е. осуществить вызов одной подпрограммы из другой. Уровень вложенности для данной микро-ЭВМ определяется лишь размером стека.
Существуют также команды условного вызова подпрограмм и возврата из них. Они позволяют вызвать подпрограмму и возвратиться из нее по определенному состоянию заданных разрядов регистра признаков (аналогично командам условных переходов). Все команды условного вызова подпрограммы трехбайтные, во втором и третьем байтах сообщается начальный адрес подпрограммы. Команды вызова подпрограмм и возврата из них используют внутренний регистр МП БИС SP (Stack Pointer) для адресации к стеку.
Помимо команд вызова подпрограмм и возврата из них со стеком можно обмениваться с помощью команд PUSH <R> (записать в стек содержание обозначенного регистра МП БИС) и POP <R> (Записать данные из стека в обозначенный регистр МП БИС). Эти команды являются однобайтными. В качестве операнда R выступает регистровая пара микропроцессора, указанная названием первого регистра из этой пары.
При записи в стек содержимого пары регистров или программного счетчика по адресу SP-1 записывается содержимое старшего регистра из указанной пары или старший байт PCH программного счетчика, а по адресу SP-2 в стек записывается содержимое младшего регистра из указанной пары младшего байта PCL программного счетчика.
При записи из стека данных в пару регистров или программный счетчик в младший регистр пары или PCL записывается число из адреса, указанного в указателе стека SP, а в старший регистр пары или PCH число, записанное по адресу SP+1. В результате выполнения команды содержимое указателя стека SP увеличивается на два. Данные в памяти не изменяются, а лишь происходит их чтение и увеличение содержимого SP.
Таким образом, при записи данных адреса стека растут от больших к меньшим, а указатель стека SP всегда содержит последний адрес стека, в котором записано число. При разработке программ необходимо первоначально назначать область стека, записывая в SP с помощью команды LXI SP, <A2><A1> или команды SPHL.
Все операции со стеком должны быть сбалансированы, т.е. каждая подпрограмма должна содержать равное количество команд PUSH <R> и POP <R> и оканчиваться командой RET.
В противном случае выполнение команды RET в конце подпрограммы приведет к записи в программный счетчик случайного числа из стека. Адрес возврата в основную программу будет потерян и нарушится последовательность ее выполнения.
Как правило, в начале каждой подпрограммы сохраняют в стеке содержимое всех задействованных при ее выполнении регистров с помощью команд PUSH <R>. В конце подпрограммы восстановление содержимого регистров осуществляется с помощью команд POP <R> и в обратной последовательности по отношению к их записи в стек.
Обычно в виде подпрограмм записываются многократно используемые фрагменты программ, например подпрограмма выдачи звукового сигнала, подпрограмма обслуживания клавиатуры и дисплея и т.д.
Алгоритм работы простой подпрограммы временной задержки приведен на рис. 1. Общее время задержки вычисляется по формуле , где N1 число, первоначально записанное в счетчике. В качестве счетчика выбран регистр B, в который записывается число N1 из регистра C.
Команда NOP нужна для увеличения времени выполнения цикла, а, следовательно, и общей задержки. Вместо команды NOP может быть записана любая последовательность команд, выполнение которых не изменяет содержимого регистров микропроцессора. Время записи числа N1 в регистр B и возврата из подпрограммы t1+ t5 фиксировано и в цикл не входит. Минимальная задержка для приведенной подпрограммы определяется при N1 = 0,1 и равна . Максимальная задержка имеет место при N1 = 00 и вычисляется по формуле .
Микро-ЭВМ может проводить арифметические операции с числами с двойной или большей длиной машинного слова. Так как МП имеет 8-разрядное АЛУ, то операции с такими числами должны проводиться по байтам, начиная с младших байтов. Например, операция сложения чисел 17F5h + 3411h будет проводиться в следующем виде:
Старший байт |
Флаг СY |
Младший байт |
Числа |
00010111 + 00110100 +1 01001100 |
1 |
11110101 + 00010001 00000110 |
17F5 + 3411 4C06 |
Подпрограмма сложения массива однобайтных чисел с получением двухбайтного результата (задание 1) может быть реализована в соответствии с алгоритмом, представленном блок-схемой на рисунке 2-а.
Существует несколько алгоритмов умножения чисел. При первом алгоритме умножение можно заменить многократным сложением, например 14*3 = 14+14+14. Существенный недостаток этого способа значительная длительность процесса вычисления. При втором алгоритме умножение осуществляется в столбец. Этот алгоритм применим и для умножения двоичных чисел, например:
0110 = 610
0011 = 310
0110
0110
0000
0000
00010010 = 1810 .
При вычислении результата по второму алгоритму необходимо осуществить многократное суммирование со сдвигом влево множимого при одновременной проверке содержимого разрядов множителя, начиная со стороны его младшего разряда. При этом если в очередном разряде множителя записана 1, то множимое прибавляется к сумме и сдвигается влево на 1 разряд, а если в разряде записан 0, то произойдет только сдвиг множимого. Сдвиг множимого влево можно заменить сдвигом суммы вправо. По этому алгоритму (рис. 2., б) может работать подпрограмма умножения двух однобайтных чисел с получением двухбайтного результата (задание 2).
В состав МП К1801 входит АЛУ, регистры общего назначения РОН, регистр состояния процессора РСП и устройство управления магистралью УУМ.
Рис. 3. Структурная схема МП К1801
МП содержит восемь (R0 … R7) 16-разрядных РОН, которые могут использоваться как накапливающие, индексные с автоувеличением и автоуменьшением, указатели стеков для временного запоминания данных в оперативной памяти, а также для выборки операндов и записи результатов при выполнении арифметических и логических операций. Регистр R6(SP) используется как аппаратный указатель стека и содержит адрес последней заполненной ячейки стека. Система автоматически изменяет его содержимое при обработке внутренних и внешних прерываний и при работе с подпрограммами. Регистр R7 (PC) является счетчиком команд, который после выборки очередной команды всегда содержит адрес следующей выбираемой команды. Обычно он служит только для адресации команд, а не как накапливающий регистр.
Обмен информацией в упрощенном виде показан на рисунке выше. Поток данных с системной магистрали через УУМ поступает в АЛУ и через его выходные цепи к РОН. Затем информация опять поступает в АЛУ и через его выходные цепи к УУМ и системной магистрали.
Возможны следующие виды передачи данных : регистр регистр, регистр память, память регистр, память память. В МП имеется отдельный 8-разрядный регистр состояния процессора РСП (PSR). Разряд 7 служит для управления разрешением (равен 0) или запрещением (равен 1) прерываний от внешних устройств. Разряды 6 и 5 в МП К1801ВМ1 не используются, а в К1801ВМ3 разряды 7-5 задают приоритет МП по отношению к другим источникам прерывания.
Разряд 4(T) используется системным программным обеспечением при отладке программ (пошаговое исполнение программы). Разряды 3 … 0 (N, Z, V, C) содержат информацию о результатах выполнения предыдущих операций: N=1 отрицательный результат, Z=1 нулевой результат, V=1 переполнение при выполнении арифметических операций, C=1 перенос из 15-го разряда.
Таблица 1. Команды процессора К1801 с одним операндом
Номер |
Мнемоническое обозначение |
Операнд |
Описание |
1 |
CLRB |
dst |
Сброс операнда dst |
2 |
COMB |
dst |
dst = |
3 |
INCB |
dst |
dst = dst+1 |
4 |
DECB |
dst |
dst= dst-1 |
5 |
NEGB |
dst |
dst = -dst |
6 |
ASRB |
dst |
Арифметический сдвиг dst вправо |
7 |
ASLB |
dst |
Арифметический сдвиг dst влево |
8 |
RORB |
dst |
Циклический сдвиг dst вправо через разряд C |
9 |
ROLB |
dst |
Циклический сдвиг dst влево через разряд C |
10 |
ADCB |
dst |
dst+C dst |
11 |
SBCB |
dst |
dst-C dst |
12 |
CLR |
dst |
Сброс операнда dst |
13 |
COM |
dst |
dst = |
14 |
INC |
dst |
dst = dst+1 |
15 |
DEC |
dst |
dst= dst-1 |
16 |
NEG |
dst |
dst = -dst |
17 |
ASR |
dst |
Арифметический сдвиг dst вправо |
18 |
ASL |
dst |
Арифметический сдвиг dst влево |
19 |
ROR |
dst |
Циклический сдвиг dst вправо через разряд C |
20 |
ROL |
dst |
Циклический сдвиг dst влево через разряд C |
21 |
ADC |
dst |
dst+C dst |
22 |
SBC |
dst |
dst-C dst |
Команды с одним операндом называются одноадресными, а с двумя двухадресными. Структура одноадресной команды представлена на рис. 4-а, а двухадресной на 4-б. В настоящей работе, в задании 3, предлагается выполнить эмуляцию одноадресной команды.
Рис. 4. Структура команд МП К1801
Под поле «Способ адресации» отведено 3 бита, которые кодируют один из 8 возможных в данной архитектуре способов адресации (см. Рис. 5).
Способы адресации МП К1801
Регистровая адресация (код 0)
В качестве операнда используется содержимое адресуемого регистра. Это самый простой и наиболее быстрый способ адресации, не требующий обращения к памяти.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
MOV R1, R0 |
R1 R0 |
До исполнения
РС |
Память |
РОН |
|||
1000 |
010100 |
000020 |
R0 |
||
003000 |
R1 |
После исполнения
Память |
РОН |
||||
1000 |
010100 |
003000 |
R0 |
||
003000 |
R1 |
Примечание: при описании МП К1801 принята 8-ричная система счисления.
Иллюстративно, регистровая адресация представляется следующим образом:
Рис 6. Регистровая адресация
Регистровая косвенная адресация (код 1)
Содержимое адресуемого регистра используется как адрес операнда.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
CLR wR3 |
0 wR3 |
До исполнения
Память |
РОН |
|||
1000 |
005013 |
002000 |
||
2000 |
000700 |
После исполнения
Память |
РОН |
|||
1000 |
005013 |
002000 |
||
2000 |
000000 |
Схематически, этот тип адресации имеет вид, представленный на рис. 7.
Рис 7. Регистровая косвенная адресация
Содержимое адресуемого регистра является адресом операнда. После получения адреса содержимое регистра автоматически увеличивается на 1 при байтовых операциях и на 2 при операциях со словами. Содержимое регистров R6 (SP) и R7 (PC) всегда увеличивается на 2. Этот способ адресации удобен при обработке таблиц (последовательно расположенных в памяти данных).
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
CLR |
0 |
До исполнения
Память |
РОН |
||||
1000 |
005023 |
||||
001300 |
R3 |
||||
1300 |
007200 |
||||
1302 |
После исполнения
Память |
РОН |
||||
1000 |
005023 |
||||
001302 |
R3 |
||||
1300 |
000000 |
||||
1302 |
Схематически, этот тип адресации имеет вид, представленный на рис. 8.
Рис 8. Автоинкрементная адресация
Содержимое регистра задает указатель адреса операнда, затем содержимое регистра увеличивается на 2 (в том числе и для байтовых команд).
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
CLR w |
0 w |
До исполнения
Память |
РОН |
||||
1000 |
005032 |
001300 |
R2 |
||
1300 |
004000 |
||||
4000 |
005730 |
После исполнения
Память |
РОН |
||||
1000 |
005032 |
001302 |
R2 |
||
1300 |
004000 |
||||
1302 |
|||||
4000 |
000000 |
Этот способ удобен для таблиц, состоящих из адресов. Схематически, этот тип адресации имеет вид, представленный на рис. 9.
Рис 9. Косвенная автоинкрементная адресация
Содержимое регистра сначала уменьшается на 1 для байтовых операций и на 2 для операции со словами, затем используется как адрес операнда. Содержимое регистров R6 (SP) и R7 (PC) уменьшается всегда на 2.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
CLR |
0 |
До исполнения
Память |
РОН |
||||
1000 |
005043 |
||||
001300 |
R3 |
||||
1276 |
032650 |
||||
1300 |
После исполнения
Память |
РОН |
||||
1000 |
005043 |
||||
001276 |
R3 |
||||
1276 |
000000 |
||||
1300 |
Схематически, этот тип адресации имеет вид, представленный на рис. 10.
Рис 9. Автодекрементная адресация
Содержимое регистра уменьшается на 2 и после этого задает указатель адреса операнда.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
CLR w-(R4) |
0 w-(R4) |
До исполнения
Память |
РОН |
||||
1000 |
005054 |
||||
001400 |
R4 |
||||
1376 |
002600 |
||||
1400 |
|||||
2600 |
011100 |
После исполнения
Память |
РОН |
||||
1000 |
005054 |
||||
001376 |
R4 |
||||
1376 |
002600 |
||||
1400 |
|||||
2600 |
000000 |
Схематически, этот тип адресации имеет вид, представленный на рис. 11.
Рис 11. Косвенная автодекрементная адресация
Содержимое адресуемого регистра складывается с индексным словом, следующим за командой, и используется как адрес операнда. Содержимое индексного слова и адресуемого регистра (за исключением РС) после выполнения команды не изменяется.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
005065 |
CLR 300(R5) |
0 300(R5) |
1002 |
000300 |
0 (300+R5) |
До исполнения
Память |
РОН |
||||
1000 |
005065 |
||||
1002 |
000300 |
001400 |
R5 |
||
1700 |
012345 |
После исполнения
Память |
РОН |
||||
1000 |
005065 |
||||
1002 |
000300 |
001400 |
R5 |
||
1700 |
000000 |
Схематически, этот тип адресации имеет вид, представленный на рис. 12.
Рис 12. Индексная адресация
Содержимое индексного регистра складывается с индексным словом, следующим за командой, и сумма задает указатель адреса операнда.
Пример
РС |
Машинный код |
Мнемокод |
Описание |
1000 |
005072 |
CLR w400(R2) |
0 w400(R2) |
000400 |
0 w(400+R2) |
До исполнения
Память |
РОН |
||||
1000 |
005072 |
003000 |
R2 |
||
1002 |
000400 |
||||
3400 |
005200 |
||||
5200 |
123456 |
После исполнения
Память |
РОН |
||||
1000 |
005072 |
003000 |
R2 |
||
1002 |
000400 |
||||
3400 |
005200 |
||||
5200 |
000000 |
Схематически, этот тип адресации имеет вид, представленный на рис. 13.
Рис 13. Косвенная индексная адресация
Поскольку при выполнении команд процессор оперирует с регистрами R0 … R7, целесообразно выделить в памяти 8 ячеек размером в одно слово и обозначить их мнемоническими обозначениями R0 … R7:
R0: DW
R1: DW
R2: DW
R3: DW
R4: DW
R5: DW
R6: DW
R7: DW
Также необходимо выделить место в виде двухбайтовой ячейки для регистра команд. Обозначим ее как RK:
RK: DW
Теперь доступ к регистрам R0 … R7 может осуществляться по их мнемоническому обозначению. Но иногда имя регистра может быть неизвестно заранее, если, например, его номер вычисляется в программе. Чтобы получить доступ к содержимому регистра по его номеру необходимо ввести т.н. базовый адрес и вести отсчет от него, учитывая, что регистры расположены в памяти последовательно, начиная с R0 и далее по возрастанию номера. Обозначим базовый адрес мнемоникой BASE.
BASE: DW R0
Теперь адрес регистра Rn (где n номер регистра: 0,1,…7) может быть вычислен как BASE+2*n.
Далее рассмотрим содержимое регистра команд (рис. 4). Здесь reg двоичное представление номера регистра, с которым оперирует команда. Для извлечения номера регистра следует выполнить побитовую операцию логического умножения содержимого регистра команд с маской 0000000000000111. Полученное число и будет номером регистра. Для извлечения способа адресации следует таким же образом наложить маску на биты 3,4,5 и затем сдвинуть результат вправо на три разряда, например трехкратным выполнением команды RRC или RAR. Здесь следует помнить, что при выполнении команды RRC в старший разряд числа попадает значение флага переноса С, которое может быть ненулевым. Чтобы избежать ошибок, можно сначала произвести тройной сдвиг, а затем обнулить все разряды кроме обозначающих способ адресации (с помощью маски 0000000000000111).
Рис 14. Алгоритм работы программы, эмулирующей выполнение команды МП К1801
После выполнения описанных выше операций можно получить информацию о том, с каким регистром оперирует команда и какой способ адресации необходимо применить. Далее можно руководствоваться блок-схемой, представленной на рис. 14 (литерой A обозначено числовое значение способа адресации) для реализации программы, эмулирующей выполнение команды микропроцессора МП К1801.
1. Что такое подпрограмма, каковы её цели?
Ответ
2. Что такое стек?
Ответ
3. Изложите алгоритм работы подпрограммы многобайтного сложения для МП К580 (i8080).
Ответ
4. Изложите алгоритм работы подпрограммы умножения для МП К580 (i8080).
Ответ
5. Изложите основы архитектуры МП К1801.
Ответ
6. Какова структура машинного кода команды МП К1801?
Ответ
7. Изложите прямой и косвенный регистровый способ адресации для МП К1801.
Ответ
8. Изложите прямой и косвенный автоинкрементный способ адресации для МП К1801.
Ответ
9. Изложите прямой и косвенный автодекрементный способ адресации для МП К1801.
Ответ
10. Изложите прямой и косвенный индексный способ адресации для МП К1801?
Ответ
t5
t4
t3
t2
t1
временной задержки
Рис.1. Алгоритм простой подпрограммы
Да
Выход из подпрограммы
?
=0
на 1
B
регистра
Уменьшить содержимое
Нет операции - NOP
B
в регистр
C
из регистра
N1
Записать число
Способ
адресации
reg
Код операции
15
6
5
3
2
0
0
2
3
5
6
15
reg
адресации
Способ
reg
адресации
Способ
8
9
11
12
КОП
КОП
(а)
(б)
Признак прямой(0) или
косвенной (1) адресации
Адресации:
00
регистровая
01
автоинкрементная
10
автодекрементная
11
индексная
Команда
Рис5. Кодирование способов адресации МП К1801
Операнд
Операнд
для байтов
-1
для слов
-2
Адрес
Команда
reg
Команда
Адрес
-2
Адрес
Операнд
Операнд
+
Адрес
Команда
reg
Адрес
+
Адрес
Адрес
Команда
Операнд
reg
Индекс
Команда
Адрес
указателя
Адрес
reg
+2
Операнд