ZX Review
#7-8-9-10
08 ноября 1997 |
|
Программы, которые мы выбираем - Несколько предложений по усовершенствованию ассемблера.
(c) Иван Рощин, г.Москва, 1997 Несколько предложений по усовершенствованию ассемблера 1. Если ассемблер обеспечивает работу с блоками текста, в нем есть команда "удалить вы- деленный блок из текста". Но иногда бывает необходима про- тивоположная команда - уда- лить весь текст, кроме выде- ленного блока. 2. Возможность превратить выде- ленный блок текста в коммен- тарий и наоборот. Пример ────── LD A,1 ;LD A,1 LD B,2 <----> ;LD B,2 CALL M1 ;CALL M1 CALL M2 ;CALL M2 Разумеется, того же результа- та можно добиться при исполь- зовании директив условного ассемблирования, но предлага- емый способ более нагляден. 3. Когда вы пишете достаточно большую программу, надо все время помнить, какие метки вы уже в ней использовали, иначе можно повторно определить уже существующую метку. Тут могла бы помочь такая возможность: вы набираете строку с меткой, не задумываясь о том, встре- чалась она в тексте или нет, и когда курсор установлен на метку, вы нажимаете некоторую комбинацию клавиш, и произво- дится проверка: не была ли эта метка уже определена в программе? 4. Структуризация выделенного блока текста, т.е. после каж- дой команды передачи управле- ния (JP,JR,DJNZ,RET) автома- тически вставляется пустая строка. Это повышает удобочи- таемость текста. Пример ────── до преобразования: после преобразования L1 LD A,(M1) L1 LD A,(M1) LD C,A LD C,A CALL SUBR1 CALL SUBR1 DJNZ L1 DJNZ L1 XOR A RET XOR A M1 DB 4,5,6 RET M1 DB 4,5,6 5. Перевод чисел в выделенном блоке текста из одной системы счисления в другую, наподобие того, как это сделано в обо- лочке "Ревю". Пример ────── до преобразования: после преобразования LD HL,#4000 LD HL,16384 LD DE,#4001 LD DE,16385 ............. ............. 6. Подсчет байтов, занимаемых участком программы, находя- щемся в выделенном блоке тек- ста. Пример ────── CALL M1 LD A,7 LD (HL),A RET DB 12,34 Результат: 3+2+1+1+2=9 байт. 7. Подсчет числа тактов, за ко- торое выполняются находящиеся в выделенном блоке текста ко- манды (это бывает необходимо при программировании MULTICO- LOR'а). Пример ────── XOR A LD (HL),A LD A,6 LD B,4 Результат: 4+7+7+7=25 тактов. 8. Всем известна директива ас- семблера DB, позволяющая оп- ределить один или несколько байтов данных. В некоторых случаях более удобным может быть сокращенный способ запи- си этой директивы. Для совме- стимости с другими ассембле- рами необходимо предусмотреть и обратное преобразование (всего текста или выделенного блока), при котором сокращен- ная форма записи превратится в полную. Пример ────── было: DB #12,#34,#56 DB %01110111,%11101110 стало: DB #123456 DB %0111011111101110 9. Можно сделать программу более наглядной, значительно облег- чить ее написание и отладку, если вместо команды CP и сле- дующей за ней команды услов- ной передачи управления ис- пользовать намного более по- нятные операторы: Пример ────── было: стало: ......... ......... CP 13 IF A=13 THEN JR M1 JR Z,M1 LD A,(X) LD A,(X) IF A<(IX+5) THEN JP M2 CP (IX+5) IF A<=E THEN JR M3 JP C,M2 IF A<>(HL) THEN CALL M4 CP E IF A=0 THEN RET JR C,M3 ......... JR Z,M3 CP (HL) CALL NZ,M4 AND A RET Z ......... Вместо IF A<(IX+5) можно пи- сать и IF (IX+5)>A - ассем- блер сам разберется, какие команды формировать в объект- ном коде. Необходимо предусмотреть воз- можность перекодировки "нор- мальной" программы (всего те- кста или выделенного блока) в этот формат, и наоборот (для совместимости с другими ас- семблерами). * * *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября