Deja Vu
#09
13 ноября 1999 |
|
Coding - Конверсия числа со стека калькулятора в символьную строку.
(C) Морозов Илья/Death Moroz __________________________________________ Конверсия числа со стека калькулятора в символьную строку. При использовании встроенного калькуля- тора результаты находятся на вершине каль- куляторного стека в интегральной форме. Для их печати существует подпрограмма Print_FP.Но она печатает стандартными сре- дствами, которые в настоящее время исполь- зуются редко. Обычно программа работает с собственной процедурой печати, например, 42 символа в строке. Ее можно связать с новым потоком. Но при этом необходимо до- вольно тесное общение с операционной сис- темой Спекки.Предпочтительней просто скон- вертировать это число в строку символов и распоряжаться ею по своему усмотрению. Но программа для такого преобразования будет довольно сложной и громоздкой. Проще вос- пользоваться имеющимися в ПЗУ. Первое, что приходит в голову - Print_ FP. Она печатает число с вершины стека калькулятора в текущий поток. Значит нужно подменить процедуру вывода символа на про- цедуру пересылки байта в память. Но слиш- ком уж громоздко. Однако Print_FP при сво- ей работе создает символьное представление числа, и лишь затем вызывает процедуру пе- чати. Буфер находится в рабочей области калькулятора по адресу #5CA1-#5CAA.Это две ячейки памяти калькулятора MEM3 и MEM4. Теперь достаточно просто в качестве проце- дуры вывода для потока поставить RET и вызвать Print_FP, чтобы считать строковое представление числа. Это уже проще, хотя все равно нужно возиться с каналами. Проще всего воспользоваться для этого функцией калькулятора STR$. Конвертер занимает 7 байт. CONVERT RST #28 ; вызов калькулятора DB #2E,#38 ; Команды калькулятора: ; STR$ преобразует число в стринг. ; Теперь на стеке параметры этого ; стринга. В DE-адрес, в BC-длина. ; END_CALC - выход из калькулятора. CALL #2BF1 ; Подпрограмма STK-FETCH переписы- ; вает число со стека калькулятора ; в регистры A,B,C,D,E. А так как ; после операции STR$ в стеке нахо- ; дятся параметры стринга, то они ; переносятся в пары DE и BC. RET Вот и все. Осталось скопировать строку в более надежное место,чем рабочая область интерпретатора.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября