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


         

В качестве иллюстрации приведем программку,


Таблица 9.1. Значение некоторых кодов калькулятора

ЛитералОперацияСостояние стека после операции
1Замена элементовXY 
3ВычитаниеY - X  
4УмножениеY ґ X  
5ДелениеY / X  
6Возведение в степеньYX  
15СложениеY + X  
27Изменение знакаY-X 
39Целая часть числаYINT X 
40Квадратный кореньYSQR X 
41Знак числаYSGN X 
42Абсолютная величинаYABS X 
49Копирование стекаYXX
56Конец расчетовYX 
88Округление числаYINT(X+.5) 
160Дописать 0YX0
161Дописать 1YX1
162Дописать 0.5YX.5
163Дописать PI/2YXPI / 2
164Дописать 10YX10
В качестве иллюстрации приведем программку, вычисляющую выражение 823ґ5503/(32-17) и выводящую результат на экран. При выполнении расчетов необходимо внимательно следить за очередностью выполнения операций, поэтому прежде нужно продумать порядок занесения чисел в стек (помните, что калькулятор имеет доступ только к величинам, находящимся на вершине стека). Поскольку в данном случае первым должно выполняться действие в скобках, а умножение и деление имеют одинаковый приоритет, то укладывать числа в стек будем в той же последовательности, в которой они встречаются в выражении, чтобы калькулятор мог выбирать их в обратном порядке:

ORG 60000 ENT $ CALL 3435 ;очищаем экран LD A,2 ; и подготавливаем его для печати CALL 5633 LD BC,823 ;заносим в стек все части выражения CALL 11563 LD BC,5503 CALL 11563 LD A,32 CALL 11560 LD A,17 CALL 11560 RST 40 ;вызываем калькулятор DEFB 3 ; X = 32 - 17 DEFB 5 ; X = 5503 / X DEFB 4 ; X = 823 ґ X DEFB 56 ; конец расчетов CALL 11747 ;выводим результат на экран RET

После запуска этой подпрограммы вы увидите на экране число 301931.27. Тот же результат получается и при выполнении оператора PRINT 823*5503/(32-17).

Обязательным условием при работе с калькулятором является не только соблюдение порядка выполнения расчетов. При ошибке вы в худшем случае получите неверный результат. Гораздо важнее следить за состоянием стека калькулятора, так как если после завершения программы он окажется не в том же виде, как и в начале, последствия могут даже оказаться фатальными. Для безопасности перед выходом в Бейсик можно вызвать процедуру по адресу 5829, которая очистит стек калькулятора, хотя нужно сказать, что и это лекарство в тяжелых случаях может не помочь. Поэтому при особо сложных вычислениях (а по началу и в самых простых случаях) желательно проследить за стеком на каждом шаге расчетов. Для приведенной выше программки можно сделать примерно такую схемку:


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