7.2. Обмен токена
Примечание: под "токеном"
подразумевается любое ключевое
слово (команда, функция) из
"словаря" БЕЙСИКа, которое рас-
сматривается данной программой
(как и интерпретатором компьюте-
ра) в виде определенного кода.
Длина: 46
Количество переменных: 2
Контрольная сумма: 5000
Назначение: меняет любое вхож-
дение заданного токена в БЕЙ-
СИК-программе на другой токен
(например, все операторы PRINT
могут быть изменены на LPRINT).
Переменные:
Имя: chr old
Длина: 1
Ячейка: 23296
Комментарий: код заменяемо-
го токена.
Имя: chr new
Длина: 1
Ячейка: 23297
Комментарий: код замещающе-
го токена.
Вызов программы:
RANDOMIZE USR адрес
Контроль ошибок: если БЕЙСИК-
программы нет в памяти или один
из двух заданных токенов имеет
код меньше 32, то процедура воз-
вращается в BASIC.
Комментарий: эта процедура
очень быстра, но чем длиннее
БЕЙСИК-программа, тем медленнее
она работает.
ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА АССЕМБЛЕР ЧИСЛА ДЛЯ ВВОДА147.
LD BC,(23296) 237 75 0 91
LD A,31 62 31
CP B 184
RET NC 208
CP C 185
RET NC 208
LD HL,(23635) 42 83 92
NXT_CH INC HL 35
INC HL 35
INC HL 35
CHECK LD DE,(23627) 237 91 75 92
AND A 167
SBC HL,DE 237 82
RET NC 208
ADD HL,DE 25
INC HL 35
LD A,(HL) 126
INC HL 35
CP 13 254 13
JR Z,NXT_CH 40 237
CP 14 254 14
JR NZ,COMP 32 3
INC HL 35
JR NEXT_CHR 24 230
CONP DEC HL 43
CP C 185
JR NZ,CHECK 32 229
LD (HL),B 112
JR CHECK 24 226
2
Как она работает:
В регистры B и C загружаются
новый и старый токены соответ-
ственно. Если любой из токенов
имеет код меньше, чем 32, то
программа возвращается в BASIC.
В пару HL заносится адрес на-
чала БЕЙСИК-программы. Пара ре-
гистров затем увеличивается и
сравнивается с адресом области
переменных. Если HL не меньше,
чем адрес начала области пере-
менных, программа возвращается в
BASIC.
Пара HL увеличивается, указы-
вая на следующий символ. Код
этого символа загружается в ак-
кумулятор и HL увеличивается
вновь. Если значение в аккумуля-
торе равно 13 или 14 (ENTER или
NUMBER), подпрограмма возвра-
щается к NXT_CH, а HL увели-
чивается, указывая на следующий
символ. Если аккумулятор не со-
держит 13 или 14, хранимое зна-
чение сравнивается с chr old.
Если пара найдена, этот символ
замещается на chr new.
Затем возврат к проверке
(CHECK) на конец обрабатываемой
программы.