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.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября