Радио-86РК/Радио 09-88/Отладчик

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: Г. ШТЕФАН

Источник: http://retro.h1.ru/RK86/Debug/Debug.php

Интерпретатор языка БЕЙСИК, редактор и ассемблер для компьютера «Радио-86РК» входят в состав так называемого системного (точнее инструментального) программного обеспечения. Они предназначены для более удобной и быстрой разработки прикладных программ (расчетных, учебных, игровых и т. п.). К одной из обязательных программ инструментального обеспечения компьютера можно отнести и программу отладчик, предназначенную для отладки программ в машинных кодах, хранящихся в памяти компьютера.

Необходимость иметь отладчик в инструментальном ПО обусловлена тем, что практически все вновь разрабатываемые программы на языке АССЕМБЛЕРА (за исключением самых простых) содержат, как правило, различные ошибки. Синтаксические ошибки выявляются на этапе трансляции, и исправить их не составляет большого труда. Логические же ошибки выявляются только при «мысленном» выполнении программы или на этапе выполнения программы компьютером. Первый выпуск разработанной программы обычно заканчивается разрушением программы в ОЗУ и срывом индикации на экране. Поэтому и приходится начинать поэтапное, с многочисленными промежуточными выводами и остановами выявление ошибок. Отладчики позволяют в значительной степени избавиться от этих неприятностей, облегчить неизбежный и трудоемкий процесс отладки программы и значительно сократить время на разработку программ, особенно программистам невысокой квалификации.

Предлагаемая вниманию читателей программа ОТЛАДЧИК (DP) разработана для компьютера «Радио-86РК» с МОНИТОРОМ, рассчитанным на объем ОЗУ 32 Кбайт и имеющим стандартные точки входа. Отладчик работает в диалоговом режиме и предоставляет программисту следующие возможности:

  • просматривать и изменять содержимое оперативной памяти в шестнадцатеричном и символьном формате (директивы М, L, S, W, D);
  • просматривать и изменять содержимое регистров процессора в шестнадцатеричном формате (директива X);
  • перемещать содержимое ОЗУ (директива Т);
  • заполнять область ОЗУ одинаковыми кодами (директива F);
  • вычислять контрольную сумму области ОЗУ (директива К);
  • дизассемблировать машинные коды (директива Z);
  • устанавливать и отменять «ловушки» (точки останова) по адресу выполняемой команды или чтению/записи в заданную ячейку ОЗУ (директива О);
  • устанавливать и отменять ловушки по значению любой регистровой пары или операнду трехбайтной команды (директива О);
  • устанавливать и отменять ловушки по коду выполняемой команды или значению аккумулятора (директива О);
  • устанавливать и отменять ловушку по интервалу адресов команд или значений регистровых пар (директива I);
  • устанавливать начальный адрес отлаживаемой программы и скорость ее выполнения (директива А);
  • определять значение символьной метки в программе на языке АССЕМБЛЕРа и содержимое памяти по этому адресу при наличии в ОЗУ текста программы и АССЕМБЛЕРа (ASSM) «МИКРОН» (директива U);
  • запускать выполнение программы (директивы С и J); — входить а отладчик из отлаживаемой программы и выходить из него;
  • выполнять подпрограммы отлаживаемой программ в обычном режиме (директива УС+С);
  • распознавать и выполнять подпрограммы МОНИТОРа в обычном режиме;
  • изменять значения регистра признаков микропроцессора «ПЕРЕНОС», «НУЛЬ» и «ЗНАК» (директивы УС+(r), УС+А, УС+В);
  • устанавливать и отменять следующие режимы отладки программ:
    1. трассировку выполнения команд;
    2. трассировку содержимого вершины стека;
    3. трассировку выполнения подпрограмм;
    4. трассировку выполнения команд перехода;
    5. пошаговый режим выполнения команд;
    6. выбор объекта ловушек;
    7. режим прохождения ловушек;
    8. режим однострочной выдачи.


Несмотря на обилие и кажущуюся сложность выполняемых отладчиком функций и директив, работу с ним можно начать, освоив всего две из них — А и G, а по мере накопления опыта программирования и отладки программ расширять круг используемых директив и режимов работы ОТЛАДЧИКа.

Программа ОТЛАДЧИК отличается от многих других подобных программ и директивы G МОНИТОРа тем, что она даже временно не модифицирует отлаживаемую программу, то есть не вставляет в нее коды команд RST и JMP и, по возможности, не портит стек. Это позволяет отлаживать программы любой сложности (независимо от того находятся они в ОЗУ или ПЗУ), не изменяющие область ОЗУ, занятую отладчиком, сам ОТЛАДЧИК располагается в старших адресах памяти: до области, используемой обычно в качестве стека.

Формат директив ОТЛАДЧИКа совпадает с форматом директив МОНИТОРа, то есть после односимвольной директивы можно задать до трех параметров в виде шестнадцатеричных чисел. Исключение — директива U, параметром которой является символьная метка. Значения параметров многих директив можно не задавать. В этом случае их значение будет взято по умолчанию. Нажатие клавиши <ВК> без ввода директивы приводит к повторному выполнению последней введенной директивы. Например, после ввода директивы G последовательным нажатием клавиши <ВК> осуществляется пошаговое выполнение программы, после ввода директивы D без параметров нажатие <ВК> приводит к выводу на экран дампа последовательных фрагментов памяти, начиная с текущего адреса отлаживаемой программы и т. д.

Работа с отладчиком начинается с его запуска директивой МОНИТОРа G6400 (к этому моменту отлаживаемая программа должна находиться в ОЗУ). На экран выводится идентификатор отладчика «DP*STF*V2.0» и символ : «>», приглашающий к вводу директив. Это состояние ОТЛАДЧИКа будем называть состоянием или режимом приема директив в отличие от режима выполнения программы, в котором каждая команда отлаживаемой программы моделируется или выполняется под контролем ОТЛАДЧИКа.

ДИРЕКТИВЫ РАБОТЫ С ПАМЯТЬЮ

Формат директив F, Т, X, S, L и выполняемые ими действия почти полностью совпадают с соответствующими директивами МОНИТОРа. Директива М дополнительно выводит символьное представление байта или точку. Директива L с одним параметром похожа на директиву М, но в память заносится код символа нажатой клавиши. Выполнение директив прекращается нажатием клавиши «.». По директиве D, кроме шестнадцатеричного, второй строкой выводится и символьное представление памяти. Значением первого параметра по умолчанию является текущий адрес отлаживаемой программы (PC), вторым параметром задается число выводимых строк по 16 байт в строке (по умолчанию выводится восемь строк). Директива Z приводит к выводу на дисплей представление области памяти в виде программы на языке ассемблера. Ее первый параметр задает начало области памяти (умолчание то же, что и для директивы D), второй — число выводимых строк (по умолчанию 22). Директива S так же, как и в МОНИТОРе, осуществляет поиск байта в области ОЗУ. Директива W предназначена для поиска слова. По директиве К можно вычислить контрольную сумму области ОЗУ. Форматы директив приведены в табл. 1.

ТАБЛИЦА 1. ФОРМАТ ДИРЕКТИВ ОТЛАДЧИКА.

  • М<АДРЕС>
  • L<AДPEC>
  • L<НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЫЙ АДРЕС>
  • D/<НАЧАЛЬНЫЙ ДДРЕО>/,/<ЧИСЛО СТРОК>/
  • Z/<НАЧАЛЬНЫЙ АДРЕС>/,/<ЧИСЛО СТРОК>/
  • Т<НАЧ.АДР. >,<КОН.АДР.>,<АДР.ОБЛ.ПЕРЕСЫЛКИ>
  • F<НАЧАЛЬНЫЙ АЯРЕС>,<КОНЕЧНЫЙ АДРЕС>,<КОД>
  • S<НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЫЙ АДРЕС>,<КОД>
  • W<НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЬЙ АДРЕС,<КОД>
  • K<начальный АДРЕС>,<КОНЕЧНЫЙ АДРЕС
  • О/<НОМЕР/,/<АДРЕС/ЗНАЧЕНИЕ>/
  • I< НАЧАЛЬНЫЙ АДРЕС>,<КОНЕЧНЫЙ АДРЕС>
  • А<АДРЕC>,/<СКОРОСТЬ>/
  • U<METKA>


ДИРЕКТИВЫ ЗАПУСКА И ОТЛАДКИ ПРОГРАММ

Для запуска отлаживаемой программы необходимо ввести директиву А. Ее первый параметр задает адрес программы (PC), с которого необходимо начать отладку, второй (необязательный) — скорость выполнения программы (число от 0 до 7). Он имеет смысл только при отключенном пошаговом режиме или режиме однострочного вывода информации. Выполнение программы начинается по директиве G, не имеющей параметров, а только переводящей ОТЛАДЧИК в состояние выполнения программы. Теперь его работа будет определяться байтом флажков, задающих различные режимы выполнения программы и отображения отладочной информации. Значение флажков можно оперативно менять. Из состояния выполнения программы в режим приема директив отладчик переходит после нажатия клавиши «.» (точка) или при срабатывании ловушки.

Аппарат ловушек предназначен для обнаружения определенных ситуаций, возникающих при выполнении программы. Такими ситуациями могут быть выполнение команды по заданному адресу, попытка записи или чтения из определенной ячейки, код выполняемой команды, определенное значение аккумулятора и другие. В зависимости от значения флажка F6 объектом ловушки может быть либо только адрес команды и адрес ячейки, либо, кроме этого, еще и операнд трехбайтной команды, значения регистровой пары и указателя стека. ОТЛАДЧИК позволяет одновременно установить до восьми ловушек. Устанавливают ловушки директивой О. Первый параметр определяет номер ловушки (число 0 до 7), второй — ее значение. Директива О без параметров отменяет (обнуляет) все ловушки. Для того чтобы снять только одну ловушку, выполняют директиву, указав только ее первый параметр — номер ловушки. Ловушки с номерами 6 и 7 проверяются перед выполнением каждой команды независимо от значения флажка F6.

Ловушку с номером 6 устанавливают на код выполняемой команды. Она всегда срабатывает перед выполнением искомой команды. На команду HLT (код 76Н) ловушку можно не устанавливать, так как по умолчанию она всегда вызывает срабатывание ловушки перед ее выполнением. Благодаря этому команду HLT можно использовать в программе для установки контрольных точек, но из отлаженной программы их необходимо обязательно исключить.

Ловушку с номером 7 устанавливают на ненулевое значение аккумулятора. Она сработает, когда после выполнения очередной команды в аккумулятор загрузится установленное в ловушке значение. При установке ловушек с номерами 6 и 7 вторым параметром директивы О должно быть двухразрядное шестнадцатеричное число.

Кроме ловушек на отдельные значения, имеется возможность установить одну ловушку на интервал значений. Интервальная ловушка устанавливается директивой 1, имеющей два параметра — начальное и конечное значения интервала. Ловушка срабатывает, когда значение объекта ловушки попадет в интервал ее значений. По умолчанию интервальная ловушка устанавливается на область ОЗУ, занятую ОТЛАДЧИКОМ (чтобы отлаживаемая программа случайно не изменила ее). Отменяет интервальную ловушку директива I без параметров.

При срабатывании любой ловушки на дисплей выводится информационное сообщение, и в зависимости от значения флажка F7 ОТЛАДЧИК либо продолжает выполнение программы, либо переходит в состояние ввода директив. Сообщение о срабатывании ловушки состоит из слова «ловушка» и кода сработавшей ловушки. Коды ловушек приведены в табл. 2.

Чтобы продолжить выполнение программы после срабатывания ловушки, необходимо либо ее отменить и продолжить выполнение программы по директиве G, либо не отменяя, по директиве J. Директива J отличается от директивы G только тем, что перед выполнением первой команды не производится проверка на срабатывание ловушки.

Следующие четыре директивы, обрабатываемые только а режиме выполнения программы, позволяют управлять ходом ее выполнения. При нажатии на УС -@ или клавишу <F1> инвертируется значение бита 0 регистра F микропроцессора, то есть признак «ПЕРЕНОС», при нажатии на УС+A или клавишу <F2> инвертируется бит 6, то есть признак «НУЛЬ», а при нажатии на УС+В или клавишу <F3> инвертируется бит 7, то есть признак «ЗНАК». Четвертая директива — УС+С или клавиша <F4> предназначена для выполнения отлаженных подпрограмм,

ТАБЛИЦА 2. КОД — ВИД ЛОВУШКИ

  • 0 — ИНТЕРВАЛЬНАЯ ЛОВУШКА
  • 1 — ЛОВУШКА ПО КОДУ КОМАНДЫ
  • 2 — ЛОВУШКА ПО ЗНАЧЕНИЮ АККУМУЛЯТОРА
  • 3 — КОМАНДА HLT
  • 4 — ОДИНОЧНАЯ ЛОВУШКА

Для того чтобы выполнить подпрограмму в обычном режиме без контроля ОТЛАДЧИКа, а после возврата из подпрограммы продолжить отладку, достаточно после выполнения команды CALL нажать на клавишу — <F4>. ОТЛАДЧИК передаст управление отлаживаемой программе по текущему адресу, записав в стек адрес возврата в ОТЛАДЧИК. Во избежание ошибок необходимо до выполнения директивы проконтролировать содержимое вершины стека, установив значение флажка F2=1. В вершине стека должен обязательно находиться адрес возврата из подпрограммы. После любой операции со стеком передавать управление подпрограмме нельзя. Выполнение подпрограмм в обычном режиме позволяет резко ускорить процесс отладки, так как скорость выполнения программы под отладчиком с трассировкой команд составляет всего 10-15 команд в секунду.

В любой момент можно выйти из ОТЛАДЧИКа, передав управление отлаживаемой программе по текущему адресу, для этого надо выполнить директиву R, не имеющую параметров.

ДИРЕКТИВЫ ИЗМЕНЕНИЯ РЕЖИМОВ

Режим работы ОТЛАДЧИКА определяется байтом флажков, значение которых может быть изменено директивами 1 — 8. Директивы параметров не имеют. Выполнение директивы заключается в инвертировании соответствующего разряда в байте флажков, поэтому повторное выполнение директивы восстанавливает первоначальное состояние флажка (триггер — эффект). Вводить директивы изменения режима можно в любой момент работы ОТЛАДЧИКа. В состоянии выполнения программы директивы обрабатываются сразу после нажатия на клавиши 1, 2, …, 8, в режиме приема директив — после нажатия на клавишу <ВК>.

Директива 1 задает режим вывода на дисплей сообщения о значениях регистровых пар и мнемоники выполняемой команды (текущем состоянии отлаживаемой программы. см. пример в табл. 3). При значении флажка F1=1 информация выводится, при F1=0 — не выводится.

Директива 2 управляет форматом вывода сообщения о текущем состоянии программы: при F2=0 сообщение выводится в одну строку, при F2=1 — в две строки. Во второй строке выводится значение указателя стека и три слова из его вершины. При F1=0 вторая строка не выводится независимо от значения флажка F2.

Директива 3 управляет выводом информации о выполнении подпрограмм. Информация выводится в структурированном виде: отображается вложенность подпрограмм (в отдельных случаях это условие не выполняется). Переход на подпрограмму обозначается символом «стрелка вправо», возврат из подпрограммы — символом «стрелка влево».

Директива 4 управляет выводом информации о командах перехода PCHL, JMP, JM и др. Эта информация выводится только при F3=1. Команды перехода отличаются от обращений к подпрограммам тем, что между адресами вместо символа «стрелка вправо», стоит символ «>».

Директива 5 задает режим пошагового выполнения программы. При F5=1 после ввода директивы G или J на дисплей выводится сообщение о текущем состоянии программы без выполнения отображаемой команды. Для выполнения команды необходимо нажать на клавишу — <ВК>. При каждом нажатии на клавишу <ВК> выполняется только одна команда. Нажатие на клавишу <^ПРОБЕЛ> отменяет пошаговый режим на время нажатия клавиши. При F5*0 слаживаемая программа выполняется непрерывно. Скорость выполнения можно задать в директиве А. Нажатие на любую клавишу, кроме <<ПРОБЕЛА^>, временно приостанавливает выполнение программы.

ТАБЛИЦА 3.

DP*S Т F* V2.О
>А1100"BK"
>2"BK"
F2=1
>G"BK"
A=00 ..P.O BC-0000 OE-0000 HL-0000/00SP-75FD/0000 0000 0000 1100: LXI 	H,1205 "BK"
A=00 ..P.O BC-0000 DE-0000 HL-1205/00SP-75FF/0000 0000 0000 1103: PUSH 	H "BK"
A=00 ..P.O BC-0000 DE-0000 HL-1205/00SP-75FB/1205 0000 0000 1104: MOV 	A,H "BK"
A=00 ..P.O BC-0000 DE-0000 HL-1205/00SP-75FB/1205 0000 0000 1105: ORA 	A "2"
F2=0
A=00 ..P.O BC-0000 DE-0000 HL-1205/00 1105: ORA A "BK"
A=00 .ZP.E BC-0000 DE-0000 HL-1205/00 1106: JNZ 110B "BK"
A=00 .ZP.E BC-0000 DE-0000 HL-1205/00 1109: MVl A,5 "BK"
A=05 .ZP.E BC-0000 DE-0000 HL-1205/00 110B: MOV B,A "BK"
A=05 .ZP.E BC-0500 OE-0000 HL-1205/00 110C: STA 12D5 "BK"
A=05 .ZP.E BC-0500 DE-0000 HL-1205/05 110F: POP H "."
>U ДЛИНА "BK"
1205 0005>

Директива 6 управляет выбором объекта ловушек. При F6=0 ловушка срабатывает при попытке выполнить как команду, прочитать или записать в ячейку с адресом, совпадающим с ловушкой или попадающим в интервал значений ловушки. Например, в качестве интервала значений ловушки удобно задавать границы памяти, в которые ваша программа заведомо не должна обращаться. Срабатывание этой ловушки будет происходить в случае действительной ошибки в программе. При F6=1 со значениями ловушек сравниваются значения всех регистровых пар, адреса и операнды трехбайтных команд.

В этом режиме могут появиться многочисленные незапланированные срабатывания ловушек, поэтому интервальную ловушку желательно отменить.

Необходимо помнить, что проверка на срабатывание ловушки проводится перед выполнением команды, так, например, если установить ловушку на адрес текущей команды и начать выполнение программы директивой G, то очередная команда выполняться не будет, так как сработает ловушка. Похожая ситуация возникает и после срабатывания ловушки. Для дальнейшего выполнения программы часто достаточно выполнить директиву J, не изменяя значений ловушек. Если после выполнения команды условие, вызвавшее срабатывание ловушки, не исчезнет, то придется явно повторять ввод директивы J до изменения условия или отмены ловушки. Ввод последней директивы по умолчанию, то есть просто нажатием на — <ВК>, на директиву J не распространяется.

Директива 7 управляет режимом прохождения ловушек. При F7=1 срабатывание ловушки приводит к выдаче соответствующего сообщения, выполнение программы прекращается и ОТЛАДЧИК переходит в состояние приема директив. При F7=0 сообщение о срабатывании ловушки выдается, но отлаживаемая программа продолжает работу без прерываний.

Директива 8 задает режим однострочной выдачи, когда почти вся информация ОТЛАДЧИКа выводится последовательно в верхнюю строку экрана. Такой режим удобен для отладки программ, формирующих «картинки» на экране дисплея. Так как содержимое строки постоянно обновляется, стирая предыдущие сообщения, то для контроля информации нужно либо установить пошаговый режим выполнения программы, либо подобрать удобную скорость в директиве А, либо управлять выполнением программы нажатием на клавиши <ВК> и <ПРОБЕЛ>. При каждом выполнении директивы 8 экран дисплея очищается, отладочную информацию можно выводить в любую строку экрана — для этого надо соответственно увеличить значение ячейки по адресу 642ВН.

ДОПОЛНИТЕЛЬНЫЕ ДИРЕКТИВЫ

Справочную информацию о мнемонике и функциях всех директив вы можете получить по директиве H, не имеющей параметров. Текст справки располагается в памяти компьютера перед отладчиком и занимает 768 байт. После того как необходимость в нем отпадет или при записи отладчика в ПЗУ, вы можете подготовить себе вариант отладчика без справки или изменить ее содержание и объем.

Директива ! выдает информацию о текущем состоянии ОТЛАДЧИКа и отлаживаемой программы. Параметром директивы является число К от 0 до 2. При К=0 выдается информация о текущем состоянии отлаживаемой программы. При К=1 дополнительно выводится текущее значение байта флажков. При К>1 дополнительно выдается информация о значениях ловушек.

Директива U особенно полезна при разработке собственных программ. Она возвращает адрес или значение любой метки, определенной в исходном тексте программы, а также содержимое ОЗУ по этому адресу в формате слова. У директивы U один параметр — имя метки. Директива U очень удобна при отладке фрагментов разрабатываемой программы, например подпрограмм. Определив по директиве U адрес начала подпрограммы в ОЗУ, вы можете по директиве Х задать соответствующие значения регистров и выполнить подпрограмму в пошаговом режиме. По директиве U можно также определять текущее значение переменных, не пользуясь директивами D и М. При выполнении директивы используются подпрограмма АССЕМБЛЕРа «ПОИСК МЕТКИ В ТАБЛИЦЕ МЕТОК» и таблица меток, построенная им во время трансляции программы. Описание каждой метки в таблице занимает восемь байт; 6 байт на метку и 2 байта на значение метки. Признаком конца таблицы служит нулевой байт в области метки. Таблица меток расположена в ОЗУ сразу же после текста программы. Директива U выполняется только с ассемблером (assM) «МИКРОН», загруженным с адреса 800Н.

Нажатие на клавишу — <СТР> в режиме приема директив приводит к передаче управления МОНИТОРу по адресу, записанному в ячейках 640АН, 640ВН (по умолчанию F86CH). При нажатии на клавишу <АР2> управление передается по адресу, записанному в ячейках 640DH, 640ЕН (по умолчанию 0000Н, например, РЕДАКТОРу).

ОТЛАДЧИК перехватывает обращения к трем подпрограммам МОНИТОРа: ввод символа с клавиатуры (0F803H), вывод кода нажатой клавиши (0F81ВН) и опрос состояния клавиатуры (0F812Н). При обнаружении обращений к этим подпрограммам ОТЛАДЧИК выдает звуковой сигнал, выводит на экран символ ? и ждет нажатия клавиши. Код нажатой клавиши передается отлаживаемой программе. Для моделирования ситуации не нажатой клавиши при обращении к подпрограммам 0F81ВН и 0F812Н необходимо нажать клавишу <ЗАБОЙ>. В аккумулятор будет загружен соответственно код 0FFH или 00Н. Для моделирования нажатия клавиши <РУС/ЛАТ> необходимо нажать УС+О. В аккумулятор будет загружен код 0FEH. Если после вывода на дисплей запроса? на ввод кода клавиши требуется вернуться в ОТЛАДЧИК, надо ввести код УС+D или нажать клавишу <F5>. ОТЛАДЧИК перейдет в режим ввода директив. Продолжить выполнение программы можно по директиве G, но повторной выдачи звукового сигнала и символа? при этом не будет. В пошаговом режиме всегда можно вернуться в режим приема директив и изменить значение аккумулятора директивой X.

ОТЛАДЧИК не гарантирует правильного выполнения программы при обращении к подпрограммам МОНИТОРа помимо стандартных точек входа. Команды перехода на стандартные подпрограммы МОНИТОРа, необходимые для работы ОТЛАДЧИКа, расположены в области ОЗУ с 640FH по 6427Н.

Рассмотрим наиболее простые приемы работы с ОТЛАДЧИКом. Пусть необходимо проверить работу фрагмента подпрограммы на языке АССЕМБЛЕРа, приведенного в табл. 4. Директивой А устанавливают начальный адрес программы. Директивой 2 задают режим вывода информации о выполняемой команде в 2 строки. Директивой G запускают выполнение программы в пошаговом (по умолчанию) режиме. В первой строке информации после значения аккумулятора в удобном для анализа виде выводятся признаки переноса («С» или «ТОЧКА»), нуля («Z» или «ТОЧКА»), знака («М» или «Р»), вспомогательного переноса («А» или «ТОЧКА») и паритета («Е» или «О»).

ТАБЛИЦА 4

1100 10 05 12 M1: LXI Н,ДЛИНА ; ПРИМЕР ФРАГМЕНТА
1103 Е5           PUSH Н      ; ПРОГРАММЫ ДЛЯ
1104 7E           MOV А,М     ; ДЕМОНСТРАЦИИ СЕАНСА
1105 B7           ORA А       ;ОТЛАДКИ
1106 С2 0В 11     JNZ 245     ; 
1109 5E 05        MVI А,5
110B 47           MOV В,А
110C 32 05 12     STA ДЛИНА
110F Е1           POP Н
1205 
0000 ДЛИНА:       DB 0,0

После нажатия на <ВК> текущая команда выполняется и выводится информация о следующей команде. Директива 2 отменяет вывод второй строки информации. Нажатие на клавишу <ТОЧКА> переводит ОТЛАДЧИК а режим приема директив. В конце протокола приведен пример выполнения директивы U.

Кроме основной точки входа 6400Н, ОТЛАДЧИК имеет дополнительную точку входа с адресом 6403Н, позволяющую входить в него не по директиве G МОНИТОРа, а из отлаживаемой программы, и выполнять под управлением ОТЛАДЧИКа не всю программу, а лишь отдельные ее фрагменты. В этом случае в начале отлаживаемого фрагмента в программу вставляют команду CALL 6403Н, по которой ОТЛАДЧИК получит управление, и уже следующая за вызовом ОТЛАДЧИКа команда будет выполняться под его управлением. ОТЛАДЧИК принудительно установит пошаговый режим (F5=1) и вывод текущей информации о программе (F1=1). Вернуться в вызываемую программу можно в любой момент, нажав на клавишу R или выполнив директиву R. Управление передается программе по текущему адресу PC. Таким образом, можно неоднократно входить в ОТЛАДЧИК из разных точек программы. Для того чтобы войти в ОТЛАДЧИК по директиве G МОНИТОРа, без очистки рабочих полей, предусмотрена точка входа по адресу 6406Н.

ОТЛАДЧИК не изменяет адрес верхней границы ОЗУ, но такая возможность в нем предусмотрена. Для этого в три последовательные ячейки, начиная с адреса 65D5H, нужно занести коды 21Н, 0FFH, 60Н, то есть оттранслированную команду LXI Н,60FFH. При работе отладчика периодически обнуляется ячейка по адресу 7605Н служебной области ОЗУ МОНИТОРа. Это вызвано особенностями реализации в МОНИТОРе подпрограмм ввода символа с клавиатуры (0F803H) и подпрограммы ввода кода нажатой клавиши (0F81BH).

Перечень всех директив отладчика</A> приведен в табл.5, формат директив, имеющих параметры, — в табл. 1. Машинные коды ОТЛАДЧИКа при размере ОЗУ 32К располагаются в памяти с адреса 6400Н до 73FFH. Информация о директивах ОТЛАДЧИКа, выдаваемая по директиве Н, расположена в памяти с адреса 6100Н до 63FFH. Адрес начала текста справки (6103Н) находится в ячейках 6428Н, 6429Н. При необходимости его можно изменить или заменить адресом текста-заглушки 64F7H. Рабочая область занимает ОЗУ с адреса 7400Н no 749FH. Область ОЗУ с адреса 74АОН по 75FFH доступна программам и может использоваться, например, под область стека. Машинные коды отладчика вместе с поблочными контрольными суммами приведены соответственно в табл. 6 и 7.

ТАБЛИЦА 5

ДИРЕКТИВА ВЫПОЛНЯЕМЫЕ действия
G6400 ЗАПУСК ОТЛАДЧИКА ПО ДИРЕТИВЕ МОНИТОРА
G6406 ЗАПУСК ОТЛАДЧИКА БЕЗ ОЧИСТКИ РАБОЧИХ ПОЛЕЙ
CALL 6403Н ВХОД В ОТЛАДЧИК ИЗ ОТЛАЖИВАЕМОЙ ПРОГРАММЫ
СТР ВЫХОД ПО АДРЕСУ 0000Н
АP2 ВЫХОД В МОНИТОР ПО АДРЕСУ 0F86CH
РЕЖИМ ПРИЕМА ДИРЕКТИВ
H,L,D,F,T,S ДИРЕКТИВЫ РАБОТЫ С ПАМЯТЬЮ, АНАЛОГИЧНЫЕ ДИРЕКТИВАМ МОНИТОРА
W ПОИСК СЛОВА В ОБЛАЧСТИ ОЗУ
К ВЫЧИСЛЕНИЕ КОНТРОЛЬНОЙ СУММЫ
Z ДИЗАССЕМБЛИРОВАНИЕ ОБЛАСТИ ПАМЯТИ
O ОТМЕНА ИЛИ УСТАНОВКА ЛОВУШЕК:0-5 ПО АДРЕСУ, 6 ПО КОДУ КОМАНДЫ, 7 ПО ЗНАЧЕНИЮ

АККУМУЛЯТОРА

I ОТМЕНА ИЛИ УСТАНОВКА ИНТЕРВАЛЬНОЙ ЛОВУШКИ
X ПРОСМОТР И ИЗМЕНЕНИЕ ЗНАЧЕНИЯ РЕГИСТРОВ
U ОПРЕДЕЛЕНИЕИ ЗНАЧЕНИЯ МЕТКИ В ПРОГРАММЕ НА ЯЗЫКЕ АССЕМБЛЕРА
А УСТАНОВКА НАЧАЛЬНОГО АДРЕСА И СКОРОСТИ ВЫПОЛНЕНИ ПРОГРАММЫ
G ВЫПОЛНЕНИЕ ПРОГРАММЫ
J ВЫПОЛНЕНИЕ ПРОГРАММЫ ПОСЛЕ СРАБАТЫВАНИЯ ЛОВУШКИ
ВК ПОВТОРИТЬ ВЫПОЛНЕНИЕ ПОСЛЕДНЕЙ ДИРЕКТИВЫ
РЕЖИМ ВЫПОЛНЕНИЯ ПРОГРАММЫ
1,2,3,4,5,6,7,8 ИНВЕРТИРОВАНИЕ ЗНАЧЕНИЯ ФЛАЖКА В БАЙТЕ ФЛАЖКОВ
1* ТРАССИРОВКА ВЫПОЛНЯЕМЫХ КОМАНД
2* ТРАССИРОВКА ЗНАЧЕНИЙ ВЕРШИНЫ СТЕКА
3* ТРАССИРОВКА ВЫПОЛНЯЕМЫХ ПОДПРОГРАММ
4* ТРАССИРОВКА ВЫПОЛНЯЕМЫХ КОМАНД ПЕРЕХОДА
5* ПОШАГОВЙ (ПОКОМАНДНЫЙ) РЕЖИМ ВЫПОЛНЕНИЯ
6* РЕЖИМ ДЕЙСТВИЯ ЛОВУШЕК
7* РЕЖИМ ПРОХОЖДЕНИЯ ЛОВУШЕК
8* РЕЖИМ ОДНОСТРОЧНОЙ ВЫДАЧИ
ПРОБЕЛ ВРЕМЕННАЯ ОТМЕНА ПОШАГОВОГО РЕЖИМА (ПРИ F5=1)
ВК ВЫПОЛНЕНИЕ ОДНОЙ КОМАНДЫ (ПРИ F5=1)

ВРЕМЕННАЯ ОСТАНОВКА (F5=0)

F1 ИНВЕРТИРОВАНИЕ ПРИЗНАКА «ПЕРЕНОС»
F2 ИНВЕРТИРОВАНИЕ ПРИЗНАКА «НУЛЬ»
F3 ИНВЕРТИРОВАНИЕ ПРИЗНАКА «ЗНАК»
F4 ВЫПОЛНЕНИЕ ПОДПРОГРАММ БЕЗ ТРАССИРОВКИ КОМАНД
R* УХОД В ОТЛАЖИВАЕМУЮ ПРОГРАММУ
. (ТОЧКА) ПЕРЕХОД В РЕЖИМПРИЕМА ДИРЕКТИВ

ПРИМЕЧАНИЕ: директивы помеченные «*» выполняются также в режиме приема директив.

Таблица 7.

БЛОК КОНТРОЛЬНАЯ СУММА
6100 61FF A5C0
6200 62FF 8969
6300 63FF 2069
6400 64FF CA6B
6500 65FF F86A
6600 66FF FC08
6700 67FF 3614
6800 68FF D4BC
6900 69FF EBB8
6A00 6AFF F63E
6B00 6BFF 4A42
6C00 6CFF Е2D4
6D00 6DFF 9840
6E00 6EFF EFCA
6F00 6FFF 8604
7000 70FF C367
7100 71FF 0AE1
7200 72FF D1A6
7300 73FF 17D6
6100 73FF A68D