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


         

Приведем способы кодировки некоторых команд


SET 1,(IX+3) LD A,(IX+3)

Приведем способы кодировки некоторых команд этой группы, а остальные предлагаем вам составить самостоятельно по аналогии с приведенными. Описанная выше команда получается из стандартной

SET 1,A

Эта команда кодируется двумя байтами #CB и #CF (см. ). Для получения новой команды необходимо вначале поставить код префикса, а между байтами исходной команды вставить байт величины смещения. Таким образом, приведенная выше мнемоника должна кодироваться последовательностью #DD, #CB, #03, #CF. Команда

RES 5,H(IY-5)

получается, исходя из кодировки команды

RES 5,H

В результате у вас должна получиться последовательность кодов #FD, #CB, #FB, #AC. Конечно, все предложенные мнемоники не поддерживаются ассемблером GENS, поэтому использовать их можно одним лишь способом - записывая коды непосредственно в директиве DEFB. То есть последняя команда в ассемблерном тексте будет выглядеть так:

DEFB #FD,#CB,#FB,#AC

Несколько сложнее дела обстоят с другими префиксами: #CB и #ED. С ними также можно получить ряд новых команд, хотя часто они лишь повторяют «стандартные» инструкции (особенно это относится к префиксу #ED) и практической пользы поэтому от них мало. Такие команды чаще используются для защиты коммерческих программ, чтобы текст невозможно было прочитать (ни один из известных дизассемблеров недокументированные команды не распознает). Для поисков лучше всего использовать отладчик MONS, так как он в режиме трассировки тупо выполняет машинные инструкции, совершенно не вникая в их смысл. Но в данном случае вам это как раз и нужно. Любой код, который вы ему подсунете, будет выполнен абсолютно так же, как и в программе (заметим, что другой трассировщик - Mon2 - перед выполнением очередной команды справляется о ней в таблице, поэтому, если вы решите использовать для экспериментов именно этот дизассемблер, стоит оформлять искомые коды в виде подпрограммы и трассировать их, нажимая клавишу S). Поскольку «пропущенных» команд, получаемых с использованием префикса #CB немного, приведем их полный список (кстати, дизассемблер Mon2, в отличие от MONS, прекрасно «справляется» с этой группой команд).


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