(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 - ассем-
блер сам разберется, какие
команды формировать в объект-
ном коде.
Необходимо предусмотреть воз-
можность перекодировки "нор-
мальной" программы (всего те-
кста или выделенного блока) в
этот формат, и наоборот (для
совместимости с другими ас-
семблерами).
* * *