Дизассемблирование программы
Symbol Shift/4
Дизассемблировать программу, начиная с текущей ячейки памяти. Про-
изводится постраничный вывод на экран текста дизассемблированной
программы. После вывода очередной страницы, нажав клавишу Edit или
Symbol Shift/4, можно вернуться к ФП, любую другую — продолжить
дизассемблирование. Вывод текста приостанавливается клавишей Space.
Т
Дизассемблировать блок кодов. На запросы First: и Last: введите соответст-
венно начальный и конечный адреса блока кодов. Для вывода дизассемб-
лированной программы на принтер, на запрос Printer? ответьте Y (в верхнем
регистре!), после чего на запрос Labels? укажите, включать ли метки в
распечатку листинга (Y — Да). При отрицательном ответе на запрос Printer?
листинг будет выводиться на экран.
На запрос Text: введите адрес размещения в памяти текстового файла
либо имя файла на диске, префиксированное номером устройства и
двоеточием. Например:
Text: F000 сохранить текст в памяти с адреса #FQ00;
Text: 2:DCODE сохранить текст на дисководе "В" в файле DCODE.
Если Вы хотите просмотреть дизассемблированную программу без созда-
ния текстового файла, на запрос Text: нажмите Enter.
На запрос Workspace: вводится начальный адрес рабочей области, предназ-
наченной для временного хранения информации о метках. По умолчанию
начальный адрес устанавливается равным адресу загрузки отладчика ми-
нус 4096 (YYYYY—4096). Запрос Workspace: не возникнет, если выбрано
дизассемблирование без создания меток.
Далее задаются начальные (First:) и конечные (Last:) адреса областей
(внутри заданного блока кодов), не требующие дизассемблирования
(данные, таблицы, тексты). При обработке этих областей MONS4 гене-
рирует инструкции DEFB. Если значение байта данных лежит в пределах
от 32 до 127 (#20...#7F), то байт интерпретируется как код ASCII и
представляется соответствующим символом.
Адреса областей данных записываются в память непосредственно после
MONS4.
После завершения определения всех областей данных для запуска дизас-
семблирования на запросы First: и Last: введите пустые строки.
В процессе дизассемблирования генерируются метки формата LXXXX, где
ХХХХ — абсолютный шестнадцатеричный адрес ячейки, на которую
указывает метка. Если адрес не попадает внутрь обрабатываемого блока
кодов, метка не создается, а в мнемонике команды указывается абсолют-
ный адрес. Например, последовательность кодов #СЗ #00 #78 может
быть дезассемблирована и как JP L7800, и как JP #7800, в зависимости от
того, входит ли ячейка с адресом #7800 в дезассемблируемый блок.
Если адрес ячейки памяти входит в дезассемблируемый блок, но является
не первым байтом многобайтовой команды» то метка не создается, хотя
ссылки на нее в тексте будут присутствовать.
Байт N, следующий за инструкцией RST 8, дезассемблируется как DEFB N, так
как обычно этот байт содержит данные (точнее, код сообщения для процедуры
обработки ошибки).
Неопознанный код дизассемблируется как команда NOP и в листинге
отмечается символом *.
Дизассемблированке может быть приостановлено клавишей Space. После
чего, нажав клавишу Edit или Caps Shift/5, можно прекратить дезассем-
блирование, либо, нажав любую другую, продолжить.
Дизассемблирование прекратится, если при генерации текстового файла
его граница достигнет области памяти, занятой MONS4.
Если дизассемблирование сопровождалось созданием текстового файла
в памяти, то по завершении процесса будет выдано сообщение:
End of the text ZZZZZ
где ZZZZZ — адрес последнего байта файла.
Текстовый файл создается в формате ассемблера GENS4 и может быть
загружен в него для редактирования. Для сохранения текстового файла
запомните начальный (введенный на запрос Text:) и конечный адреса
(ZZZZZ) его размещения в памяти, вернитесь в Бейсик и запишите текст
на магнитный носитель как файл типа CODE.
Если в процессе дезассемблирования текстовый файл сохраняется на
диске, то листинг на экран не выдается. При объеме текста более 16К
создается несколько файлов. Файл или файлы с диска могут быть загруже-
ны в GENS4 обычным способом.
В описываемой дисковой версии MONS4 поддержка дисковода реализо-
вана в оверлейном файле MONSBETA*, который автоматически подгру-
жается в память с текущего дисковода сразу после ввода имени текстового
файла. Если оверлей не найден, управление передается интерпретатору
Бейсика с сообщением 2 Variable not found. MONSBETA размещается вслед
за областью информации о каналах, поэтому размер свободной памяти
ниже RAMTOP должен быть не менее 512 байт.
Запуск и отладка программы
Symbol Shift/Z
Выполнить команду в пошаговом режиме (трассировка программы). По
нажатию клавиши выполняется команда, записанная в ячейке памяти,
адресуемой счетчиком команд PC**. Обратите внимание, что УА при этом
может быть установлен на другую ячейку. Чтобы увидеть мнемонику
команды, с которой будет начато пошаговое выполнение программы,
предварительно переместите УА на ячейку, адресуемую счетчиком ко-
манд. После выполнения каждого шага ФП переписывается в соответст-
*) Такое решение позволяет в других режимах работы оставить размер
отладчика небольшим.
**) При работе отладчик использует стандартный для операционной системы
режим обработки прерывании (режим 1), изменение которого командами
отлаживаемой программы может привести к «зависанию» компьютера.
вии с новым состоянием регистров и памяти, УА устанавливается на
ячейку, адресуемую PC.
Symbol Shift/T
Выполнить одну команду. Выполняется команда, размещенная по адресу,
указанному счетчиком команд PC. Если при отладке программы в поша-
говом режиме встретилась команда вызова подпрограммы, трассировать
которую нет необходимости, то использование команды Symbol Shlft/T
дает возможность выполнить подпрограмму за один шаг. После этого PC
устанавливается на ячейку, следующую за инструкцией CALL.
Рекомендуется использовать только для выполнения инструкций вызова
подпрограмм.
W
Установить точку останова по текущему адресу. Расставив точки остано-
ва, Вы сможете анализировать ход дополнения программы, которая в
нужных местах будет прерываться с передачей управления отладчику. На
ФП отобразится состояние памяти и регистров на момент прерывания
программы.
При задании точки останова в память, начиная с текущей ячейки,
записываются три байта инструкции CALL. Предыдущее содержимое этих
ячеек переписывается в буфер, расположенный за MONS4. Команда
CALL, помещенная в точку останова, прерывает выполнение программы
и передает управление отладчику, при этом содержимое измененных
ячеек памяти восстанавливается.
Например, рассмотрим следующий фрагмент программы:
5B0F 76 HALT
5B10AF XOR А
5В11 D3FE OUT (#FE),A
5В13 F5 PUSH AF
5B14 01BE00 LD BC,#00BE
5B17 OB DEC ВС
5B18 78 LD A,B
5B19 B1 OR С
5B1A 20FB JR |4Z,#5B17
5B1C F1 POP AF
5B1D 3C INC A
5B1EFE07 CP #07
5B20 38EF JR C,#5B11
5B22D3FE OUT (#FE),A
5B24 3E7F LD A,#7F
В пошаговом режиме процесс отладки этого фрагмента займет чрезвы-
чайно много времени. Ускорить его можно, Поставив точку останова после
внешнего цикла (адрес #5В22). Для этого установите УА на адрес #5В22
и выполните команду W. На место OUT (#FE),A и LD A,#7F будет записана
инструкция CALL, вызывающая подпрограмму обработки точек останова.
Командой отладчика Symbol SMff/K (см. ниже) осуществляется запуск
выполнения фрагмента программы с адреса, записанного в счетчике
команд. После выполнения фрагмента, управление будет передано отлад-
чику, который восстановит программу в точке останова, произведет
короткий звуковой сигнал и будет ожидать нажатия любой клавиши,
после чего вернет на экран ФП.
Точки останова изменяют программу, поэтому пользоваться ими нужно
с осторожностью. Если в отлаживаемой программе есть обращения к
ячейкам, занятым точками останова, то результат ее выполнения непред-
сказуем.
Рассмотрим пример:
до установки после установки
9174 25 DEC Н 25 DEC Н
9175 20 JR NZ,#9178 20 JR NZ,#9178
9176 01 01
9177 С9 RET конец цикла CD CALL mons4 вызов
9178 2D DEC L XX п/п обработки
9179 28 JR Zf#9174 XX точек останова
917А F9 F9 LD SP.HL
917В 18 JR #9178 18 JR #9178
917C FB FB
Пусть в этом фрагменте программы точка останова (CALL mons4) уста-
новлена на конец цикла (адрес #9177). Тогда при выполнении команды
JR NZf#9178 управление будет передано ячейке, содержимое которой из-
менено, что неизбежно приведет к ошибке. В этом случае есть два выхода
— либо использовать для отладки программы пошаговый режим, либо
установить точку останова по адресу вершины стека, то есть туда, куда
вернется управление по команде RET.
Symbol Shift/К
Продолжить выполнение программы* Выполнение программы с адреса,
находящегося в счетчике команд PC. Команда применяется для отладки
программ с использованием точек останова.
J
Запустить выполнение программы с заданного адреса. На подсказку
введите адрес, с которого необходимо запустить выполнение программы.
Для возврата в MONS4 можно использовать точки останова.
При запуске программы этой командой, в регистры не заносятся значе-
ния, отраженные на ФП, поэтому пользоваться ею имеет смысл только
для глобального запуска программ (например, для запуска GENS4 без
выхода в Бейсик).
Другие команды
О
Переключить набор регистров. При запуске отладчика на ФП отобража-
ется основной набор регистров (AF, HL, DE, ВС). После выполнения этой
команды будет отображаться альтернативный набор (AF HL', DE', ВС)
и все действия будут выполняться над ним. Для возврата к основному
набору повторно выполните команду.
Symbol Shift/3
Изменить систему счисления, в которой отображаются адреса, с шестнад-
цатеричной на десятичную и обратно. Содержимое ячеек памяти всегда
выводится в шестнадцатеричном виде.
н
Перевести число из десятичной формы в шестнадцатеричную. Введите
десятичное число в пределах от 0 до 65535, нажмите любую нецифровую
клавишу, и на экране появится его шестнадцатеричный эквивалент.
Symbol Shift/A
Возвратиться в Бейсик.
ПРИМЕР СЕАНСА РАБОТЫ
Рассмотрим пример отладки программы вывода чисел, приведенной
в описании сеанса работа на ассемблере GENS4. Предположим, что при
наборе программы в GENS4 была допущена ошибка: в строке с номером 330
в инструкции ADD А/ЧГ вместо символа «ноль» был вписан символ «О». В
процессе ассемблирования ошибка не будет найдена, и программа будет
работать, но неправильно: вместо ожидаемого числа 12345 при ее запуске на
экран будет выведено WXYZ[.
В памяти ZX Spectrum должна находиться оттранслированная про-
грамма и MONS4, загруженный с адреса 55000.