Системные программы для ZX Spectrum 1993 г.

Монитор-отладчик MON2 - дизассемблирование программы. Запуск и отладка программы.


По этой команде дизассемблируется программа, расположенная
с адреса addrl по addr2, и ее листинг выводится на экран (рис. 54).
Параметры data1_addr1, data 1_addr2, ..., dataN^addrl, dataN_addr2 за-
дают начальные и конечные адреса областей (внутри заданного
блока кодов), не требующие дизассемблирования, то есть содержа-
щие данные (таблицы, тексты). При обработке этих областей Моп2
генерирует инструкции DEFB.

Кроме того, инструкция DEFB генерируется и в том случае, если
Моп2 встречает последовательность кодов, которую не может ин-
терпретировать как команду. Первый байт такой последовательнос-
ти представляется как байт данных в формате DEFB, после чего
процесс дизассемблирования продолжается со следующего адреса.
Например, неопознанная как команда последовательность байт
#DD #6F будет дизассемблирована следующим образом:

50000 ...

50001 DEFB #DD

50002 LD L,A

50003 ...

Поскольку инструкция RST 8 (#CF) в ZX Spectrum ответственна
за вызов подпрограммы обработки ошибок интерпретатора Бейси-
ка, то содержимое следующей за ней ячейки дизассемблируется как
код ошибки интерпретатора (см. [2], стр. 98). При этом нулевому
содержимому этой ячейки соответствует код ошибки 1, единице —
2, ..., девятке — А и т. д. до 26 — R (рис. 54).

Огромное преимущество Моп2 перед другими мониторами-от-
ладчиками состоит в том, что он дизассемблирует команды калькуля-

тора, встроенного в интерпретатор Spectrum-Бейсика. Встретив
инструкцию включения калькулятора RST #28 (код #EF), Моп2
представляет последующие коды в виде специальных мнемоник
калькулятора. Этот процесс продолжается до тех пор, пока не будет
встречен код 56 (#38) — команда калькулятора END, сигнализиру-
ющая о конце блока команд калькулятора.

При дизассемблировании после команд безусловных переходов
и возвратов из подпрограмм Моп2 вставляет разделители, что
значительно облегчает чтение листинга (см. рис. 54).

При нажатии клавиши О в режиме DISAS в листинг кроме
адресов и мнемоник включаются еще и коды команд. Обратное
переключение производится повторным нажатием О.

Во время дизассемблирования можно менять текущий адрес
клавишами CS/7, CS/6, CS/5, CS/8 и SS/A (см. стр. 187).

Выход в режим ввода команд происходит при достижении адреса
addr2 или нажатии клавиши Edit.

После выполнения этой команды, программа в кодах, находяща-
яся по адресу addrl, будет дизассемблироваться в режиме DISAS так,
как будто она расположена по адресу addr2. Листинг программы
представляется с соответствующим пересчетом адресов в коман-
дах — к ним прибавляется смещение (addr2~addrl). Никаких изме-
нений с самой программой не происходит.

Необходимость воспользоваться этой командой возникает, когда
требуется взглянуть на программу, которая настроена для работы,
скажем, в экранной области или в ПЗУ, а загружена в другие
адреса.

При входе в режим трассировки (TRACE, см. ниже) смещение,
задаваемое командой SHIFT, обнуляется.

Смещение, задаваемое командой SHIFT, используется также при
выполнении команды Q-RELOC.

Пример:

Хотите взглянуть на «прошивку» Spectrum-Бейсика, загружен-
ную с адреса 50000 — нет проблем! Правда, в примере
(см. рис. 55) в ОЗУ копируются только первые 8 килобайт ПЗУ —
сути дела это не меняет.

По этой команде в стек помещается адрес возврата в Mon2, а
затем выполняется инструкция JP addr, то есть запускается подпрог-
рамма, расположенная по адресу ас/с/г. Возврат в монитор происхо-
дит но команде RET.

При использовании команды GOSUB нужно быть осторожным,
если вы хотите по окончании выполнения подпрограммы вернуть-
ся в Моп2. Стоит задаться следующими вопросами:

• не производит ли выполняемая подпрограмма запись в ту
часть памяти, где расположен монитор?

• не будет ли утерян адрес возврата в монитор в результате
каких-либо манипуляций со стеком, которые производит вы-
полняемая подпрограмма?

• возникнет ли у запускаемой подпрограммы желание вернуть-
ся (нет ли в ней, к примеру, бесконечных циклов)?

Эта команда используется для копирования программы в кодах
с пересчетом адресов, что позволяет сохранить ее работоспособ-
ность. Значения адресов в командах программы изменяются на
величину addr3-addr1 при условии, что адреса попадают в проме-
жуток от addrl до addr2. Остальные адреса остаются неизменными
(рис. 56).

Обратите внимание на то( что при выполнении команды RELOC
Моп2 не различает команды и данные. Поэтому, если в копируе-
мый фрагмент попадут данные, совпадающие с кодами команд,
требующих перенастройки, то Моп2 изменит эти данные.

При копировании программы командой Q-RELOC к корректиру-
емым адресам добавляется не только разница addr3-addr1, как при
выполнении команды RELOC, но и смещение, заданное командой
SHIFT (см. стр. 195). Таким образом, величина коррекции адресов
будет равна: (addr3—addrl)q_rB-OC + addrl )shift (cm- Рис- 57).

Эта команда может пригодиться для записи на магнитный носи-
тель программ, предназначенных для работы в экранной области,
в ПЗУ или адресах, в которых в данный момент размещен сам
монитор. Например, вы написали программу, расположенную с
адреса 30000, но хотите, чтобы она работала в экранной области.
С помощью команды Q-RELOC вы можете сделать копию програм-
мы в адресах, начиная, допустим, с50000, но с рабочими адресами
в экранной области. Затем можно записать скопированную в адрес
50000 программу на ленту, и выйдя из Моп2, загрузить ее «в
экран» и запустить.

По этой команде счетчик команд PC устанавливается на адрес
addrl и происходит переход в режим трассировки. Он предназначен
для отладки программ — замедленного выполнения их с парал-
лельным отображением на экране мнемоник команд и содержимо-
го регистров и памяти.

При входе в режим на экране появляется трассировочная панель
(рис. 58)*. В ее левом верхнем углу выводится адрес, содержащий-
ся в счетчике команд PC, и мнемоника команды, записанной по
этому адресу. Эту команду мы будем называть текущей. Ниже на
трассировочной панели отображаются значения регистров процес-
сора: в первой колонке представлены имена регистров, во вто-
рой — их значения, далее — содержимое пяти (в режиме десятич-
ного вывода) или семи (в режиме шестнадцатеричного)
последовательно расположенных ячеек памяти, первая из которых

адресуется соответствующей регистровой парой. Следом за значе-
ниями регистров А и F повторно индицируется содержимое реги-
стра А (аккумулятора), его ASCII-эквивалент, а также установлен-
ные флаги.

В нижней части трассировочной панели размещены два дампа
памяти — начальные адреса и содержимое шести последовательно
расположенных ячеек памяти. Значения начальных адресов дампов
задает пользователь. Отображение на экране содержимого облас-
тей памяти часто очень помогает при отладке программы. Если
войти в режим TRACE сразу после запуска монитора, эти дампы на
экран выводиться не будут — их отображение нужно включить
(см. ниже).

Во время трассировки программы можно менять текущий адрес
клавишами CS/7, CS/6, CS/5, CS/8 и SS/A (см. стр. 187).

Выход в режим ввода команд происходит при достижении адреса
addr2 или при нажатии клавиши Edit.

Выбор отображаемой информации при трассировке

В режиме трассировки можно выбрать, какую информацию
отображать, а какую — нет. Находясь в режиме TRACE, нажмите
клавишу О, после чего вам последовательно будет предложен спи-
сок регистров*: PC, SPr IX, IY, ВС, DE, HL, AF. Если вы хотите,
чтобы содержимое какого-либо регистра выводилось на экран,
подтвердите это желание нажатием клавиши Y, если нет — нажми-
те любую другую клавишу.

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

Если вы на все запросы ответили нажатием Y, то трассировочная
панель будет наиболее полной (рис. 58).

При входе в режим трассировки на панели отображается основ-
ной набор регистров (AF, HL, DE, ВС). Клавиша X позволяет
переключить отображаемый набор на альтернативный (AF HL',
DE', ВС'). Для возврата к основному набору повторно нажмите X.

При работе в режиме отображения трассировочной панели, на
экран выводится мнемоника только одной — текущей команды, все
остальное место на экране занимает информация о регистрах и
памяти. Клавиша М позволяет увидеть трассировочный листинг
отлаживаемой программы. В этом режиме на экран выводятся одна
за другой мнемоники команд, выполняемых за каждый шаг трас-
сировки, но без информации о состоянии памяти и регистров
(рис. 58). Повторное нажатие М возвращает на экран трассировоч-
ную панель.

Изменение содержимого регистров и адресов дампов

Для изменения содержимого какой-либо пары регистров не-
обходимо:

• клавишами SS/M выставить указатель регистра (см. рис. 58)
на нужную пару;

• нажать клавиши SS/L и на подсказку =: ввести новое значение
обоих регистров, после чего нажать Enter.

Для изменения начальных адресов отображаемых дампов (V
и W) нажмите клавишу V или W соответственно, после чего введите
новое значение, завершив ввод нажатием Enter.

Команды трассировки

В режиме TRACE есть несколько команд трассировки, которые
управляют скоростью выполнения отлаживаемой программы.

Пошаговый режим. При нажатии клавиши Space выполняется
текущая команда (см. рис. 58), то есть делается один шаг трасси-
ровки. После каждого шага трассировочная панель переписывает-
ся в соответствии с новым состоянием регистров и памяти.

Замедленное выполнение программы с отображением информа-
ции на трассировочной панели. Добиться этого можно либо удер-
живая клавишу Enter, либо нажав клавишу Р. Остановить выпол-
нение программы после нажатия клавиши Р можно с помощью
любой клавиши.

Выполнить подпрограмму за один шаг. Если при отладке про-
граммы в пошаговом режиме встретилась команда вызова подпрог-
раммы CALL, и проходить по шагам эту подпрограмму нет необхо-
димости, то нажав клавишу S, можно выполнить подпрограмму за
один шаг. После этого счетчик команд PC устанавливается на
ячейку, следующую за инструкцией CALL.

Выполнить фрагмент программы до определенного адреса без

отображения информации на трассировочной панели. После нажа-
тия клавиши Т на подсказку (Т:) нужно ввести адрес, до которого
требуется быстро выполнить отлаживаемую программу, и нажать
Enter. Трассировочная панель пропадет и начнется выполнение
фрагмента. При достижении указанного адреса появится трассиро-
вочная панель, на которой отобразится состояние памяти и регист-
ров на момент останова. Прервать выполнение программы можно
и не дожидаясь достижения заданного адреса, нажав
CS/Space (Break). В этом режиме программа все равно работает под
«опекой» монитора, а следовательно выполняется медленнее, чем
при «свободном» запуске.

Выход из режима трассировки

Для возврата из режима трассировки в режим ввода команд
нажмите клавишу Edit или Q.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Версии - 3 версии игры: SLY SPY SECRET AGENT.
Reliz - Многие группы любят публиковать потоки сознания со своих пьянок.
От редакции - о новом номере газеты.
СС'99 - интервью: Wolf/Rage (авторы игр Monsterland и Mist).
Новости - Начала свою работу сервисная служба в которой можно заказать различную периферию для Спектрума производства фирмы СКОРПИОН.

В этот день...   21 ноября