Программное Обеспечение Микро-Эвм
Программное
обеспечение Микро-ЭВМ.
В последней статье этого цикла ми вновь вернемся к вопросам программирования микро-ЭВМ. Из описания работы микро-ЭВМ следует, что практически все функции, которые она выполняет, полностью определяются программами, записанными в ее память. При этом могут быть использованы как готовые программы, разработанные кем-то ранее, так и программы, разработанные самостоятельно.
Набор различных программ, предназначенный для микро-ЭВМ (впрочем. как и для всех других) определенного типа, принято называть программным обеспечением. Программы, разработанные и используемые для специальных целей, например программы, реализующие функции каких-либо устройств, называют целевыми или прикладными программами. Разработка таких программ требует наличия в микро-ЭВМ специальных вспомогательных программ - системного программного обеспечения. Системное программное обеспечение необходимо также и в микро-ЭВМ универсального назначения, т. с. таких, которые предназначены дня выполнения самого разнообразного класса программ (программ для вычислений, обработки и редактирования текстов, игровых программ и т. д,), вводимых в ее память с внешнего накопителя. в нашем случае с магнитной лепты.
Простейшие функции
системного программного обеспечения
присущи управляющей программе
МОНИТОР, предназначенной для
МОНИТОР нашей микро-ЭВМ занимает в ПЗУ объем 2 Кбайт (с адреса F800H по FFFFH). Для работы МОНИТОРА необходимо также небольшое количество ячеек ОЗУ: для стека и хранения промежуточных результатов и данных. Адреса этой области памяти (рабочей области МОНИТОРа) - с F000Н по F7FFH. В табл.1 приведены коды МОНИТОРа, а здесь текст на ассемблере. Исходный текст на ассемблере и в формате Intel Hex, для моей модификации компьютера.
При запуске МОНИТОРа с начального адреса F800H происходит настройка указателя стека, занесение начальных значений в рабочую область ОЗУ и настройка ППА, обслуживающего клавиатуру. После этого МОНИТОР производит "очистку" содержимого ОЗУ страницы и ОЗУ курсора дисплейного модуля, так как там при включении питания устанавливается произвольная информация. Далее на экран выводится следующее сообщение: *МИКРО/80* MONITOR.
Появление на экране угловой скобки говорит оператору о том, что он может набрать на клавиатуре какую-либо директиву (команду) из перечисленных в табл.2.
Все директивы МОНИТОРа задают одной заглавной латинской буквой, но могут содержать дополнительно до трех параметров. Параметры записывают в виде шестнадцатиричных чисел или названия внутреннего регистра микропроцессора. Их набирают непосредственно после директивы и отделяют друг от друга запятыми. Символ "Н" после шестнадцатиричных чисел опускают, можно также опускать и незначащие нули, в левых разрядах чисел. При наборе директив с параметрами нельзя вставлять символ "пробел" ни между директивой и параметрами, ни между отдельными параметрами. Символом окончания ввода директивы или директивы с параметрами является символ "ВК".
Таблица2.
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* - сообщения монитора в ответ на директиву Р. В директиве Р параметры ADR1, ADR2, D8 соответственно определяет первый адрес останова, второй адрес останова, и числа проходов через второй адрес останова.
R – обозначение одного из внутренних регистров микропроцессора : A,B,C,D,E,F,H,L,S.
ОБОЗНАЧЕНИЯ
D16 - четырехразрядное
шестнадцатиричное число
D8 - двухразрядное шестнадцатиричное
число
ADR1 - четырехразрядный шестнадцатиричный
адрес начала области памяти
ADR2 - четырехразрядный шестнадцатиричный
адрес конца области памяти
ADR1’ - четырехразрядный шестнадцатиричный
адрес начала второй области памяти
ADR - четырехразрядный шестнадцатиричный
адрес ячейки памяти.
Если директива введена верно, т. е. соблюдены все оговоренные выше условия. задано нужное количество параметров, и сами они заданы правильно. то МОНИТОР выполняет ее, если нет - на экране дисплея высвечивается знак "?" и вновь угловая скобка, "приглашающая" оператора повторить набор директивы. При наборе директивы оператор имеет возможность исправить один или несколько неверно набранных символов: для этого нужно сдвинуть курсор назад по строке (клавиша "¬") и повторить набор символов.
Теперь рассмотрим подробно назначение директив МОНИТОРа.
Директивы работы с памятью.
Директива "D" позволяет просмотреть на экране дисплея содержимое области памяти, выдаваемое в виде двухразрядных шестнадцатиричных чисел. представленных в форме таблицы (такой, например, как табл.1). После заполнения последней строки вся предыдущая информация с экрана стирается, и дальнейший ее вывод продолжается вновь с первой строки. Приостановить вывод информации на экран можно в любой момент, нажав произвольную клавишу на клавиатуре дисплея. После того, как клавиша будет отпущена, вывод информации продолжится. Старшие и младшие адреса области памяти задают двумя параметрами ADR1 и ADR2 соответственно,
По директиве "L" на экран дисплея выводится таблица, похожая на ту, что формируется по директиве "D". Отличие состоит в том, что вместо шестнадцатиричных чисел на экран выводятся алфавитно-цифровые символы, коды которых соответствуют содержимому ячеек памяти. Если в ячейке хранится код, не соответствующий ни одному из символов (таблица кодов символов приведена в статье "Радио" № 8, 1983 г.), то в данной позиции таблицы будет отображаться символ (.) - "точка".
Директива "М" позволяет просматривать и при необходимости изменять содержимое одной или нескольких ячеек памяти. После набора директивы и нажатия на клавишу "ВК" на экран дисплея будет выведено двухразрядное , шестнадцатиричное число - содержимое ячейки памяти по адресу ADR, а курсор устанавливается справа от него. Оператор может набрать новое значение, которое после нажатия на клавишу "пробел" будет занесено в ячейку, а на экран дисплея будут выведены адрес следующей ячейки памяти и ее содержимое. Оператор может изменить содержимое и этой ячейки или же оставить его без изменения и перейти к очередной ячейке, еще раз нажав на клавишу "пробел". Если оператору больше не нужны "услуги" этой директивы, он должен нажать на клавишу "ВК", после чего на экране появится сообщение МОНИТОРа о готовности к приему новых директив.
Директива "F" позволяет во все ячейки заданной области памяти записать одинаковые коды, значение которых равно D8.
С помощью директивы "Т" можно переслать (скопировать) содержимое из одной области памяти в другую, начальный адрес которой задают параметром ADR1'.
По директиве сравнения содержимого двух областей памяти "С" происходит последовательное побайтовое сравнение содержимого их ячеек. При обнаружении несоответствия на экран дисплея выводятся адрес ячейки из первой области памяти, содержимое этой ячейки, и содержимое соответствующей ячейки из второй области.
Воспользовавшись директивой поиска байта в пределах заданной области памяти "S" можно провести последовательное сравнение содержимого ячеек памяти и заданного в виде параметра двухразрядного шестнадцатиричного числа (байта). В результате на экран дисплея будут выведены адреса ячеек памяти, в которых будут обнаружены байты, равные заданному.
Для тестирования оперативной памяти предусмотрена специальная директива "Q", параметры которой определяют начальный и конечный адреса проверяемой области памяти. По окончании работы теста содержимое ячеек проверяемой области памяти не изменяется. В случае обнаружения ошибки на экране дисплея высветятся адрес неисправной ячейки, ее содержимое и эталонный байт. который должен был находиться в этой ячейке, если бы она была исправна. Этот тест предназначен только лишь дня быстрой предварительной проверки работоспособности ОЗУ и не позволяет обнаруживать все виды ошибок.
ДИРЕКТИВЫ ВВОДА-ВЫВОДА ИНФОРМАЦИИ.
Директивы этой группы служат для организации записи или считывания информации с магнитофона. Желательно, чтобы магнитофон имел счетчик ленты, по которому оператор мог бы отметить начало записи для последующего ее быстрого поиска.
Директива "O" записи на ленту содержит параметры, указывающие на границы области памяти, откуда будет выводится информация. При этом на, ленту будут последовательно записаны:
00Н
00Н 256 байт 00Н (начальный пропуск),
.....
00Н
Е6Н - байт синхронизации,
ADR1(Mл) - младший байт начального адреса.
ADR1(Cт) - старший байт начального адреса,
АDR2(Мл) - младший байт конечного адреса,
ADR2(Cт) - старший байт конечного адреса
области памяти и далее информационные
байты, число которых зависит от размера
заданной области памяти.
После набора директивы включают магнитофон в режим записи и пускают лентопротяжный механизм. После нажатия на клавишу "ВК" дисплея начнется запись информации на магнитную ленту.
Для того чтобы
используемая нами скорость записи (1500бит/с)
могла быть установлена независимо
от тактовой частоты микропроцессора,
предусмотрена возможность
Константа=40*Fтакт/2
, где Fтакт - в МГц,
40 - десятичное число.
Перед записью в память это значение необходимо перевести в шестнадцатеричную форму.
Директива ввода "I" инициирует ввод данных с магнитной ленты в ОЗУ микро-ЭВМ. Данные на ленте должны быть записаны и указанном выше формате. Директива не содержит параметров, так как значения адресов зоны памяти, в которые будет произведена запись, считываются с лепты. Если вся запись считана верно, то по окончании ввода на экране высвечиваются в шестнадцатиричном виде значения начального и конечного адресов области памяти, в которую были записаны информация, считанная с ленты, и сообщение о готовности монитора. Признаком того, что при считывании были обнаружены ошибки, может служить то обстоятельство, что при окончании записи на ленте (о чем можно судить на слух) на экране дисплея не появилось сообщение о готовности монитора к выполнению следующей директивы. Константа для временной задержки при считывании также вынесена в ОЗУ. Перед началом операции чтения в ячейку F75CH необходимо поместить константу, значение которой рассчитывается так же, как к для записи. Эта константа должна быть в полтора раза больше константы записи.
По директиве "V" - сравнения содержимого области памяти и информации. записанной на ленту, можно проверить верность записи-считывания. Каждый байт, считанный с ленты, сравнивается с соответствующим байтом из области памяти. В случае ошибки на экран дисплея выводятся адрес ячейки памяти, содержимое этой ячейки и значение байта, считанного с ленты. После обнаружения первой же ошибки выполнение директивы заканчивается, и на экране дисплея появляется сообщение о готовности монитора к приему новых директив.
ДИРЕКТИВЫ ЗАПУСКА И ОТЛАДКИ ПРОГРАММ.
С помощью директивы "J" можно запустить в работу любую отлаженную программу, хранящуюся и памяти микро-ЭВМ. Для этого необходимо знать начальный адрес этой программы, т. е. адрес команды, которая исполняется в программе первой. Этот адрес использован в качестве параметра директивы.
Для отладки написанных вами программ МОНИТОР позволяет организовать отладочный режим. После того, как вы введете коды написанной вами программы в память микроЭВМ с клавиатуры дисплея, используя директиву "М", можно приступить к ее отладке. Конечно, предварительно за письменным столом вы должны отладить свою программу на листе бумаги, т. е. четко представить себе все действия и результаты при выполнении каждой ее команды.
МОНИТОР позволяет
в отладочном режиме выполнить одну
или несколько команд вашей программы
(фрагмент программы). Отладочный режим
характерен тем, что для каждого
фрагмента программы можно
Для организации останова отлаживаемой программы по заданному адресу в нашем МОНИТОРе использован следующий способ. В ячейку памяти с адресом, равным адресу останова, при выполнении соответствующей директивы помещается код команды RST7, при этом предварительно содержимое этой ячейки запоминается в рабочей области памяти МОНИТОРа. В ячейку памяти с адресом 0038Н (адрес, по которому будет передано управление по команде RST7) помещают команду перехода на соответствующую подпрограмму МОНИТОРа. Таким образом, при достижении адреса останова отлаживаемой программой выполняется команда RST7, а управление перелается МОНИТОРу, который восстанавливает содержимое ячейки памяти, в которую был записан код команды RST7. Все эти действия выполняются автоматически при выполнении соответствующих директив МОНИТОРа.
Рассмотрим теперь действия, выполняемые МОНИТОРом по директивам отладки программ.
Директива "В" позволяет назначить один адрес останова в отлаживаемой программе.
Директива "G" предназначена для запуска отлаживаемой программы с адреса, используемого в ней в качестве параметра. При достижении адреса останова (заданного ранее с помощью директивы "В") управление передается МОНИТОРу.
Директива "Р" дает возможность организовать отладку циклически выполняемых программ с использованием двух адресов останова. В ней использованы три параметра:
* ADR1 - первый
адрес останова,
* ADR2 - второй адрес останова и
* D8 - число проходов через второй адрес
останова перед выполнением окончательного
останова.
После ввода директивы и нажатия на клавишу "ВК" на экран будет выведено следующее сообщение:
START -
После этого оператор должен набрать начальный адрес запуска отлаживаемой программы и вновь нажать клавишу "ВК". На экране дисплея появится еще одно сообщение:
DIR-
Теперь оператор может набрать одну из директив МОНИТОРа. Обычно это директива "D" с двумя параметрами - просмотр содержимого области памяти. Набор директивы заканчивается нажатием на клавишу "ВК". После этого управление передается по адресу "START".
При достижении адреса останова на экран дисплея каждый раз будет выводится содержимое внутренних регистров микропроцессора и выполняться директива МОНИТОРа, набранная в ответ на запрос DIR. Заметим, что оператор в ответ на этот запрос может просто нажать на клавишу "ВК", тогда при достижении адреса останова на экран будет выведено только содержимое регистров микропроцессора.
Рассмотренная
директива не требует предварительного
назначения адреса останова и является
удобным средством отладки
По директиве "X" на экране дисплея может быть выведено содержимое внутренних регистров микропроцессора в следующем формате:
А-00 В-00 С-00 D-00 Е-00 F-00 H-00 L-00 S-0000 О-0000.
Здесь буквы означают название соответствующего регистра микропроцессора А, В, С, D, Е, F (регистр признаков), H, L, SP (указатель стека) и О (адрес, по которому произошел останов программы, т. е. содержимое счетчика команд PC).
Директива "X" служит также и для изменения содержимого внутреннего регистра микропроцессора. Директива имеет параметр R, в качестве которого использовано однобуквенное наименование регистра: А, В, С, D. Е. H, L, F или S. После нажатия на клавишу "ВК" на экран выводится текущее содержимое регистра, и курсор устанавливается справа от этого значения. Теперь оператор может набрать новое значение, и после нажатия на клавишу "пробел" оно будет записано в соответствующий регистр.
Справочные директивы.
Кроме уже перечисленных, есть еще три директивы - справочные.
Директива "H" предназначена для подсчета суммы и разности двух шестнадцатиричных чисел. После набора директивы, двух четырехразрядных шестнадцатиричных чисел и нажатия на клавишу "ВК" на экран дисплея одновременно будут выведены их шестнадцатиричные сумма и разность.
Директива "А" позволяет вывести на экран шестнадцатиричный код символа, заданного в качестве ее параметра. Например, если набрать А К ВК), то на экране высветится 31 - код символа 1.
Если задать МОНИТОРУ директиву "К", то после нажатия на клавишу "ВК" все, что набирает оператор на клавиатуре, будет отображаться на экране дисплея. В основном этот режим необходим для проверки работы дисплея и клавиатуры. Выйти из такого режима работы дисплея можно, нажав одновременно на клавиши "УС" и "А".
В состав МОНИТОРа входит ряд подпрограмм ввода-вывода, которые могут быть использованы программистами в своих программах. Перечислим эти подпрограммы и правила обращения к ним.
- Подпрограмма ввода символа с клавиатуры. Адрес вызова - F803H. После возврата из подпрограммы код введенного символа находится в регистре "А" микропроцессора.
- Подпрограмма ввода байта с магнитофона. Адрес вызова - F806H. После возврата из подпрограммы введенный байт находится в регистре "А" микропроцессора.
- Подпрограмма вывода символа на экран дисплея. Адрес вызова - F809H. Перед вызовом этой подпрограммы необходимо поместить код выводимого символа в регистр "С" микропроцессора.
- Подпрограмма записи байта на магнитофон. Адрес вызова - F80CH. Перед вызовом этой подпрограммы необходимо поместить выводимый байт в регистр "С" микропроцессора.
- Подпрограмма проверки состояния клавиатуры. Адрес вызова - F812H. После возврата из данной подпрограммы в регистре "А" микропроцессора будет содержаться 00Н - если клавиша не нажата, или FFH - если клавиша нажата.
- Подпрограмма вывода на экран содержимого регистра "А" микропроцессора в шестнадцатиричном виде. Адрес вызова - F815H. Содержимое регистра "А" микропроцессора выводится на экран дисплея в виде двух шестнадцатиричных цифр.
- Подпрограмма вывода сообщений на экран дисплея. Адрес вызова - F818H. Данная подпрограмма позволяет выводить на экран дисплея любые тексты, хранящиеся в памяти в виде последовательности кодов символов. Перед вызовом подпрограммы в регистровую пару HL записывают начальный адрес последовательности кодов. Признаком конца текста служит код 00Н, встретившийся в последовательности кодов символов.
Подпрограммы ввода-вывода МОНИТОРа позволяют программисту, разрабатывающему свои программы, не задумываться над тем, как устроены и какими подпрограммами обслуживаются дисплеи, клавиатура и модуль сопряжения с магнитофоном в его микро-ЭВМ. Единые правила обращения к подпрограммам ввода-вывода позволят радиолюбителям обмениваться программами. При этом их микро-ЭВМ, выполненные по различным схемам (но, конечно, на микропроцессоре КР580ИК80А), должны иметь управляющие программы, похожие на описываемый МОНИТОР, и содержать программы ввода-вывода "по-своему", обслуживающие отличные от описываемых дисплеи и клавиатуру. Но при этом правила обращения к этим подпрограммам должны быть едиными во всех микро-ЭВМ.
Принятые в описываемом мониторе правила обращения к подпрограммам, обслуживающим дисплей и клавиатуру, являются типичными для многих существующих микро-ЭВМ. Сложнее дело обстоит с подпрограммами обслуживания кассетного магнитофона. Здесь для достижения совместимости всех микро-ЭВМ необходимо также иметь одинаковые метод, скорость и формат записи информации на ленту.
Рассмотрим теперь
пример, поясняющий использование некоторых
возможностей монитора при написании
и отладке программ. На рис.1 представлена
программа, реализующая следующие
действия. При вводе с клавиатуры
трех символов - А35, именуемых далее
пароль, на экран выводится сообщение
"правильно". Если при вводе
любого из символов будет допущена
ошибка, то на экран выводится вопросительный
знак, и ввод пароля надо начать сначала.
Пользуясь комментариями к
В ячейках памяти 0127Н-0129Н хранятся коды символов пароля, а в ячейках 012АН- 0132Н коды символов, из которых состоит сообщение "правильно". Не упустите из вида и то, что при написании текста программы (поля 3, 4, 5) в первом случае мы непосредственно использовали коды символов пароля, которые затем при переводе программы в машинные коды и переписали в поле 2. Во втором случае при написании программы в поле 5 мы занесли слово "правильно", заключив его в апострофы (надстрочные запятые). И только на стадии перевода программы в машинные коды мы в поле 2 поместили колы букв этого слова. Два этих приема совершенно равноценны, но если текст программы предполагается переводить (транслировать) в машинные коды автоматически с помощью специальной программы - транслятора с ассемблера, то, конечно, используют второй способ. Ведь при этом вам не придется пользоваться таблицей перевода символов в коды, так как ассемблер автоматически поместит в поле 2 коды, соответствующие символам, заключенным в апострофы.
И еще одно пояснение к программе: внутренний регистр D микропроцессора используется в качестве счетчика правильно введенных символов пароля. Этот счетчик при вводе символов работает на вычитание и при его обнулении после трех введенных символов выполняется команда, загружающая в регистровую пару HL адрес кода первой буквы слова "правильно". Затем вызывается подпрограмма для вывода этого слова на экран. Вывод кодов символов происходит до момента, пока не встретится код 00Н, записанный в ячейку 0133Н.
0100 310001 LXI SP,0100H ;Настройка стека
0103 1603 НАЧАЛО: MVI D,3 ;Число символов в пароле
0105 212701 LXI H,ПАРОЛ ;HL= Указатель на начало области
;памяти, где хранится пароль
0108 CD03F8 ввод: CALL F804H ;ввод символа
010B 4F MOV С,A ;Переслать его в регистр C
010A СD09F8 CALL F809H ;
010F BE СМР M ;Сравнить его с паролем
0110 C21F01 JNZ ОШИБК ;Не совпадает --> ОШИБКА
0113 23 INX Н ;Перейти к следующему символу
0114 1B DCR D ;Уменьшить счетчик символов
0115 C20801 JNZ ввод ;Повторить ввод
0118 212A01 LXI Н,ВЕРНО ;HL= Указатель на сообщение "правильно"
011B CD18F8 CALL F818Н ;Вывод сообщения на экран
011E 76 HLT ;Конец работы программы
011F 013F ОШИБК: MVI C,3FH ;3FH=
0121 CD09F8 CALL F809H ;Вывести на экран ?
0124 C30301 JMP НАЧАЛО ;Повторить ввод
0127 70413335 ПАРОЛ: DB 41H,33H,35H ;Коды символа пароля А35
012A 707261 ВЕРНО: DB 'ПРАВИЛЬНО' ;Сообщение
77696С
786E6F
0133 00 DB 0 ;Признак конца сообщения
Рис.1
В тексте программы допущена одна ошибка, которую вам предстоит найти и устранить в процессе отладки. Итак, с помощью директивы "М" введем коды программы по соответствующим адресам в память микро-ЭВМ. Правильность ввода можно проконтролировать по директиве "D", в ответ на которую на экран будет выведена таблица с содержимым области памяти в шестнадцатеричном виде. Если вы воспользуетесь директивой "L", то сможете просмотреть содержимое памяти в символьном виде, проверив тем самым, верно ли введены коды пароля и слова "правильно".

- Программное обеспечение моделирования нейроных сетей
- Программное обеспечение персональных компьютеров
- Программное обеспечение ПК
- Программное обеспечение ПК
- Программное обеспечение ПК и его классификация
- Программное обеспечение ПК. Назначение. Классификаци
- Программное обеспечение ПК. Операционные системы
- Программное обеспечение компьютера
- Программное обеспечение компьютера
- Программное обеспечение компьютера
- Программное обеспечение компьютера
- Программное обеспечение компьютера
- Программное обеспечение компьютеров. Архиваторы
- Программное обеспечение локальных сетей