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

         

Литеры и строки, форматный вывод чисел - часть 4


Для этого используется уже известное нам слово LITERAL. Однако включить его непосредственно в текст нельзя, так как это слово имеет признак немедленного исполнения и будет исполняться во время компиляции данного определения. Чтобы скомпилировать слово с признаком немедленного исполнения, используется слово [COMPILE] (от COMPILE — компилировать), которое само имеет такой признак. Оно принудительным образом компилирует следующее за ним слово независимо от наличия у него признака немедленного исполнения. Таким образом, ввод строки, ограниченной кавычкой, с помощью слова C" можно задать так: C" " WORD. Такой текст более нагляден, чем тот, в котором используется конкретный код или обозначающая его константа.

Важной областью применения строковых значений являются форматные преобразования, позволяющие переводить число из машинного двоичного представления в строку литер. Эти преобразования выполняются над числами двойной длины, результирующая строка размещается во временном буфере PAD (прокладка), который заполняется с конца. Такое название буфера связано с тем, что он располагается в незащищенной части адресного пространства между словарем и стеком. Слово PAD кладет на стек адрес конца этого буфера и обычно определяется так:

: PAD ( ---> А ) HERE 100 + ;

В данном случае предполагается, что размер буфера не будет превышать 100 байт.

Собственно форматное преобразование начинается словом <# которое устанавливает служебную переменную HLD на конец буфера PAD:

: <# ( ---> ) PAD HLD ! ;

Занесение очередной литеры в буфер PAD выполняет слово HOLD (сохранить):

: HOLD ( С ---> ) -1 HLD +! HLD @ C! ;

Преобразование числа выполняет слово # DD1 --> DD2, которое работает со значениями двойной длины. Параметр делится на текущее значение переменной BASE (основание системы счисления) и заменяется на стеке получившимся частным, а остаток переводится в литеру соответствующую ему как цифра в данной системе счисления, и через слово HOLD эта литера добавляется в буфер PAD.


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