|
Amazing
#02
14 июля 1998 |
|
Ассемблер - Совместное использование ZX ASM 3.0 и STS 5.1.

(c) Иван Рощин, г.Москва, 1997.
Music by Ironman
Совместное использование
ZX ASM 3.0 и STS 5.1.
Наверняка каждому программисту известен
монитор - отладчик STS. Особенно удобно
применять этот монитор вместе с ассембле-
ром: набираешь текст программы, ассембли-
руешь ее, а затем с помощью STS проверяешь
ее работу. Начиная с версии 4.1 в этом мо-
ниторе появилась поистине бесценная воз-
можность интерактивной отладки программы с
выводом меток по соответствующим им адре-
сам. Проблема в том, что не каждый может
ей воспользоваться. Действительно, в вер-
сии 4.1 процедура вывода меток рассчитана
только на ассемблер "MASM 1.1" и ни с ка-
ким другим ассемблером работать не будет.
Аналогично, следующие версии поддерживают
лишь ассемблер "ALASM". А как же быть
пользователям других ассемблеров? Поста-
раюсь дать решение этой проблемы для поль-
зователей "ZX ASM 3.0".
WARNING! Все нижесказанное
относится ТОЛЬКО к STS 5.1!
Для преобразования STS 5.1 необходимо
выполнить следующее:
1) Убедиться, что на диске присутствуют
файлы "STS5.1" (этот файл также может на-
зываться "STS5.1AL", "STS5.1XX" и т.п.),
"sts5.1a","sts5.1b".
2) Запустить файл
"STS5.1".
3) Нажать клавишу "U". Адрес в верхней
части экрана должен стать равным #FE2A.
4) С адреса #FE30 ввести программу:
#FE30: PUSH HL
PUSH DE
PUSH BC
LD HL,#FE46
LD DE,#57E0
LD BC,#001C
LDIR
POP BC
POP DE
POP HL
AND #18
OR #06
RET
CALL #57EF
EX DE,HL
LD BC,#FFF9
ADD HL,BC
LD A,(HL)
INC HL
OR (HL)
INC HL
INC HL
LD A,H
RET
DEC DE
DEC DE
DEC DE
LD A,(DE)
RLCA
JR C,#FE5F
AND A
JR NZ,#FE57
INC DE
XOR A
RET
Для контроля привожу содержимое
этой области памяти:
#FE30: #E5,#D5,#C5,#21,#46,#FE,#11,#E0
#FE38: #57,#01,#1C,#00,#ED,#B0,#C1,#D1
#FE40: #E1,#E6,#18,#F6,#06,#C9,#CD,#EF
#FE48: #57,#EB,#01,#F9,#FF,#09,#7E,#23
#FE50: #B6,#23,#23,#7C,#C9,#1B,#1B,#1B
#FE58: #1A,#07,#38,#03,#A7,#20,#F8,#13
#FE60: #AF,#C9
5) С адреса #FE71 ввести программу:
#FE71: PUSH HL
PUSH BC
LD (#FECC),BC
LD HL,#FEC4
CALL #E354
LD HL,#FFFC
EXX
PUSH DE
LD HL,(#E33B)
LD A,L
CALL #FE30
LD L,A
LD BC,#7FFD
CALL #E33D
EX AF,AF'
CALL #E348
POP DE
EXX
POP BC
POP HL
EX AF,AF'
JR NZ,#FE6E
LD A,(#FADD)
AND A
CALL Z,#FB1C
LD B,#0A
LD A,(#E33B)
LD C,A
AND #18
OR #06
LD (#E33B),A
CALL #E590
NOP
AND #7F
CP #21
JR C,#FEBF
CALL #FB49
DJNZ #FEAF
NOP
LD A,C
LD (#E33B),A
RET
OUT (C),L
EXX
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD HL,#8015
AND A
SBC HL,BC
CALL Z,#57EF
JR Z,#FEE0
CALL #57E0
JR Z,#FEDF
CP #BF
JR NZ,#FEC7
AND A
EXX
OUT (C),H
RET
Для контроля привожу содержимое этой
области памяти:
#FE71: #E5,#C5,#ED,#43,#CC,#FE,#21,#C4
#FE79: #FE,#CD,#54,#E3,#21,#FC,#FF,#D9
#FE81: #D5,#2A,#3B,#E3,#7D,#CD,#30,#FE
#FE89: #6F,#01,#FD,#7F,#CD,#3D,#E3,#08
#FE91: #CD,#48,#E3,#D1,#D9,#C1,#E1,#08
#FE99: #20,#D3,#3A,#DD,#FA,#A7,#CC,#1C
#FEA1: #FB,#06,#0A,#3A,#3B,#E3,#4F,#E6
#FEA9: #18,#F6,#06,#32,#3B,#E3,#CD,#90
#FEB1: #E5,#00,#E6,#7F,#FE,#21,#38,#06
#FEB9: #CD,#49,#FB,#10,#F1,#00,#79,#32
#FEC1: #3B,#E3,#C9,#ED,#69,#D9,#4E,#23
#FEC9: #46,#EB,#21,#15,#80,#A7,#ED,#42
#FED1: #CC,#EF,#57,#28,#0A,#CD,#E0,#57
#FED9: #28,#04,#FE,#BF,#20,#E8,#A7,#D9
#FEE1: #ED,#61,#C9
6) С помощью клавиши "B" установите
Bank=#18.
7) Нажмите клавишу "E". Появится меню
"Setup".
8) Выбрав пункт меню "Config Save", запи-
шите измененный STS на диск.
Для проверки правильности внесенных из-
менений запустите ZX ASM 3.0, в меню Setup
выберите пункт "Load sts" и укажите имя
файла "sts5.1a". Далее наберите какую-
нибудь программу и отассемблируйте ее. За-
тем временно выйдите в STS и включите ре-
жим дизассемблирования с метками (с по-
мощью комбинации клавиш "SS+ 5"). Вместо
чисел Вы увидите соответствующие метки.
Немного системной информации о ZX ASM:
текст и метки находятся в одной странице
памяти (Bank=#1E), таблица меток органи-
зуется по принципу стека и начинается с
конца буфера. Каждая определенная в прог-
рамме метка занимает в этой таблице 5 +
<число букв имени> байт. STS при
дизассемблировании анализирует эту об-
ласть, и если значение метки и адреса или
числа в команде совпадают, то печатает
метку, иначе - число. Если в области нахо-
дится какая-то ерунда, ничего страшного не
произойдет, и компьютер не зависнет и не
сбросится. Дизассемблирование с метками
работает медленнее, чем обычное. Если в
Вашей программе используется не очень мно-
го меток, Вы почти не почувствуете разницу
в быстродействии. Но если меток этого, вы-
вод дизассемблированного текста может за-
медлиться в 4- 5 раз. Процедура дизас-
семблирования с метками для ZX ASM 3.0 по-
лучилась более длинной по сравнению с про-
цедурами для MASM 1.1 и ALASM, и в резуль-
тате этого она заняла большую часть буфера
функции пользователя. Для этой функции ос-
талось лишь 6 байтов с FE2A по #FE2F
включительно. если Ваша функция не уме-
щается в эту область, Вы можете сделать
одно из двух:
1) Пожертвовать режимом дизассемблирования
с метками, записав по адресу #FE71 команду
JP #F86A. В этом случае можете использо-
вать для функции пользователя память с
#FE2A до #FE5B и с #FE74 по #FEE3 включи-
тельно (а это 162 байта).
2)ВПоместитьВпоВадресу #FE2A команду 3
XXXX, а уже с адреса XXXX разместить вашу
функцию.
Нужно отметить, что при работе режима
дизассемблирования с метками портится 28
байт в экранной области, начиная с адреса
#57E0 (причем Вы сами можете изменять эти
28 байт как хотите - это не помешает нор-
мальной работе STS). При загрузке ZX ASM'а
STS будет загружен автоматически, но не
весь, а только его главная часть (файл
sts5.1a). Поэтому во время работы будут
недоступны функции "Disasm to Disk" и
"Setup", т.е. при попытке их вызова STS
сбросится. Так что лучше не нажимать кла-
виши "D" и "E". Для экономии дискового
пространства можно стереть файлы
"STS5.1<B>" и "sts5.1b<C>", если Вы не бу-
дете запускать STS отдельно от ZX ASMа. Не
забывайте, что недокументированные команды
для работы с половинками индексных ре-
гистров по-разному обозначаются в тексте
программы на ассемблере ZX ASM
(XL,XH,YL,YH) и при просмотре дизассембли-
рованной программы в STS (LX,HX,LY,HY).
──────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 17 ноября