|
ZX Magazine
#01
08 октября 1995 |
|
Училка - уроки программрования: копирование блоков памяти, циклы.

────────────────────────────────────────────────────────────────
°∙····∙▒▓█·█▓▒······∙∙······∙∙······∙∙······∙∙······∙∙······∙∙··
░°∙··∙°▒▓█·█▓▒∙▒▓█·█▓▒∙▒▓█·█▓▒∙··███▓▒∙▒▓█·█▓▒∙▒▓███▓▒∙····∙°°∙·
░░°∙∙°░▒▓███▓▒°▒▓█∙█▓▒°▒▓█∙█▓▒°∙▓███▓▒°▒▓███░░°▒▓█°█▓▒°∙··∙°░░°∙
░░░°°░░░░°°█▓▒░▒▓███▓▒░▒▓█°█▓▒░▒▓█°█▓▒░▒▓███▓░░▒▓███▓▒░°∙∙°░░░░░
░░░░░░░▒▓███▓▒░░°° █▓▒░░▓███▓▒░▒▓█░█▓▒░▒▓█░█▓▒░▒▓█░█▓▒░░°°░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
────────────────────────────────────────────────────────────────
ПРИВЕТ ДРУЗЬЯ!!!
В ЭТОЙ РУБРИКЕ С ВАМИ СЕГОДНЯ WASQUEZ.
СЕГОДНЯ МЫ ПОГОВОРИМ О ПРОГРАММИРОВАНИИ .
ПРОСЬБА ЭКРАН МОНИТОРА СРАЗУ НЕ ЗАПЛЕВЫВАТЬ, ТАК КАК
НАЧИНАТЬ Я БУДУ СОВСЕМ С АЗОВ ПРОГРАММИРОВАНИЯ.
НУ И , ЕСТЕВСТВЕННО , ДАЛЬШЕ БУДЕТ БОЛЬШЕ.
( МАТЕРИАЛ РАСЧИТАН НА ЧЕЛОВЕКА ИМЕЮШЕГО ХОТЬ КАКУЮ-ТО
ЛИТЕРАТУРУ ПО АССЕМБЛЕРУ )
НАЧНЕМ С САМОГО ПРОСТОГО:
-КОПИРОВАНИЕ БЛОКОВ ПАМЯТИ-
10 LD HL, АДРЕС (ОТКУДА )
20 LD BC, АДРЕС (КУДА )
30 LD DE, АДРЕС (СКОЛЬКО)
40 LDIR КОМАНДА ПЕРЕБРОСКИ
50 RET
НУ НАПРИМЕР ЗАГРУЗИЛИ ВЫ КАРТИНКУ ПОД АДРЕС 40000.
И ХОТИТЕ БРОСИТЬ ЕЕ НА ЭКРАН, ТО ПРОГРАММА
ПЕРЕБРОСКИ КАРТИНКИ БУДЕТ ТАКАЯ :
10 LD HL,40000 ИЗ ЭТОГО АДРЕСА
20 LD BC,16384 B ЭКРАН
30 LD DE,6912 ДЛИНА КАРТИНКИ (стандарт для непакованной)
40 LDIR ПЕРЕБРОСИТЬ ИЗ 40000 В 16384 , 6912 БАЙТ
50 RET ВОЗВРАТ ИЗ ЭТОЙ ПРОГРАММЫ
ПОПРОБУЙТЕ САМИ !
СЛЕДУЮЩА ПРОГРАМКА ОРГАНИЗУЕТ МАЛЕНЬКИЙ ЦИКЛ (FOR......NEXT)
С КОЛИЧЕСТВОМ ПОВТОРЕНИЙ НЕ БОЛЕЕ 255 РАЗ.
10 LD B, СКОЛЬКО РАЗ ( ОТ 1 И ДО 255)
20 М1 PUSH BC СОХРАНИМ РЕГИСТОВУЮ ПАРУ НА СТЕКЕ
30 CALL ---||--- ЗАПУСК ПОДПРОГРАММЫ
40 POP BC ВОЗЬМЕМ РЕГИСТРОВУЮ ПАРУ СО СТЕКА
50 DJNZ M1 УМЕНЬШИЛИ РЕГИСТР Б НА 1, И ПЕРЕШЛИ ОБРАТНО НА М1
60 RET ВОЗВРАТ ИЗ ПРОГРАММЫ.
ПРИМЕР ИСПОЛЬЗОВАНИЯ ЭТИХ ПРОЦЕДУР В ПАРЕ.
Например у вас есть 2 картинки и вы хотите выбрасывать их на
экран некоторое количество раз.Программа будет такой:
1 картинка находиться по адресу 40000
2 картинка находиться по адресу 50000
вы хотите выбрисить картинки на экран 100 раз подряд
одна за другой.
ORG 30000 -Внутренняя директива компилятора.
05 EI Разрешили прерывания.
10 LD B,100 For a=0 to 100 (кол-во повторов 100 раз)
20 M1 PUSH BC Сохранили BC так-как он будет задействован
30 HALT подождем прерывание
40 LD HL,40000 Адрес 1 картинки в HL
50 LD BC,6912 Длина 1 картинки в BC
60 LD DE,16384 Адрес куда бросаем ( в экран ) в DE
70 LDIR Бросить!
80 HALT Подождем прерывание
90 LD HL,50000 Адрес 2 картинки в HL
100 LD BC,6912 Длина 2 картинки в BC
110 LD DE,16384 Адрес переброски в DE
120 LDIR Бросить!
130 POP BC Сняли со стека ранее сохраненный BC
140 DJNZ M1 Отняли от "В" еденицу и перешли на М1
150 RET Как только "В" стал 0 то возврат .
НУ ВОТ НА СЕГОДНЯ СОБСТВЕННО ГОВОРЯ И ВСЕ.
ПРОБУЙТЕ , ЭКСПЕРЕМЕНТИРУЙТЕ.
КСТАТИ ДЛЯ ЗАМЕДЛЕНИЯ ВЫВОДА НАДО ПОСЛЕ КОМАНДЫ "HALT"
ПОСТАВИТЬ ЕЩЕ НЕСКОЛЬКО ТАКИХ КОМАНД.
ТЕМ КОМУ БЫЛО НЕ ИНТЕРЕСНО:-НЕ БЕСПОКОЙТЕСЬ
В СЛЕДУЮЩИХ НОМЕРАХ ЖУРНАЛА БУДУТ БОЛЕЕ СЛОЖНЫЕ ПРОГРАММЫ.
════════════════════════════════════════════════════════════════
9.10.95
WASQUEZ.
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября