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

         

РАБОТА СКАЛЬКУЛЯТОРОМ - часть 3


LD HL,(23645) ;запоминаем в машинном стеке PUSH HL ; значение переменной CH_ADD LD HL,NUMBER ;адрес строки с десятичным числом LD (23645),HL ; записываем в переменную CH_ADD LD A,(HL) ;берем в аккумулятор первый символ ; (обязательно!) CALL 11448 ;помещаем число из текстовой строки ; NUMBER в стек калькулятора POP HL ;восстанавливаем прежнее значение LD (23645),HL ; системной переменной CH_ADD ......... ;продолжаем программу ; Символьное представление десятичного числа NUMBER DEFM "12803.52" DEFB 13 ;байт-ограничитель символьной строки

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

После занесения в стек калькулятора тем или иным способом числовых значений, с ними нужно что-то сделать, для чего и предназначена команда RST 40. Как вы помните, раньше мы использовали стек калькулятора для вывода чисел на экран, а также для рисования линий и окружностей. Теперь посмотрим, как над числами в стеке производить различные математические операции.

Как мы уже сказали, для этого нужно записать специальные управляющие последовательности байтов непосредственно за командой RST 40. В табл. 9.1 перечислены наиболее употребительные команды калькулятора, выполняемые ими функции и состояние стека после выполнения операции, считая, что изначально в стеке были записаны два числа: X - на вершине (был записан последним) и Y - под ним. Например, для сложения этих двух вещественных чисел применяется литерал 15, а для деления - 5. В одной команде можно перечислить произвольное количество действий, а для завершения расчетов в конце последовательности литералов всегда обязательно указывать байт 56, который возвращает управление на следующую за ним ячейку памяти. Понятно, что последовательность литералов в программу на ассемблере может быть вставлена с помощью директивы DEFB.




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