Как написать игру для ZX Spectrum на ассемблере



         

Печатающий квадрат - часть 2


Программа, выполняющая все эти действия будет выглядеть примерно таким образом:

T_TAPE LD A,(HL) ;читаем из строки очередной символ AND A ;проверяем на 0 JR NZ,TTAPE1 ;если нет, продолжаем LD A," " ;стираем изображение RST 16 ; «печатающего квадрата» RET ;выход TTAPE1 RST 16 ;печатаем считанный символ INC HL ;перемещаем указатель текущего ; символа на следующий PUSH HL ;сохраняем в стеке значение указателя LD DE,TXTCUR ;формируем изображение LD BC,4 ; «печатающего квадрата» CALL 8252 CALL 3405 ;сбрасываем временные атрибуты XOR A ;в аккумуляторе 0 OUT (254),A ;«выключаем» динамик ; ------------------ ; Задержка (PAUSE 5) LD BC,5 ;пауза 5/50 секунды CALL 7997 ;вызов подпрограммы PAUSE ; ------------------ LD A,%00010000 ;устанавливаем 4 бит аккумулятора OUT (254),A ;«включаем» динамик POP HL ;восстанавливаем значение указателя JR T_TAPE ;переход на начало цикла TXTCUR DEFB 17,1," ",8

Как вы видите, в этой небольшой процедуре появилось несколько новых команд, поэтому помимо кратких комментариев дадим еще и более основательные пояснения.

Команда LD A,(HL) в принципе очень похожа на известную вам LD A,(Address), но отличается от нее тем, что в аккумулятор загружается значение не из какой-то конкретной ячейки памяти, а из той, на которую указывает регистровая пара HL. Например, если в HL записать число 16384, то в регистр A загрузится содержимое ячейки, находящейся по адресу 16384, то есть выполнится команда LD A,(16384). Эту инструкцию очень удобно применять в тех случаях, когда значение адреса для чтения или записи заранее неизвестно и может быть любой переменной величиной. Попутно скажем, что существует и обратная команда, то есть LD (HL),A, которая записывает содержимое аккумулятора по адресу, указанному в HL.

Существенное преимущество этого типа команд состоит еще и в том, что кроме аккумулятора таким способом можно пересылать и содержимое любого другого регистра данных, в том числе и регистров H и L, например, LD L,(HL) или LD (HL),H. И даже более того, по адресу, указанному в HL, можно записывать не только содержимое регистров, но и непосредственные числовые значения, конечно, не превышающие 255, скажем, LD (HL),153. Что же касается аккумулятора, то для него имеется возможность адресации не только с помощью пары HL, но также и BC либо DE, и эти команды еще не раз появятся в нашей книге.




Содержание  Назад  Вперед