1.2. Замечания по использованию точек останова:
........ •
Когда встречается точка останова, MONS4 будет выдавать зву-
ковой сигнал и ожидать вашего нажатия клавиши перед возвратом к
Ф.П. MONS4 использует область в конце самого себя, которая перво-
начально содержит перемещаемые адреса для сохранения информа-
ции о точках останова. Это означает, что вы можете установить
столько точек останова, сколько позволит память. Каждая точка
останова требует 5 байтов памяти. Когда останов произошел, MONS4
автоматически восстанавливает значения памяти, которые сущест-
вовали до этой точки останова.
Отметим, что команда <Т> использует эту область, поэтому при
работе команды <Т> все точки останова потеряются. Точки останова
могут быть установлены только в ОЗУ. Так как точка останова состо-
ит из трехбайтовой инструкции, то в определенных случаях необхо-
димо проявить предусмотрительность.
Например:
Предполагаемый код:
8000 |
ЗЕ |
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. <Х>
Используется для обновления MP по назначению абсолютного
вызова подпрограммы или по инструкции JP. <Х> берет 16-разряд-
ный адрес, определяемый байтом, на который указывает MP, и бай-
том МР+1, и затем обновляет отображение памяти на экране таким
образом, что отображаются адреса, близлежащие к данному адресу.
Помните, что младшая половина адреса определяется первым бай-
том, а старшая вторым (формат INTEL).
Например:
Вы хотите посмотреть подпрограмму, которая вызывается кодом
CD0563. Установите MP (используя <М>) так, что он адресует к коду
05 внутри инструкции вызова и нажмите <Х>. Отображение памяти
будет обновлено и отобразятся ячейки с адресами, близкими к #6305
(см. Также команду <V>).
25. <Y>
Ввод ASCII. <Y> дает вам новую строку, которую вы можете
ввести символами ASCII прямо с клавиатуры. Эти символы попадают
на эхо-печать и их 16-ричное эквиваленты вводятся в память, начи-
ная с текущего значения MP. Строка символов должна заканчиваться
<EDIT>. <DELETE> «CAPS SHIFT> О) может быть использована
для удаления символов из строки.
Когда вы закончите ввод символов ASCII (и введете <EDIT>), то
экран обновится и MP спозиционируется на конец строки, введенной
в память.
26. <SYMBOL SHIFT> Z
Перед использованием "Z" (или "Т") PC должен быть установ-
лен на адрес инструкции, которую вы хотите выполнить.
"Z" просто выполняет текущую инструкцию и обновляет Ф.П.,
чтобы отобразить изменения, вызванные выполнением данной инст-
рукции.
Отметим, что пошаговый режим возможен в любом месте карты
памяти (и в ОЗУ, и в ПЗУ), но невозможен во внешнем ПЗУ. Далее
следует расширенный пример, который пояснит действие многих
команд отладчика M0NS4. Вы должны их внимательно изучить и
постараться выполнить самостоятельно.
Рабочий пример:
Давайте предположим, что у нас в машине есть 3 секции кода,
приведенного ниже. Первая секция - программа, которая загружает
HL и DE числами и затем вызывает подпрограмму для их перемно-
жения (вторая секция) с результатом в HL и затем дважды вызывает
подпрограмму для вывода результатов умножения на экран (3-я сек-
ция) . Текст секций:
7080 2А0072 LD HL, (#7200)
7083 ED5B0272 LD DE, (#7202)
7087 CD0071 CALL MULT
708А 1С LD А, Н
708В CD1D71 CALL AOUT
708Е 7D LD A, L
708F 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, MU1
7106 EB EX DE,HL
7107 B2 MU1 ORD
7108 37 SCF
7109 CO RET NZ
710A B3 OR E
710B 5A LD E,ED
710C 2007 JR NZ, MU4
710E EB EX DE, HL
710F C9 RET
7110 EB MU2 EXDE, HL
7111 19 ADD HL, DE
7112 EB EX DE,HL
7113 29 MU3 ADDHL, HL
7114 DB RET С
7115 IF MU4 RRA
7116 30FB JR NC,MU3
7118 B7 OR A
7119 20F5 JR NZ, MU2
71 IB 19 ADD HL, DE
711С C9 RET
71 ID F5 AOUT PUSH AF
71 IE OF RRCA
71 IF OF RRCA
7120 OF RRCA
7121 OF RRCA
7122 CD671 CALL NIBBLE
7125 F1 POP AF
7126 E60F NIBBLE AND % 1111
7128 c690 ADD A, #90
712A 27 DAA
712В CE40 ADC A, #40
712D 27 DAA
712E FD213A5C LD IY, #5C3A
7132 D7 RST #10
7133 C9 RET
7200 1B2A DEFW 10779
7202 033A DEFW 3
Теперь мы хотим исследовать вышеприведенный код.
Сделаем это со следующим набором команд. Отметим, что по-
шаговый режим - это просто один из способов, он недостаточно эф-
фективен, но весьма иллюстративен:
М: 7080 <ENTER> установить MP на #7080
7080 установить PC на #7080
Z простой шаг
Z простой шаг
Z простой шаг
Следует вызов CALL
М: 7115 <ENTER> пропуск предподготовки чисел
W установка точки останова
К продолжить с #7100 до останова
Z простой шаг
Z простой шаг
Z простой шаг
Z простой шаг
Z простой шаг
Z простой шаг
Z возврат из подпрограммы умножения
Z простой шаг
Z следует вызов CALL
М: 7128 <ENTER> установка MP на нужный байт
W установка точки останова
К продолжить с #711D до останова
Z простой шаг
Z простой шаг
Z простой шаг
Z простой шаг
, просмотр адреса возврата
W установка там точки останова
К продолжение
Z
W
к
Z
т
Пожалуйста, проработайте этот пример. Сначала введите код
подпрограммы (см. Модификация памяти) - можно использовать
GENS4, и затем выполните команды, приведенные выше. Вы высоко
оцените пример в качестве иллюстрации того, как пройти по про-
грамме.
27. <SYMBOL SHIFT> Р
Эта команда аналогична LIST, но вывод вместо экрана идет на
принтер. Помните, что в конце страницы вы нажимаете <EDIT> для
возврата к Ф.П. Или любую другую клавишу для получения другой
страницы.
28. Модификация памяти
Значения ячеек по адресам, которые дает MP, могут быть моди-
фицированы вводом 16-ричного числа, за которым следует ограничи-
тель (см. п.1). Две последние 16-ричные цифры (если одна, то она
дополняется нулем) вводятся в ячейку, на которую указывает MP, и
затем команда (если она есть), определенная ограничителем, выпол-
няется. Если ограничивается незначащая команда, то она игнориру-
ется.
Например:
F2 <ENTER> #F2 вводится и МР:=МР+1
123 APS SHIFT 8 #23 вводится и МР:=МР+1
ЕМ:Е00- #Е0 вводится в текущую ячейку и затем МР:=#Е0.
Пробел ограничивает команду "М"
8С0 #8С вводится и MP обновляется (т.к. использована команда
"0м для назначения относительного смещения #8С)
2A5D- #5D вводится и MP не меняется, т.к. ограничитель про-
бел, а не команда.
Если 16-ричное число вводится в ответ на подсказку и ограни-
чивается точкой, то введенное число будет занесено в текущий ре-
гистр Z80, адресуемый стрелкой.
На входе M0NS4 стрелка м>" указывает на PC, и использование
".", как ограничителя 16-ричного числа, будет модифицировать PC.
Если вы хотите изменить другие регистры, то используйте точку
саму, а не как ограничитель числа. Указатель ">" будет циклически
указывать регистры от PC до AF. Отметим, что невозможно адресо-
вать и изменять SP или IY регистры.
Например:
Предположим, что ">" первоначально указывает на PC:
Указывает на IY
Указывает на IX
0. Устанавливает IX в 0
Указывает на HL
123. HL:=#123
Указывает на DE
Указывает на ВС
Е2А7. ВС:=#Е2А7
Указывает на AF
FF00. AF:=#FF и сбрасывает все флаги
Указывает на PC
8000. РС:=#8000
Отметим, что точка также может использоваться для модифи-
кации адреса альтернативного набора регистров, если он отобража-
ется. Используйте команду "Q" для переключения набора регистров.
Пример отображения фронтальной панели
710С 2007 >РС710С 20 SP DOAF АС |
JR 07 70 |
NZ, ЕВ 06 |
#71
С9
03 |
15 ЕВ OA |
19 03 |
ЕВ 0D |
IYCF6A |
0D |
И |
ОС |
0F |
09 |
18 |
18 |
IX D09F |
04 |
03 |
04 |
|
00 |
00 |
00 |
IB |
HL2A1B |
DF |
FE |
29 |
|
28 |
02 |
CF |
02 |
DE0000 |
F3 |
AF |
11 |
|
FF |
FF |
СЗ |
СВ |
ВС 0004 |
FF |
СЗ |
СВ |
11 |
2А |
5D |
5C |
AF0304 |
> |
|
|
|
|
|
|
|
IR 3F7CON |
|
|
|
|
|
|
|
7100 |
AF |
7108 |
|
37 |
|
7110 |
|
ЕВ |
7101 |
ED |
7109 |
|
СО |
|
7111 |
|
19 |
7102 |
52 |
710А |
|
ВЗ |
|
7112 |
|
ЕВ |
7103 |
19 |
710В |
|
5А |
|
7113 |
|
29 |
7104 |
30 |
>7 ЮС |
|
20< |
7114 |
|
D8 |
7105 |
01 |
710D |
|
07 |
|
7115 |
|
IF |
7106 |
ЕВ |
710F |
|
С9 |
|
7117 |
|
FB |
7107 |
В2 |
710F |
|
С9 |
|
7117 |
|
FB |
Выше показано типичное изображение Ф.П. (Одно из изобра-
жений, полученных при пошаговом проходе по п/п MULT примере
использования команды Z).
Первые 9 строк изображения содержат 9 регистров, сначала -
имя регистра (от PC до IR), затем (для PC...ВС) значения содержи-
мого регистров, и затем - содержимое 7 ячеек памяти, начиная с
адреса, находящегося в регистре.
Регистр флагов декодируется, чтобы показать текущие значе-
ния битов флагов, установленных так, как они используются внутри
регистра. Если регистр флагов установлен в #FF, то за отображением
имени AF будет следовать:
OOFF CZ Н UNS
Т.е. знак, ноль, полуноситель, паритет/переполнение, сло-
жить/вычесть и будут установлены все флаги носителей. Справа от
регистров IR находятся слова ON или OFF, которые показывают
текущее состояние внешних прерываний. Указатель регистров ">"
указывает на регистр, который адресуется в данный момент (см.
Раздел 2).
24 байта памяти отображаются ниже отображения регистров.
Отображение состоит из адреса (2 байта, 4 символа), за которым
следует значение (1 байт, 2 символа) памяти по этому адресу. Ото-
бражение размещено вокруг текущего значения MP указываемого
м х» t
Команды вводятся вверху экрана в ответ на подсказку ">".
Отображение обновляется после каждой отработанной коман-
ды.