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



         

ВЫВОД БУКВЕННЫХ И ЦИФРОВЫХ СИМВОЛОВ - часть 7


Можно наконец переписать наш пример с использованием блока данных, присвоив последнему имя TEXT:

ORG 60000 LD A,2 CALL 5633 LD DE,TEXT ;в регистровую пару DE записывается ; метка TEXT, соответствующая адресу ; начала блока данных. LD BC,12 ;в регистровую пару BC заносится число, ; соответствующее количеству кодов ; в блоке данных. CALL 8252 ;обращение к подпрограмме ПЗУ, ; которая печатает строку на экране. RET TEXT DEFB 22,10,8,16,1,17,5,19,1,"O","K","."

Не удивляйтесь, что в этом примере отсутствуют номера строк. В дальнейшем мы везде будем приводить тексты программ именно в таком виде, во-первых, потому, что нумерация не несет никакой смысловой нагрузки, а во-вторых, многие фрагменты в ваших программах, скорее всего, будут пронумерованы совершенно иначе.

В заключение этого раздела расскажем еще об одной полезной подпрограмме ПЗУ, связанной с печатью символов. Вы знаете, что в Бейсике при использовании временных атрибутов в операторе PRINT их действие заканчивается после выполнения печати, и следующий PRINT будет выводить символы с постоянными атрибутами. В ассемблере же команда RST 16 временные установки не сбрасывает и для восстановления печати постоянными атрибутами нужно вызвать подпрограмму, расположенную по адресу 3405. Продемонстрируем это на таком примере:

ORG 60000 LD A,2 CALL 5633 LD DE,TEXT1 ;печать текста, обозначенного меткой LD BC,16 ; TEXT1, длиной в 16 байт. CALL 8252 CALL 3405 ;восстановление постоянных атрибутов. LD DE,TEXT2 ;печать текста, обозначенного меткой LD BC,11 ; TEXT2, длиной в 11 байт. CALL 8252 RET TEXT1 DEFB 22,3,12,16,7,17,2 DEFM "TEMPORARY" TEXT2 DEFB 22,5,12 DEFM "CONSTANT"

После трансляции и выполнения этой программки вы увидите на экране две надписи: верхняя (TEMPORARY) выполнена с временными атрибутами (белые буквы на красном фоне), а нижняя (CONSTANT) - постоянными.




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