7. ПРОЦЕДУРЫ ОБРАБОТКИ ПРОГРАММ
7.1. Удаление блока программы
Длина: 42
Количество переменных: 2
Контрольная сумма: 5977
Назначение: эта программа уда-
ляет блок BASIC-программы, нахо-
дящийся между строками, опреде-
ленными пользователем.
Переменные:
Имя: start line no
Длина: 2
Ячейка: 23296
Комментарий: номер первой
строки, подлежащей удалению.
Имя: end line no
Длина: 2
Ячейка: 23298
Комментарий: номер послед-
ней строки, подлежащей удалению.
Вызов программы:
RANDOMIZE USR адрес
Контроль ошибок: если имеют
место следующие ошибки, то про-
цедура останавливается без уда-
ления строк BASIC-программы:
- если последний номер строки
меньше, чем первый номер строки;
- если между этими двумя стро-
ками нет программы на БЕЙСИКе;
- если один из номеров строк
или оба равны 0.
Комментарий: эта программа до-
вольно медленна для удаления
большого блока программных
строк, но, тем не менее, рабо-
тать с ее помощью все же удоб-
нее, чем удалять строки вручную.
Не вводите номера строк боль-
ше, чем 9999.
ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА АССЕМБЛЕР ЧИСЛА ДЛЯ ВВОДА147.
LD HL,(23296) 42 0 91
LD DE,(23298) 237 91 2 91
LD A,H 124
OR L 181
RET Z 200
LD A,D 122
OR E 179
RET Z 200
PUSH DE 213
CALL 6510 205 110 25
EX (SP),HL 227
INC HL 35
CALL 6510 205 110 25
POP DE 209
AND A 167
SBC HL,DE 237 82
RET Z 200
RET C 216
EX DE,HL 235
NXT_CH: LD A,D 122
OR E 179
RET Z 200
PUSH DE 213
PUSH HL 229
CALL 4120 205 24 16
POP HL 225
POP DE 209
DEC DE 27
JR NXT_CH 24 243
2
Как она работает:
В пары регистров HL и DE заг-
ружаются начальный и конечный
номера строк соответственно. Эти
значения проверяются и, если од-
но из них или оба равны 0, прог-
рамма возвращается в BASIC.
Затем вызывается подпрограмма
ПЗУ по адресу 6510 - она возвра-
щает адрес в памяти компьютера,
с которого начинается первая
строка. Эта же подпрограмма за-
тем вызывается снова для опреде-
ления адреса символа, стоящего
после ENTER в конечной строке.
В пару регистров HL помещает-
ся разность этих двух адресов и,
если это значение равно 0 или
отрицательно, программа возвра-
щается в BASIC.
Содержимое пары регистров HL
копируется в DE для использова-
ния DE в качестве счетчика. Если
счетчик равен 0, то работа про-
цедуры завершается, а если нет,
то вызывается подпрограмма ПЗУ,
расположенная по адресу 4120,
которая удаляет один символ.
После этого - возврат к NXT_CH.