|
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).
──────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 1 января
SibNews #08,
Woot! #01,
Spectrum Magazine #01,
ACNews #25,
Psychoz #14,
ACNews #14,
Last 128 #08,
Last 128 #06,
Last 128 #05,
Last 128 #04,
Last 128 #03,
Last 128 #02,
Last 128 #09,
Last 128 #3.5,
Last 128 #8.025,
Sinclair Club #05,
Last 128 #M!R 01,
Fantadrom #01,
Buzz #20,
Last 128 #01,
DonNews #13,
Nicron #120,
Promised Land #01,
Inferno #01,
Marazm #25,
Ultimathum #01,
Marazm #21,
Hooy Mag #02,
KrNews #11,
Marazm #22,
Marazm #23,
ZX Football 2000 #01,
Codemania #01,
Always #03,
Bugs #02,
IzhNews #08,
Virtual Worlds #01,
Listok #04,
Scenergy #02,
Flash Info #18,
Marazm #16,
Marazm #17,
Zed #01,
Balagan #02,
ZX Format #08,
ZX Power #03,
Shock #01,
Impulse #02,
Deja Vu #03,
ZX Club #08,
ZX Club #06,
Numberology #01,
Marazm #13,
Marazm #12,
Marazm #14,
Gorodok #02,
Zodiac #01,
Marazm #15,
Deja Vu #07,
Marazm #11,
Deja Vu #07,
Playboy #03,
Crazy News #2,
Crazy News #4,
ZX Light #01,
Crazy News #5,
Playboy #02,
ZX News #03,
ZX Review #1-2,
Read Me #02,
Crazy News #3,
Nicron #13,
Read Me #01,
Public Spirit #01,
Faultless #06,
Faultless #05,
ZX Software #01,
Stump #04,
Speccy #07,
Возраждение #0,
Speccy #03,
On-Line #17,
Scene+ #01,
Welcome Press #01,
ZX Konig #04,
Adventurer #01,
Faultless #05,
Faultless #04,
Di Halt #01,
Faultless #01,
Playboy #01,
Crazy News #1,
Faultless #03,
Pioneer #03,
Sinclair Town #02,
ZX Magazine #01,
Eldorado #01,
ZX Magazine #02,
Spectron #01,
ZX News #01,
ZX Konig #02,
200 #W,
Welcome Press #00,
Dune #07,
Subliminal Extacy #01,
Subliminal Extacy #02,
ZX Konig #01,
Subliminal Extacy #00,
Muchomor #01,
Spectrofon #01,
ZX Revija #02,
Outlet #01,
Outlet #1-3