8.4. Копирование данных
в памяти
Длина: 33
Количество переменных: 3
Контрольная сумма: 4022
Назначение: эта программа ко-
пирует область памяти с одного
места в другое.
Переменные:
Имя: start
Длина: 2
Ячейка: 23296
Комментарий: адрес источни-
ка для копирования.
Имя: destination
Длина: 2
Ячейка: 23298
Комментарий: адрес, в кото-
рый происходит копирование.
Имя: length
Длина: 2
Ячейка: 23300
Комментарий: длина блока,
подлежащего копированию.
Вызов программы:
RANDOMIZE USR адрес
Контроль ошибок: нет
Комментарий: эта подпрограмма
может быть использована для соз-
дания "мультипликации" с по-
мощью следующего метода:
- создание первого экрана ин-
формации;
- копирование экрана выше RAM-
TOP;
- повторить для других экра-
нов;
- копирование экранов в обрат-
ном направлении по одному в быс-
трой последовательности.
ЛИСТИНГ МАШИННЫХ КОДОВ
МЕТКА АССЕМБЛЕР ЧИСЛА ДЛЯ ВВОДА147.
LD HL,(23296) 42 0 91
LD DE,(23298) 237 91 2 91
LD BC,(23300) 235 75 4 91
LD A,B 120
OR C 177
RET Z 200
AND A 167
SBC HL,DE 237 82
RET Z 200
ADD HL,DE 25
JR C,COPY 56 3
LDIR 237 176
RET 201
COPY EX DE,HL 235
ADD HL,BC 9
EX DE,HL 235
ADD HL,BC 9
DEC HL 43
DEC DE 27
LDDR 237 184
RET 201
2
Как она работает:
В пару регистров HL загружает-
ся адрес первого байта памяти
для копирования, в DE загружает-
ся адрес, в который копируется
память, а в BC загружается коли-
чество байтов для копирования.
Если BC=0 или HL=DE, то подпрог-
рамма возвращается в BASIC. Если
HL больше, чем DE, часть памяти
копируется, используя инструк-
цию LDIR и программа возвращает-
ся в BASIC.
Если же DE больше, чем HL, то
к обеим парам регистров прибав-
ляется по BC-1 и память ко-
пируется, используя инструкцию
LDDR, после чего программа воз-
вращается в BASIC.