MONS4
МОНИТОР-ОТЛАДЧИК
Монитор-отладчик MONS4, являясь составной частью пакета
DEVPAC4, совместим с ассемблером GENS4. Программисты предпочи-
тают его другим отладчикам, поскольку он обладает неплохими харак-
теристиками: перемещаем, имеет эффективные средства трассйровки
программ и занимает относительно небольшой объем памяти.
В предлагаемом описании рассматриваются кассетная версия
MONS4 и версия, работающая с диском в среде TR-DOS.
ЗАГРУЗКА MONS4
Поскольку MONS4 является перемещаемым, его можно загрузить с
произвольного адреса. Первоначально для его размещения требуется около
1К памяти, однако при первом запуске MONS4, настроившись для работы
по заданному адресу, освобождает примерно 1 К.
Загрузка с магнитофона:
CLEAR YYYYY—1
LOAD "MONS4"CODE YYYYY
здесь и ниже YYYYY — десятичный адрес загрузки.
Загрузка с диска:
CLEAR YYYYY—1
RANDOMIZE USR 15619: REM : LOAD "MONS4B"CODE YYYYY
Запуск и перезапуск отладчика производится оператором
RANDOMIZE USR YYYYY
ФРОНТАЛЬНАЯ ПАНЕЛЬ
После запуска MONS4 на экране появляется так называемая фрон-
тальная панель (ФП), на которой отображается информация о состоянии
памяти, регистров и флагов в процессе отладки программ (см. рис. 16). В
верхней части ФП выводится адрес и содержимое текущей ячейки памяти
(код и мнемоника команды), то есть ячейки, на которую установлен указатель
адреса (УА). Он определяет точку приложения команд MONS4. Ниже на ФП
отображается содержимое регистров Z80. В строках вслед за значениями
регистровых пар PC, SP, IY, IX, HL, DE и ВС выводится содержимое семи
последовательно расположенных ячеек памяти, первая из которых адресует-
ся соответствующей регистровой парой. Рядом с регистрами А и F индици -
руются установленные флаги, а рядом с регистрами I и R — состояние
триггера разрешения прерываний (ON — прерывания разрешены, OFF —
запрещены*). В нижней части ФП в три столбца размещен дамп памяти —
последовательность из 24 ячеек (адрес и содержимое).
КОМАНДЫ MONS4
Управление отладчиком осуществляется с помощью команд, пользуясь
которыми помните, что:
— команды могут вводиться с клавиатуры как в верхнем, так и в нижнем
регистре;
— команды, не требующие числовых аргументов, выполняются при нажа-
тии соответствующей клавиши, без подтверждения клавишей Enter;
— значения числовых аргументов вводятся только в шестнадцатеричной
форме и требуют подтверждения клавишей Enter; если после числа
ввести знак «минус», то число инвертируется;
— неопознанные команды игнорируются;
— отмена выполнения команд производится клавишами Caps Shift/1 (Edit)
или Caps Shift/5;
— если при выполнении команды произошло перемещение УА, то ФП
обновляется.
Перемещение указателя адреса
Enter
Переместить УА на следующую ячейку»
Caps Shift/7
Переместить УА на предыдущую ячейку.
Caps Shift/5
Переместить УА на 8 ячеек назад.
Caps Shift/8
Переместить УА на 8 ячеек вперед.
М
Переместить УА на заданный адрес. На подсказку введите шестнадцате-
ричный адрес ячейки памяти, на которую необходимо установить УА.
Symbol Shift/N
Перейти по стеку. УА устанавливается на ячейку памяти, адрес которой
находится на вершине стека, при этом значение регистра указателя стека
SP не изменяется. Команда используется для определения адреса возвра-
та из подпрограммы.
О
Выполнить относительный переход. УА сдвигается относительно текущей
ячейки памяти на величину содержимого этой ячейки, интерпретируе-
мого как относительное смещение. Смещения более #7F (127) трактуют-
ся как отрицательные.
*) Триггер разрешения прерываний изменяет срое состояние только при
выполнении команд отлаживаемой программы. Средствами MONS4 его
состояние изменить невозможно.
Пример:
Предположим, что при отладке программы встретилась команда
JR NZ,#5B12, расположенная по адресам #5B3F и #5В40, при этом по
адресу #5B3F находится код #20 (JR NZ), а по адресу #5В40 — код #D1
(смещение). Если установить УА на ячейку #5В40 и ввести команду О,
то УА переместится на адрес #5В12.
и
Вернуться к исходной ячейке после относительного перехода. Позволяет
вернуться к адресу, в котором была выполнена команда о.
X
Выполнить прямой переход. УА устанавливается на ячейку памяти, адрес
которой определяется двумя байтами, расположенными в текущей и
следующей за ней ячейках памяти.
Пример:
Предположим, что при отладке программы по адресу #5BCF встретилась
команда вызова подпрограммы CALL #9Е12. При этом по адресу #5BCF
находится код #CD (CALL), а по адресам #5BD0 и #5BD1 — коды #12 и
#9Е соответственно (адрес подпрограммы). Если установить УА на адрес
#5BD0 и ввести команду X, то УА переместится на ячейку с адресом #9Е12.
Y
Вернуться к исходной ячейке после прямого перехода. Позволяет вернуть-
ся к адресу, в котором была выполнена команда X.
Поиск байт ш памяти
G
Найти последовательность байт в памяти. На подсказку последовательно
введите однобайтовые шестнадцатеричные числа. Ввод любого нецифро-
вого символа заканчивает последовательность и запускает поиск. Поиск
начинается с текущей ячейки памяти и продолжается до тех пор, пока
последовательность не будет найдена, после чего УА установится на адрес
ее первого байта. Во время поиска MONS4 просматривает также область,
занимаемую им самим, и, поскольку образец хранится в специальном
буфере отладчика, находит последовательность и внутри себя.
Пример:
Предположим, Вы хотите исследовать память, начиная с адреса #5В00,
на появление последовательности #СD #В5 #03. Для этого введите
следующие команды: *
M:5BMJ установка УА
G:COJ ввод первого байта
:B5J ввод второго байта
:93J ввод третьего байта
: J завершение ввода
После завершения ввода, MONS4 начинает поиск заданной последова-
тельности с адреса #5В00. Когда она будет найдена. УА установится на
ее первый байт.
*) Здесь и ниже используются следующие обозначения: J — клавиша Enter,
полужирным шрифтом выделяется текст, вводимый с клавиатуры, нор-
мальным — текст, выводимый на экран, курсивом — пояснения.
N
Продолжить поиск последовательности байт, заданной командой О, начи-
ная с ячейки, на которую указывает УА.
Просмотр программы
L
Вывести на экран дамп памяти. Начиная с текущего адреса, производится
постраничное отображение содержимого памяти. В конце каждой строки
кодов выводятся соответствующие им символы. Для кодов от 32 (#20) до
127 (#7F) выводятся их ASCII-эквиваленты. Если код меньше 32 (#20),
он обозначается точкой. Если код больше 127 (#7F), то он будет пред-
ставлен ASCII-символом, соответствующим этому коду со сброшенным
старшим битом.
После вывода очередной страницы, нажав клавишу отмены команда (Edit
или Caps Shift/5), можно вернуться к ФП. Любая другая клавиша продолжит
вывод листинга.
Symbol Shiff/P
Распечатать дамп памяти на принтере. Аналогично команде L
Изменение содержимого пчжн памштн и регистров
Для того, чтобы изменить содержимое ячейки шшяш, установите на
нее УА, введите нужное значение (однобайтовое шестнадцатеричное число)
и нажмите любую нецифровую клавишу. Если эта клавиша вызывает
выполнение какой-либо команды MONS4, то она будет выполнена после
записи числа. Для изменения содержимого ячейки памяти без выполнения
команды подтвердите ввод клавишей Space или Enter: при записи гю Space
указатель адреса не меняет своего положения, по Enter — перемещается на
следующую ячейку.
Если нужно изменить содержимое регистра Z80, то ввод числа завер-
шите нажатием Symbol Shift/M — точкой. Число будет записано в регистр,
на который усганоален указатель регистра (см. рис. 15). Первоначально он
указывает на PC. Для перемещения указателя регистра вводите точку без
числа, при этом он будет циклически перемещаться вдоль регистров, минуя
только SP, I и R, содержимое которых командами MONS4 изменять невоз-
можно.
Y
Ввести в память символьную строку. Символ, вводимый с клавиатуры,
отображается на экране, а его код заносится в текущую ячейку памяти, после
чего значение УА увеличивается на единицу. Клавиша Delete (Caps Shift/0)
используется для удаления последнего символа строки, при этом УА переме-
щается на ячейку назад. Следует отметить, что хота символ и исчезает с
экрана, его код не удаляется из соответствующей ячейки памяти Ввод строки
завершается нажатием клавиши отмены команды (Edit или Caps Shift/5).
I
Копировать блок памяти. На соответствующие запросы введите началь-
ный (First:) и конечный (Last:) адреса блока и адрес размещения его копии
(То:). Если начальный адрес больше конечного, то команда игнорируется.
MONS4 позволяет копировать с перекрытием исходного блока, то есть
копия блока может располагаться поверх оригинала.
Заполнить область памяти заданным байтом. На запросы First:, Last:, With:
введите, соответственно, значения начального и конечного адресов области
памяти и байт-заполнитель. Если начальный адрес больше конечного,
команда игнорируется.
Например, введите:
M:9B10J установка У А
Р J
First:9B00J
Last :9В 10 J
With:AAJ
Результат Ваших действий сразу отразится на экране.