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). ──────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября