Язык Форт и его реализации

         

Константы и переменные, работа с памятью - часть 4


В стандарте определен ряд системных переменных, к которым программист может свободно обращаться, в том числе STATE (состояние) --> А и BASE (основание) --> A. Исполнение каждого из этих слов заключается в том, что на стеке оставляется адрес ячейки, в которой хранится значение данной переменной.

Переменная STATE представляет текущее состояние текстового интерпретатора: нуль для исполнения и не нуль (обычно -1) для компиляции. Поэтому вся реализация слов [ и ] , переключающих интерпретатор из одного состояния в другое, сводится к одному присваиванию:

: [ ( ---> ) 0 STATE ! ; IMMEDIATE : ] ( ---> ) -1 STATE ! ;

Переменная BASE хранит текущее основание системы счисления для ввода и вывода чисел, поэтому реализация слов для установки стандартных систем выглядит так:

: DECIMAL ( ---> ) 10 BASE ! ; : HEX ( ---> ) 16 BASE ! ;

Отсюда следует более изящный способ кратковременной смены системы счисления во время компиляции определения: [ BASE @ HEX ] FF00 [ BASE ! ]. Сначала на стеке запоминается текущее основание, и система счисления переключается на основание 16, в котором и воспринимается следующее число FF00, после чего восстанавливается прежнее основание. А как узнать текущее основание системы счисления? Исполнение текста BASE @ . не поможет, поскольку ответом всегда будет 10 (почему?). Правильный ответ даст исполнение текста BASE @ DECIMAL . , в результате чего значение основания будет напечатано как число в десятичной системе. Еще более правильным было бы использовать текст BASE @ DUP DECIMAL . BASE ! , который после печати основания в десятичной системе восстанавливает его прежнее значение.




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