![]()
В процессе работы некоторых команд Моп2 (ASCII, TRACE,
DISAS) информация на экран выводится «порциями». В этом слу-
чае, чтобы вывести на экран очередную строку информации нужно
нажать любую клавишу, кроме Enter и Р. Нажатие Enter выводит
сразу несколько строк. Нажатие и удержание любой клавиши
обеспечит постоянный вывод информации. Тем же, у кого не
хватает сил удерживать кнопку в нажатом состоянии, посоветуем
один раз надавить на клавишу Р. При этом вывод информации на
экран будет происходить непрерывно до нажатия любой клавиши.
Вывод прервется также при превышении конечного адреса выпол-
нения команды, заданного соответствующим параметром, или при
нажатии клавиш CS/1 (Edit).![]()
Во время выполнения команд ASCII, EDIT, DISAS и TRACE можно
изменять текущий адрес, то есть изменять «точку приложения» этих
команд. Изменение текущего адреса осуществляется клавишами:CS/7 — уменьшение текущего адреса на единицу;
CS/6 — увеличение текущего адреса на единицу;
CS/5 — уменьшение текущего адреса на 8 (при работе в
шестнадцатеричной системе), на 10 (в десятичной);
CS/8 — увеличение текущего адреса на 8 (при работе в
шестнадцатеричной системе), на 10 (в десятичной);
SS/A — установка текущего адреса.
При вводе комбинации SS/A (в режиме EDIT следует нажимать
SS/A+Enter) в начале текущей строки появляется подсказка А:, в
ответ на которую нужно ввести необходимый адрес и нажать Enter.![]()
По этой команде на экран выводится содержимое ячеек памяти,
начиная с адреса addrl и по адрес adclr2 (рис. 49). В каждой
экранной строке выводятся: адрес первой из 4 или 5 ячеек (в
зависимости от системы счисления, см. команду HEX/DEC), значе-
ния этих ячеек и их символьные эквиваленты. Кодам от 32 (#20)*![]()
до 127 (#7F) соответствуют их ASCII-эквиваленты. Для кодов
меньше 32 (#20) выводятся знаки вопроса. Если код больше
127 (#7F), то он будет представлен ASCII-символом, соответствую-
щим коду со сброшенным старшим битом. Так например, код 161
(#А1), если сбросить его старший бит, превратится в код 33 (#21),
которому соответствует ASCII-символ ! (восклицательный знак).Система счисления, в которой будет отображаться содержимое
ячеек — десятичная или шестнадцатеричная — меняется командой
HEX/DEC (см. ниже).Команду ASCII обычно используют для быстрого просмотра дан-
ных (хотя некоторые умудряются просматривать таким образом и
программы, дизассемблируя их в голове).Во время просмотра памяти клавишами CS/7, CS/6, CS/5, CS/8 и
SS/A можно менять текущий адрес (см. стр. 187).Выход в режим ввода команд происходит при достижении адреса
addr2 или после нажатия клавиши Edit.![]()
При запуске монитора устанавливается десятичная система
счисления для ввода и вывода данных*. При выполнении команды
HEX/DEC монитор переключается на шестнадцатеричную систему.
Для обратного перехода нужно выполнить команду еще раз.К сожалению, нигде не индицируется, в какой системе счисле-
ния в данный момент происходит ввод/вывод. Для определения
текущей системы счисления можно выполнить команду DISAS (см.
ниже), при выполнении которой шестнадцатеричные числа выво-
дятся со значком #.![]()
После запуска монитора для вывода информации используется
весь экран. Однако, часто возникает необходимость ограничить
область вывода (например, если отлаживаемая программа работает
с экраном или сама размещается в экранной области памяти).Команда WIND позволяет задать окно вывода — часть экрана,
куда будет осуществляться вывод информации. Ширина окна рав-
на ширине экрана (32 знакоместа), а номера верхней и нижней
экранных строк, ограничивающих окно, задаются параметрами
у1 и у2.Эта команда только задает размеры и положение окна. За вклю-
чение/выключение окна отвечает команда с тем же названием
WIND, но вызываемая клавишей V (см. след. команду).![]()
Выполнение этой команды с параметром flag = 1 переключает
вывод информации в окно, размеры и расположение которого
заданы командой, вызываемой клавишей W (см. пред. команду).При выполнении команды с параметром flag = 0 окно выключа-
ется, то есть вывод информации будет осуществляться на весь
экран.При отключенном окне вывода команду WIND § можно исполь-
зовать для очистки всего экрана. Выполнение команды WIND 1 при
включенном окне приведет к его очистке.Пример:
В примере мы используем некоторые команды, которые будут
описаны позже, но для понимания сути вполне достаточно взгля-
нуть на рис. 50.Предположим, что в памяти, начиная с адреса 23296 (#5В00),
находится следующая программа, которая выводит на экран кар-
тинку:5В00 LD HL,#9C40 ; с адреса 40000 (#9С40) находится картинка;
5B03 LD DE,#4000 ; 16384 (#4000) - начало экранной области;
5B06 LD ВС, #1800 ; 6912 (#1800) - длина картинки;
5B09 LDIR ; переписываем картинку на экран;5В0В RET ; возвращаемся из процедуры.
Если задать окно вывода, то при отладке программы картинка
пострадает только частично (рис. 50):WIND from 13 to 20 (клавиша W)
WIND 1 (клавиша V)
HEX/DECGOSUB 5BOO (cm. G GOSUB)
TRACE from 5BOO to 5BFF (cm. T TRACE)
FIND from addr
01 .BYTE bytel
MASK maskl
02.BYTE byfe2
MASK mask2NN.BYTE byteN
MASK maskN
addr — адрес начала поиска
byteN — N-и байт искомой последовательности
maskN — маска N-ro байта искомой последовательности
0(#0000) <; ector<;65535(#FFFF)
0(#00)<>(byteN; m#sM)<255(#FF)
По этой команде в памяти, начиная с адреса addr, осуществляет-
ся поиск последовательности байт bytel, byte2.....byteN. Для каждо-
го байта последовательности можно задать байт-маску — maskl,
mask2, ..., maskN. Значения битов, указанных в маске, при поиске
заданного байта будут игнорироваться. Допустим, мы задали поиск
байта #00 (двоичное представление байта — %00000000) и ввели
для него маску #03 (%00000011). Тогда Моп2 будет искать все
байты, в которых биты 2...7 сброшены, а 0-й и 1-й — любые
(установлены или сброшены), то есть будет «объявлен розыск»
байтов #00, #01, #02 и #03. Если вы не хотите вводить маску, то
на запрос MASK отвечайте нажатием Enter.Если при вводе последовательности на запрос очередного байта
BYTE вы, ничего не набирая, нажмете Enter, это будет сигналом к
началу поиска последовательности. В случае нахождения искомой
последовательности адрес ее начала выводится на экран, и при
нажатии Enter поиск продолжается со следующего адреса до тех
пор, пока не будет нажата клавиша Edit.Пример:
Допустим, мы хотим найти все команды типа SET N,(IY+ZZ), где
N — номер бита, a ZZ — смещение. Коды этих команд можно
описать такой «формулой»:#FD#CB#ZZ#NN
-где ZZ — любое число от 0 до 255, а NN может принимать
значения С6, СЕ, D6, DE, Е6, ЕЕ, F6, FE (см. [1], «Таблица сим-
волов»).Теперь зададим для поиска код, например, #FD#CB#02#C6
(команда SET 05,(IY+02)), но замаскируем в нем байты #02 и #С6
масками #FF и #7Е соответственно (рис. 51). Это как раз и
позволит найти все последовательности (команды типа SET N,
(IY+ZZ)), заданные «формулой».![]()
6 этом режиме в начале каждой экранной строки выводится
адрес addrl, через пробелы — содержимое ячейки памяти и ASCII-
эквивалент (см. команду ASCII). Затем следует тире, после которого
вы должны ввести новое значение ячейки. Возможны три варианта
действий:• вы вводите непосредственно новое значение, нажимаете Enter,
после чего автоматически переходите к редактированию сле-
дующей ячейки;• вы сразу нажимаете Enter. В этом случае в текущую ячейку
записывается ноль и вы автоматически переходите к редакти-
рованию следующей;• вы вводите кавычки ("), после которых набираете один или
несколько ASCII-символов. Закрывающую кавычку вводить
не следует. После нажатия Enter символ или строка будут
размещены в памяти, а текущий адрес редактирования увели-
чится на количество введенных символов.В режиме EDIT можно менять текущий адрес клавишами CS/7,
CS/6, CS/5, CS/8. В отличие от других режимов прямая установка
текущего адреса производится нажатием комбинации клавиш
SS/A+Enter (см. стр. 187).Пример работы в режиме EDIT приведен на рис. 52.
Выход в режим ввода команд происходит при нажатии клавиши
Edit (CS/1).![]()
По этой команде во все ячейки памяти с адреса addrl по addr2
записывается байт byfe. Команда FILL, введенная без параметра
byte, по умолчанию заполняет заданную область нулями. Будьте
осторожны: выполнение команды FILL без параметров или только с
одним параметром зачастую приводит к непредсказуемым по-
следствиям.![]()
По этой команде содержимое ячеек памяти с адреса addrl по
addr2 копируется в область памяти, начиная с адреса addr3
(рис. 53). Допускается копирование с перекрытием исходного бло-
ка, то есть копия блока может располагаться поверх оригинала.Команду MOVE обычно применяют для копирования таблиц,
текстов и прочих данных. Для копирования программ лучше ис-
пользовать команду RELOC (см. ниже).>DISRS from 2024 to 22RR
defb гго»
2024. CALL «21F2
2027 RET NC
2028 CRLL 82070
202B RET NC
202C CRLL 824-ГВ
202F CRLL. R1FC3
2032 BIT «06, ( IY+»01)> MOUE from 2024. to 22RR to C350
>DISAS from C350 to FFFF
DEFB from
C350 CRLL t*21F2
C3B3 RET NC
C354. CRLL «2070
C3S7 RET NC
C388 CRLL «24FB
C35B CRLL «1FC3
C35E BIT «06, (IY+»01)
C362 CRLL Z,tt2BFl
Рис. 53. Команде MOVE.



