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


         

вывод на основной экран


10 ORG 60000 20 LD A,2 ; вывод на основной экран (PRINT #2). 30 CALL 5633 40 ;---------------- 50 LD A,22 ; AT 20,3 60 RST 16 70 LD A,20 80 RST 16 90 LD A,3 100 RST 16 110 ;---------------- 120 LD A,16 ; INK 1 130 RST 16 140 LD A,1 150 RST 16 160 ;---------------- 170 LD A,17 ; PAPER 5 180 RST 16 190 LD A,5 200 RST 16 210 ;---------------- 220 LD A,19 ; BRIGHT 1 230 RST 16 240 LD A,1 250 RST 16 260 ;---------------- 270 LD A,"O" ; печать трех символов строки OK.
280 RST 16 290 LD A,"K" 300 RST 16 310 LD A,"." 320 RST 16 330 RET
Не правда ли, получилось длинновато? Даже не верится, что этот пример после трансляции будет занимать в памяти меньше полусотни байт. А на самом деле его можно сократить еще в несколько раз. Для этого нужно воспользоваться подпрограммой ПЗУ, позволяющей выводить строки символов, да научиться формировать такие строки в программе.
Ассемблер предоставляет несколько директив для определения в программе текстовых строк и блоков данных. Вот они:
DEFB - через запятую перечисляется последовательность однобайтовых значений; DEFW - через запятую перечисляется последовательность двухбайтовых значений; DEFM - в кавычках задается строка символов; DEFS - резервируется (и заполняется нулями) область памяти длиной в указанное число байт.
Эти директивы чем-то напоминают оператор Бейсика DATA, но в отличие от него не могут располагаться в произвольном месте программы. Мы уже говорили, что ассемблер, как никакой другой язык, «доверяет» программисту. Это, в частности, объясняется тем, что микропроцессор не способен сам отличить, к примеру, код буквы A от кода команды LD B,C - и то и другое обозначается десятичным числом 65. Поэтому недопустимо размещать блоки данных, скажем, внутри какой-либо процедуры, так как в этом случае они будут восприниматься микропроцессором как коды команд, и чтобы избежать конфликтов, все данные лучше размещать в самом конце программы или уж, по крайней мере, между процедурами, после команды RET.

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