Автор: Пользователь скрыл имя, 21 Ноября 2011 в 17:38, реферат
В последней статье этого цикла ми вновь вернемся к вопросам программирования микро-ЭВМ. Из описания работы микро-ЭВМ следует, что практически все функции, которые она выполняет, полностью определяются программами, записанными в ее память. При этом могут быть использованы как готовые программы, разработанные кем-то ранее, так и программы, разработанные самостоятельно.
По директиве "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.
Если задать МОНИТОРУ директиву "К", то после нажатия на клавишу "ВК" все, что набирает оператор на клавиатуре, будет отображаться на экране дисплея. В основном этот режим необходим для проверки работы дисплея и клавиатуры. Выйти из такого режима работы дисплея можно, нажав одновременно на клавиши "УС" и "А".
В состав МОНИТОРа входит ряд подпрограмм ввода-вывода, которые могут быть использованы программистами в своих программах. Перечислим эти подпрограммы и правила обращения к ним.
Подпрограммы ввода-вывода МОНИТОРа позволяют программисту, разрабатывающему свои программы, не задумываться над тем, как устроены и какими подпрограммами обслуживаются дисплеи, клавиатура и модуль сопряжения с магнитофоном в его микро-ЭВМ. Единые правила обращения к подпрограммам ввода-вывода позволят радиолюбителям обмениваться программами. При этом их микро-ЭВМ, выполненные по различным схемам (но, конечно, на микропроцессоре КР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", то сможете просмотреть содержимое памяти в символьном виде, проверив тем самым, верно ли введены коды пароля и слова "правильно".