Системные программы для «ZX-Spectrum» 1992 г.

Mons-4 - замечание по использованию точек останова. Рабочий пример. Модификация памяти.


ЗАМЕЧАНИЯ ПО ИСПОЛЬЗОВАНИЮ ТОЧЕК ОСТАНОВА:

Когда встречается точка останова, MONS4 будет выдавать звуковой сигнал и
ожидать вашего нажатия клавиши перед возвратом к ФП MONS4 использует
область в конце самого себя, которая первоначально содержит перемещаемые
адреса для сохранения информации о точках останова. Это означает, что вы
можете установить столько точек останова, сколько позволит память. Каждая точка
останова требует 5 байтов памяти. Когда останов произошел, MONS4
автоматически восстанавливает значения памяти, которые существовали до этой
точки останова.

Отметим, что команда <Т> использует эту область, поэтому при работе
команды <Т> все точки останова потеряются. Точки останова могут быть
установлены только в ОЗУ. Т.к. точка останова состоит из трехбайтовой
инструкции, то в определенных случаях необходимо проявить
предусмотрительность, например:

ПРЕДПОЛАГАЕМЫЙ КОД:

8000 3E 8008 00

8001 01 8009 00

8002 18 800А 06

8003 06 800В 02

>8004 AF< >800С 18

8005 0Е 800D F7

8006 FF 800Е 06

8007 01 800F 44

Если вы установили точку останова по #8004 и затем начали выполнение с
ячейки #8000, то регистр А будет загружен значением 1, выполнение
переместится на #800А, регистр В загрузится значением 2 и выполнение
переместится на #8005. Но в #8005 помещается младший байт вызова точки
останова и, таким образом, мы испортим код и появятся непредсказуемые
результаты. Эта ситуация нетипична, но вы должны оградить себя от нее — в этом
случае единственный выход — использовать пошаговый проход (см. команду "_Z"
ниже с подробным описанием пошагового прохода).

• 24. <Х>

Используется для обновления МР по назначению абсолютного вызова
подпрограммы или по инструкции JP.<X> берет 16-разрядный адрес,
определяемый байтом, на который указывает МР, и байтом МР +1, и затем
обновляет отображение памяти на экране таким образом, что отображаются
адреса, близлежащие к данному адресу. Помните, что младшая половина адреса
определяется первым байтом, а старшая вторым (формат INTEL).

Например:

Вы хотите посмотреть подпрограмму, которая вызывается кодом CD0563.
Установите МР (используя <М>) так, что он адресует к коду 05 внутри инструкции
вызова и нажмите <Х>. Отображение памяти будет обновлено и отобразятся
ячейки с адресами, близкими к #6305 (см. также команду <V>).

• 25. <Y>

Ввод ASCII. <Y> дает вам новую строку, которую вы можете ввести символами
ASCII прямо с клавиатуры. Эти символы попадают на эхо-печать и их 16-ричное
эквиваленты вводятся в память, начиная с текущего значения МР. Строка символов
должна заканчиваться <EDIT>. <DELETE> (<CAPS SHIFT> 0) может быть
использована для удаления символов из строки.

Когда вы закончите ввод символов ASCII (и введете <EDIT>), то экран
обновится и МР спозиционируется на конец строки, введенной в память.

• 26. <SYMBOL SHIFT> Z

Перед использованием "_Z" (или "_т") PC должен быть установлен на адрес
инструкции, которую вы хотите выполнить.

"_Z" просто выполняет текущую инструкцию и обновляет ФП, чтобы
отобразить изменения, вызванные выполнением данной инструкции.

Отметим, что пошаговый режим возможен в любом месте карты памяти (и в
ОЗУ, и в ПЗУ), но невозможен во внешнем ПЗУ. Далее следует расширенный
пример, который пояснит действие многих команд отладчика MONS4. Вы должны
их внимательно изучить и постараться выполнить самостоятельно.

РАБОЧИЙ ПРИМЕР:

Давайте предположим, что у нас в машине есть 3 секции кода, приведенного
ниже. Первая секция — программа, которая загружает HL и DE числами и затем
вызывает подпрограмму для их перемножения (вторая секция) с результатом в HL
и затем дважды вызывает подпрограмму для вывода результатов умножения на
экран (3-я секция).
Текст секций:

7080 2А0072 LD HL,(#7200)

7083 ED5B0272 LD DE,(7202)

7087 CD0071 CALL MULT

708A 7C LD A,H

7 0 8B CD1D71 CALL AOUT

708E 7D LD A,L

7 0 8F CD1D71 CALL AOUT

7092 210000 LD HL,0

7100 AF MULT XOR A

7101 ED52 SWC HL,DE

7103 19 ADD HL,DE

7104 3001 JR NC,MUI
710 6 EB EX DE,HL

7107 B2 MUI OR D

7108 37 SCF

7109 C0 RET NZ
710A B3 OR E
710В 5А LD E,ED
710C 2007 JR NZ,MU4
710E EB EX DE,HL
710F C9 RET

7110 EB MU2 EX DE,HL

7111 19 ADD HL,DE

7112 EB EX DE,HL

7113 2 9 MU3 ADD HL,HL

7114 DB RET С

7115 1F MU4 RRA

7116 30FB JR NC,MU3

7118 B7 OR A

7119 20F5 JR NZ,MU2
711B 19 ADD HL,DE
711C C9 RET

711D F5 AOUT PUSH AF

711E 0F RRCA

711F 0F RRCA

712 0 0F RRCA

7121 0F RRCA

7122 CD671 CALL NIBBLE
7125 F1 POP AF

7126 E60F NIBBLE AND %1111

7128 C69 0 ADD A,#90

712A 2 7 DAA

712В СЕ40 ADC A,#40

712D 2 7 DAA

712E FD213A5C LD IY,#5C3A

7132 D7 RST #10

7133 C9 RET

7200 1В2А DEFW 10779

7202 033A DEFW 3

Теперь мы хотим исследовать вышеприведенный код. Сделаем это со
следующим набором команд. Отметим, что пошаговый режим — это просто один
из способов, он не достаточно эффективен, но весьма иллюстративен:

М: 7 080 <ENTER> установить МР на #7 080
7080 установить PC на #7080

_Z простой шаг

_Z простой шаг

_Z простой шаг

следует вызов CALL
М:7115 <ENTER> пропуск предподготовки чисел
W установка точки останова

_К продолжить с #7100 до останова

_Z простой шаг

_Z простой шаг

_Z простой шаг

_Z простой шаг

_Z простой шаг

_Z простой шаг

_Z возврат из подпрограммы умножения

_Z простой шаг

_Z следует вызов CALL

М:7128 <ENTER> установка МР на нужный байт

W установка точки останова

_К продолжить с #71ID до останова

_Z простой шаг

_Z простой шаг

_Z простой шаг

_Z простой шаг

, просмотр адреса возврата

W установка там точки останова

_К продолжение

_Z

W
_K
_Z

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

• 27. <SYMBOL SHIFT> P

Эта команда аналогична LIST, но вывод вместо экрана идет на принтер.
Помните, что в конце страницы вы нажимаете <EDIT> для возврата к ФП или
любую другую клавишу для получения другой страницы.

• 28. МОДИФИКАЦИЯ ПАМЯТИ.

Значения ячеек по адресам, которые дает МР, могут быть модифицированы
вводом 16-ричного числа, за которым следует ограничитель (см. раздел 1).Две
последние 16-ричные цифры (если одна, то она дополняется нулем) вводятся в
ячейку, на которую указывает МР, и затем команда (если она есть), определенная
ограничителем, выполняется. Если ограничивается незначащая команда, то она
игнорируется.
Например:
F2 <ENTER>

#F2 вводится и МР:=МР+1
123 <CAPS SHIFT> 8

#23 вводится и МР:=МР+1
ЕМ:Е0 0_

#E0 вводится в текущую
ячейку и затем МР:=#Е0.
Пробел ограничивает
Команду "М".
8C0 #8C вводится и MP обновляется

(т.к. использована Команда "О"
для назначения относительного
смещения #8C
2A5D #5D вводится и МР не меняется,

т.к. ограничитель пробел, а не команда.
Если 16-ричное число в ответ на подсказку и ограничивается точкой, то
введенное число будет занесено в текущий регистр Z80, адресуемый стрелкой.

На входе MONS4 стрелка ">" указывает на PC, и использование ".", как
ограничителя 16-ричного числа, будет модифицировать PC. Если вы хотите
изменить другие регистры, то используйте точку саму, а не как ограничитель числа.
Указатель ">" будет циклически указывать регистры от PC до AF. Отметим, что
невозможно адресовать и изменять SP или IY регистры.
Например:

Предположим, что ">" первоначально указывает на PC:

. указывает на IY
. указывает на IX
0. устанавливает IX в 0
. указывает на HL
123. HL:=#123
. указывает на DE
. указывает на ВС
Е2А7 ВС:=#Е2А7
. указывает на AF

FF0 0. AF: = #FF и сбрасывает все флаги
. указывает на PC
8000. РС:=#80 0 0

Отметим, что точка также может использоваться для модификации адреса
альтернативного набора регистров, если он отображается. Используйте команду
"Q" для переключения набора регистров.

ПРИМЕР ОТОБРАЖЕНИЯ ФРОНТАЛЬНОЙ ПАНЕЛИ

710С 2007 JR NZ,#7115
>РС 710C 20 07 ЕВ С9 ЕВ 19 ЕВ
SP D0AF 8A 70 06 03 0А 03 0D
IY CF6A 0D 11 0С OF 09 18 18
IX D09F 04 03 04 00 00 00 1В
HL 2A1B DF FE 29 28 02 CF 02
DE 0000 F3 AF 11 FF FF C3 CB
DC 0004 FF C3 CB 11 2A 5D 5C
AF 0304 >
IR 3F7C ON

7100 AF 7108 37 7110 EB

7101 ED 7109 C0 7111 19

7102 52 710A B3 7112 EB

7103 19 710В 5А 7113 29

7104 30 >710C 2 0< 7114 D8

7105 01 710D 07 7115 1F

7106 EB 710F C9 7117 FB

7107 B2 710F C9 7117 FB

>

Выше показано типичное изображение ФП (одно из изображений, полученных
при пошаговом проходе по п/п MULT при примере использования команды Z).

Первые 9 строк изображения содержат 9 регистров, сначала — имя регистра
(от PC до IR), затем — значения содержимого регистров, и затем (для РС...ВС) —
содержимое 7 ячеек памяти, начиная с адреса, находящегося в регистре.

Регистр флагов декодируется, чтобы показать текущие значения битов флагов,
установленных так, как они используются внутри регистра. Если регистр флагов
установлен в #FF, то за отображением имени AF будет следовать:

0 0FF CZ H UNS

Т.е. знак, ноль, полуноситель, паритет/переполнение, сложить/вычесть и будут
установлены все флаги носителей. Справа от регистров IR находятся слова ON или
OFF, которые показывают текущее состояние внешних прерываний. Указатель
регистров ">" указывает на регистр, который адресуется в данный момент (см.
раздел 2). 24 байта памяти отображаются ниже отображения регистров.
Отображение состоит из адреса (2 байта,4 символа), за которым следует значение
(1 байт, 2 символа) памяти по этому адресу. Отображение размещено вокруг
текущего значения МР, указываемого ">". Команды вводятся вверху экрана в ответ
на подсказку ">". Отображение обновляется после каждой отработанной команды.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Поймай мелодию - Список радиостанций с указанной частотой транслирования.
Этюды - Процедура печати чисел.
AD&D - Значение способностей.
Кошмар наяву - Кошмар наяву, или сон приходит с утром.
Горячая линия - Внимание! Изменились наши адреса!

В этот день...   3 мая