Программное Обеспечение Микро-Эвм

Автор: Пользователь скрыл имя, 21 Ноября 2011 в 17:38, реферат

Краткое описание

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

Файлы: 1 файл

Программное обеспечение Микро.docx

— 43.87 Кб (Скачать)

По директиве "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.

Если задать МОНИТОРУ директиву "К", то после нажатия на клавишу "ВК" все, что набирает оператор на клавиатуре, будет отображаться на экране дисплея. В основном этот режим необходим для проверки работы дисплея и клавиатуры. Выйти из такого режима работы дисплея можно, нажав одновременно на клавиши "УС" и "А".

В состав МОНИТОРа входит ряд подпрограмм ввода-вывода, которые могут быть использованы программистами в своих программах. Перечислим эти подпрограммы и правила обращения к ним.

  1. Подпрограмма ввода символа с клавиатуры. Адрес вызова - F803H. После возврата из подпрограммы код введенного символа находится в регистре "А" микропроцессора.
  2. Подпрограмма ввода байта с магнитофона. Адрес вызова - F806H. После возврата из подпрограммы введенный байт находится в регистре "А" микропроцессора.
  3. Подпрограмма вывода символа на экран дисплея. Адрес вызова - F809H. Перед вызовом этой подпрограммы необходимо поместить код выводимого символа в регистр "С" микропроцессора.
  4. Подпрограмма записи байта на магнитофон. Адрес вызова - F80CH. Перед вызовом этой подпрограммы необходимо поместить выводимый байт в регистр "С" микропроцессора.
  5. Подпрограмма проверки состояния клавиатуры. Адрес вызова - F812H. После возврата из данной подпрограммы в регистре "А" микропроцессора будет содержаться 00Н - если клавиша не нажата, или FFH - если клавиша нажата.
  6. Подпрограмма вывода на экран содержимого регистра "А" микропроцессора в шестнадцатиричном виде. Адрес вызова - F815H. Содержимое регистра "А" микропроцессора выводится на экран дисплея в виде двух шестнадцатиричных цифр.
  7. Подпрограмма вывода сообщений на экран дисплея. Адрес вызова - F818H. Данная подпрограмма позволяет выводить на экран дисплея любые тексты, хранящиеся в памяти в виде последовательности кодов символов. Перед вызовом подпрограммы в регистровую пару HL записывают начальный адрес последовательности кодов. Признаком конца текста служит код 00Н, встретившийся в последовательности кодов символов.

Подпрограммы  ввода-вывода МОНИТОРа позволяют программисту, разрабатывающему свои программы, не задумываться над тем, как устроены и какими подпрограммами обслуживаются дисплеи, клавиатура и модуль сопряжения с магнитофоном в его микро-ЭВМ. Единые правила обращения к подпрограммам ввода-вывода позволят радиолюбителям обмениваться программами. При этом их микро-ЭВМ, выполненные по различным схемам (но, конечно, на микропроцессоре КР580ИК80А), должны иметь управляющие программы, похожие на описываемый МОНИТОР, и содержать программы ввода-вывода "по-своему", обслуживающие отличные от описываемых дисплеи и клавиатуру. Но при этом правила обращения к этим подпрограммам должны быть едиными во всех микро-ЭВМ.

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

Рассмотрим теперь пример, поясняющий использование некоторых  возможностей монитора при написании  и отладке программ. На рис.1 представлена программа, реализующая следующие  действия. При вводе с клавиатуры трех символов - А35, именуемых далее  пароль, на экран выводится сообщение "правильно". Если при вводе  любого из символов будет допущена ошибка, то на экран выводится вопросительный знак, и ввод пароля надо начать сначала. Пользуясь комментариями к программе, вы легко сможете восстановить ее алгоритм работы. При этом учтите, что  для ввода. символа с клавиатуры, вывода символа на экран, а также вывода сообщения "правильно", используются подпрограммы монитора, обращение к которым происходит по командам CALL F803H, CALL F809H и CALL F818H соответственно. Обратите также внимание на те действия, которые производятся в основной программе перед обращением к подпрограммам.

В ячейках памяти 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", то сможете просмотреть содержимое памяти в символьном виде, проверив тем самым, верно ли введены коды пароля и слова "правильно".

Информация о работе Программное Обеспечение Микро-Эвм