Простейшая микро-ЭВМ

ПРОГРАММИРОВАНИЕ ПМ-ЭВМ


Как уже отмечалось в гл. 3, ПМ-ЭВМ не имеет программного обеспечения, позволяющего пользоваться для решения задач языками высокого уровня. Поэтому запись программы для ПМ-ЭВМ осуществляется поль­зователем на машинном языке с применением команд описан­ных выше групп.

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

В ряде случаев способ решения той или иной задачи стано­вится более понятным, если он представлен в виде специальной схемы, называемой схемой алгоритма решения и имеющей вид ориентированной сети с вершинами различных типов, соответст­вующими используемым операциям.

В качестве примера рассмотрим решение задачи суммирова­ния первых 20 чисел натурального ряда, схема которой приве­дена на рис. 4.13,а.

Для реализации первых двух операторов (не считая Start) можно воспользоваться двухбайтовой командой MVI г, осущест­вляющей непосредственную загрузку в какой-либо регистр данных, содержащихся во втором байте команды (в данном случае - чисел OD). Для осуществления операции S = S + N можно воспользоваться командой ADD r, выполняющей сум­мирование содержимого какого-либо регистра с содержимым аккумулятора и запись результата в аккумулятор. Для выпол­нения операции N = N + 1 в машинном языке ПМ-ЭВМ преду­смотрена специальная команда INR г, осуществляющая увели­чение на единицу содержимого какого-либо регистра. Остается еще организовать в программе цикл с использованием услов­ного оператора. Для этой цели подошла бы команда JNZ, осу­ществляющая переход в программе при отсутствии нуля в ре­зультате какой-либо предшествующей переходу операции (в на­шем случае — операции вычитания: 21 — N).


Однако этого можно и не делать, построив несколько иначе схему решения задачи. Вместо того чтобы суммировать последо­вательно увеличивающиеся числа от О D до 20 D, можно суммиро­вать последовательно уменьшающиеся числа от 20 D до OD. Тогда содержимое регистра, хранящего число N, на некотором шаге выполнения программы обратится в нуль и этот результат можно будет использовать при организации условного перехода.

Итак, новая схема алгоритма может быть построена следую­щим образом.

Шаг 1. Заносим число О D в аккумулятор (А).

Шаг 2. Заносим число 20 D в какой-нибудь регистр, напри­мер в регистр D.

Шаг 3. Суммируем содержимое регистров А и D.

Шаг 4. Уменьшаем содержимое регистра Она единицу.

Шаг 5. Если содержимое регистра Вне равно нулю, осущест­вляем переход к шагу 3; в противном случае переходим к сле­дующему шагу.



Ш а г 6. Переписываем содержимое регистра А в какой-ни­будь из портов вывода, например в порт Р0оо-

Ш а г 7. Конец работы программы.

Соответствующая схема представлена йа рис. 4.13,6.

Приступим к программированию этой схемы. Для этой цели нам понадобятся все указанные выше команды, за исключе­нием команды INR г (увеличение содержимого регистра на единицу). Вместо нее следует взять команду DCR г (уменьше­ние содержимого регистра на единицу), которая будет исполь­зована применительно к регистру D. Кроме того, нам будут необходимы еще следующие две команды: OUT — двухбайто­вая команда вывода данных из аккумулятора в порт вывода, определяемый адресом, содержащимся во втором байте коман­ды, и однобайтовая команда HLT — останов программы. Коды всех используемых команд можно взять из таблицы, приведен­ной в приложении 1.

Для размещения всей программы нам понадобятся 12 ячеек памяти с номерами от 014QOOOQ до 014Q013Q. В первые две ячейки с номерами 014 000 и 014 001 поместим оба байта первой команды MVI A OOOQ загрузки аккумулятора (регистра А) числом OD. При этом в первую ячейку поместим восьмеричный код команды 076, а во вторую — содержимое второго байта этой команды — восьмеричный код числа OD (число 000).


В сле­дующие две ячейки с номерами 014 002 и 014 003 поместим два байта следующей команды, загружающей регистр D десятич­ным числом 20. Восьмеричный код этой операции 026 будет на­ходиться в первой ячейке, а восьмеричный код 024 десятичного числа 20 - во второй и т. д. В последнюю ячейку с номером 014 013 поместим восьмеричный код 166 команды HLT, осу­ществляющей останов программы. В табл. 4.5 приведен полный текст составленной программы вместе с комментарием. При организации цикла использована специальная метка Ml, указы­вающая на операцию, которую следует выполнить, если содер­жимое регистра D не равно нулю.



Рис. 4.13. Схемы алгоритмов для задачи сложения первых 20 чисел

Таблица 4.5

Адрес ячейки

Код операции или содержи­мого второго или третьего байта

Мет­ка

Мнемокод

Комментарий

014 000

076

 

MVI A OOOQ

Загрузка регистра А числом OD

014 001

000

 

 

Число OD

014 002

026

 

MVI D 024Q

Загрузка регистра D числом 20 D

014003

024

 

 

Число 20 D

014 004

202

Ml:

ADDD

Сложение содержи­мого регистров А и D

014005

025

 

DCRD

Уменьшение на едини­цу содержимого ре­гистра D

014 006

302

 

JNZM1

Переход к метке М 1 при отсутствии нуля

014 007

004

 

 

Метка М 1 (адрес)

014 010

014

 

 

Метка М 1 (адрес)

014 011

323

 

OUT OOOQ

Вывод данных из ре­гистра А в порт рооо

014 012

000

 

 

Номер порта

014013

166

 

HLT

Останов программы

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

Перейдем теперь к рассмотрению работы конкретных схем отдельных функциональных блоков ПМ-ЭВМ, назначение кото­рых было определено ранее.


Содержание раздела