
II. Выполнение отдельных команд на микроЭвм
Рассмотрим исполнение какой-либо конкретной команды из системы команд БИС КР580ВМ80А. Пусть, например, требуется выполнить команду так называемой непосредственной пересылки в память: переслать в ЯП, адрес которой записан во внутренних регистрах H и L, число, содержащееся во втором байте команды. Эта команда двухбайтная: первый байт – КОП, второй байт – операнд (пересылаемое число). Такой способ адресации, когда операнд является частью команды, называется непосредственным. Операнд адресован непосредственно, а адрес его размещения после пересылки указан в РОН HL. Такой тип адресации, когда адрес ЯП, где находится или должен будет находиться операнд, задан в паре регистров РОН (обычно это HL), называется косвенно-регистровым. Итак, в этой команде использованы два способа адресации: непосредственный для операнда и косвенно-регистровый для адреса конечного размещения операнда.
КОП этой команды: 36 (Н)1.
Если нужно переслать число, например, 50(Н), но полный код такой команды: 36 50 (Н). Команда выполняется за три цикла.
Задание 7. Выполнение команды по циклам
Пусть надо выполнить команду 36 50 по циклам, отразив состояние магистралей (МА, МД, МУ) в каждом цикле, и зафиксировать состояние внутренних регистров МП, РС, а также содержание выбранной для пересылки ЯП до исполнения и после исполнения команды (табл.1). Для этого:
Клавишей «R» произведите начальную установку микроЭВМ.
Выберите адрес ЯП, куда хотите переслать число 50 из области ОЗУ (0С00 – 0FB0), отведенной для размещения операндов. Например, выбрали адрес 0С10.
С помощью клавиши «ОТА» просмотрите содержимое ЯП 0С10, запишите его в таблицу 1, убедитесь, что числа 50 там нет.
Запишите («ОТА» и «ЗП/УВ») команду 36 50 в область ОЗУ 0800 – 0BAF, специально отведенную под запись программ пользователя. Например, первый байт (36) запишите в ЯП 0805, а второй в 0806.
Запишите с помощью клавиш «ОТ РГ» и «ЗП/УВ» адрес пересылки 0С10 во внутренние регистры МП: HL, причем старшие разряды ОС – в Н, младшие – в L.
Запишите в РС («ОТ РГ» и «ЗП/УВ») начальный адрес команды – 0805, причем старшие разряды в РС Н, младшие в РС L.
С помощью клавиш «ОТ РГ» и «ЗП/УВ» просмотрите содержимое аккумулятора (А), РОН и РС. Заполните первую строку таблицы 1.
Клавишей «РС» выставьте на дисплей адрес ЯП, где расположен первый байт команды (0805).
Начинайте выполнение команды по циклам с помощью клавиши «ШЦ». Одно нажатие – один цикл. При работе микроЭВМ в этом режиме информация на дисплей не выводится. После каждого нажатия клавиши «ШЦ» фиксируйте состояния МА, МД, МУ и заполняйте таблицу 1. По состоянию магистралей определите тип каждого машинного цикла и его содержание, заполнив два последних столбца таблицы 1.
После трех нажатий «ШЦ» (команда содержит три цикла) остановите выполнение команды клавишей «СТ».
Просмотрите содержимое внутренних регистров, РС и ячейки 0С10. Убедитесь, что команда выполнена, т.е. число 50 записано в эту ЯП. Заполните последнюю строку таблицу 1.
Задание 8. Анализ выполненной команды по алгоритму
Пользуясь результатами предыдущего задания, зафиксированными в таблице 1, сопоставим выполнение этой конкретной команды с общим алгоритмом работы микроЭВМ.
Вычисление адреса команды – в данном случае МП не производил этого вычисления. Номер ЯП, куда был помещен первый байт команды, мы установили в РС заранее.
Выборка КОП – осуществлена в цикле М1, в такте ТЗ которого КОП записан в РК, где и хранится в течение выполнения всей команды.
Дешифрация КОП – производится не только сразу после помещения КОПа в РК (на тактах Т4, Т5 цикла М1), но и на более поздних этапах выполнения команды: на последующих циклах М2, М3 и т.д. В данном случае в результате первичной дешифрации КОПа «36» МП «установил», что команда двухбайтная и адресация непосредственная. Образное слово «установил» (так же как и другие подобные термины «воспринял», «знает» и т.д.) по отношению к неодушевленному МП, разумеется, не означает какого-либо осмысленного действия, а содержит только то, что по определенному коду дешифратор УУ выдаст строго определенные управляющие сигналы, которые обеспечат предписанные КОПом действия. Такая реакция заложена в самой схеме дешифратора. В данном случае действия МП будут таковы: переход к выполнению цикла М2 – чтение из ЗУ второго байта команды, причем эта информация уже будет воспринята как операнд.
Вычисление адреса операнда. Т.к. адресация непосредственная, то вычисление адреса операнда сводится для МП к выработке управляющего сигнала на регистр инкремент/декремент адреса (управляемый адресный регистр), который увеличит текущий адрес на 1, т.е. обеспечивается переход к последующей ЯП.
Выборка операнда производится циклом М2, т.е. в Т1 УУ МП выставляет на ШД, а в Т2 записывает в регистр системного контроллера управляющее слово, соответствующее циклу ЧТ из ЗУ. На МА выставляется содержимое РС, т.е. адрес второго байта команды (0806). На МУ системным контроллером в такте Т2 выставляется сигнал ЧЗУ. Содержимое ЯП 0806 выставляется на МД и оттуда в такте Т3 считывается во внутренние регистры МП (а не в РК).
Исполнение операции, заданной КОП заключается в пересылке числа 50 из внутренних регистров по адресу, записанному в HL. Эти операции стали ясны МП в результате вторичной дешифрации КОПа и будут осуществляться циклом М3 – ЗП в ЗУ. Итак, опять в системный контроллер записывается управляющее слово, соответствующее циклу М3, которое и будет ответственно за сигналы, управляющие исполнением цикла М3. На МА из регистров HL выставляется адрес ЯП ОС10. На МД из внутренних регистров – операнд 50, а на МУ – сигнал ЗП ЗУ.
В результате всех этих действий требуемая команда выполнена.
Задание 9. С помощью команды непосредственной пересылки (КОП=36) перешлите число 33 в ЯП 0F00. Выполните команду по циклам. Заполните таблицу 1.
Задание 10. Выполните по циклам команду «Прямое запоминание аккумулятора (А)»: Содержимое А передается в ЯП, адрес которой находится во втором и третьем байтах команды. КОП = 32.
Такая адресация, когда адрес ЯП, где должен быть расположен операнд, задается как второй и третий байт команды, называется прямой. Так, например, если операнд должен находиться в ЯП 0D55, то полный код команды: 32 0D 55. Команда в этом случае трехбайтная и выполняется за 4 цикла.
Действуйте аналогично заданию 7, но учтите, что пересылаемое число (какое выберете) должно быть заранее записано в А. При записи в ОЗУ кода команды имейте в виду, что после КОП в следующую по номеру ЯП нужно записать младшие разряды выбранной ЯП (55), и только в следующую по старшинству ячейку – старшие (0D). Это связано с очередностью записи адреса в регистры W и Z. В виду того, что ША 16-разрядная, а ШД 8-разрядная, запись адресной части команды происходит за два цикла: вначале записываются младшие разряды в регистр Z, а затем старшие в регистр W.
В процессе исполнения команды заполняется таблица 1. Определите типы циклов, начальное и конечное состояние внутренних регистров МП и ЯП. Убедитесь, что после 4 циклов команда выполнена. Сопоставьте действия микроЭВМ с алгоритмом МП.
Задание 11. Выполните по циклам команду регистрового сложения: содержимое внутреннего регистра (в данном случае возьмем В) складывается с содержимым аккумулятора и результат помещается в аккумулятор (А).
Операнд (содержимое В) размещен во внутреннем регистре МП, а адрес внутреннего регистра является частью КОП и будет выяснен процессором при дешифрации КОП – такого рода адресация называется регистровой.
КОП = 80. Команда однобайтная и выполняется за один машинный цикл.
Действуйте аналогично заданию 7, но учтите, что выбранный вами операнд заранее должен быть записан в регистр В, а также какое-либо число должно быть записано в А.
Задание 12. Выполните по циклам команду ввода: данные из указанного в команде порта ввода-вывода записываются в аккумулятор.
Любое устройство ввода-вывода подключается к магистралям микроЭВМ через буферный регистр – порт. Каждый такой порт имеет свой адрес, который дешифруется в соответствующий сигнал обращения. В нашей микроЭВМ порт – регистр для устройства ввода-вывода имеет адрес 05. Таким образом, команды ввода-вывода в нашей машине двухбайтные. КОП команды ввода = DВ; полный код команды – DВ05. Команда выполняется за три цикла.
Действуйте, как в задании 7, но имейте в виду, что на устройство ввода нужно заранее подать какое-либо число – группой из 8 левых нижних переключателей, имитирующих устройство ввода.
Задание 13. Выполните по циклам команду вывода: содержимое А передается в указанный порт.
КОП=D3. Команда выполняется за 3 цикла.
Определите, какого типа адресация используется в командах ввода-вывода.
Задание 17. Выполните по циклам команду вызова подпрограммы. Команда эта трехбайтная и выполняется за 5 циклов. Первый байт, как всегда, КОП, равный для этой команды СД. Второй и третий байты должны составлять адрес (номер начальной ЯП) вызываемой подпрограммы. В результате выполнения команды вызова происходит а) передача управления начальному адресу вызываемой подпрограммы (второй и третий байты записываются в программный счетчик РС), б) адрес возврата из подпрограммы (номер следующей за командой вызова ЯП) записывается в стек, т.е. область ОЗУ, задаваемую указателем стека SP.
Обязательно отметьте в таблице начальное и конечное состояние РС и SP, а также ЯП NN SP-1 и SP-2 (а также №№ ЯП SP-H и SP-L). Обратите внимание на два последних цикла команды записи в стек (М7).
Например: нужно вызвать подпрограмму с начальным адресом 0DDD. Тогда команда вызова имеет вид: CD0DDD. Пусть она записана в следующих ЯП ОЗУ: CD - 0950; DD - 0951; 0D - 0952. Адрес возврата – 0953. В результате выполнения команды С0DDDD в РС окажется адрес вызова 0DDD, а в ячейках стека SP-1 (SP-H?) и SP-2 (SP-L?) – адрес возврата 0953. Указатель стека уменьшится на 2 (был 0bb0, должен стать – 0BAE). (См. в ЯП 0BAE – 53, 0BAF – 09).
Задание 18. Выполните по циклам команду возврата из подпрограммы. Команда однобайтная, выполняется за 3 цикла, КОП = С9. По этой команде управление передается адресу возврата, записанному в ЯП стека.
Если эта команда выполняется сразу за предыдущей командой вызова подпрограммы CD0DDD, то КОП команды возврата С9 следует записать в ЯП 0DDD, которой было передано управление предыдущей командой. Т.к. в предыдущей команде вызова адрес возврата 0953 был записан в ЯП SP-1 (SP-H?) и SP-2 (SP-L?), то команда возврата считает этот адрес возврата снова в РС. Одновременно к SP прибавится два раза по единице и восстановится первоначальное значение SP-0BB0.
Отметьте в таблице начальное и конечное состояние РС и SP. Обратите внимание на второй и третий циклы – чтение из стека (М6).
Приложение. Системы счисления
Десятичная |
Двоичная |
16-ричная |
|
0 0 0 0 |
0 0 0 0 |
|
0 0 0 1 |
0 0 0 1 |
|
0 0 1 0 |
0 0 1 0 |
|
0 0 1 1 |
0 0 1 1 |
|
0 1 0 0 |
0 1 0 0 |
|
0 1 0 1 |
0 1 0 1 |
|
0 1 1 0 |
0 1 1 0 |
|
0 1 1 1 |
0 1 1 1 |
|
1 0 0 0 |
1 0 0 0 |
|
1 0 0 1 |
1 0 0 1 |
|
1 0 1 0 |
A |
|
1 0 1 1 |
B |
|
1 1 0 0 |
C |
|
1 1 0 1 |
D |
|
1 1 1 0 |
E |
|
1 1 1 1 |
F |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
S |
Z |
O |
AC |
O |
P |
1 |
CY |
1 Н – указание на то, что число задается и индицируется на дисплее в 16-ричной системе счисления.