Начальный курс программирования на языке Форт

         

МАССИВЫ БАЙТОВ


Форт позволяет создать массив, каждый элемент которого содержит не полную ячейку, а один байт. Это полезно в тех случаях, когда вы запоминаете ряд чисел, представляемых восемью битами.

Диапазон значений 8-разрядного числа без знака — от 0 до 255. Байтовые массивы могут также служить для хранения строк символов в коде ASCII. Преимущество массива байтов перед массивом ячеек заключается в том, что при его применении вы можете иметь тот же объем данных при половинном объеме памяти.

Механизм использования байтового массива тот же, что и массива ячеек, за исключением двух положений:

1) вы не должны удваивать смещение, так как каждый элемент соответствует одному адресу;

2) слова! и Р нужно заменить словами С! и С@ . Этим, словам, которые функционируют только с байтовыми значениями, дан префикс С, потому что обычно они обеспечивают доступ к символам в коде ASCII.С! ( b a -- ) Занесение 8-разрядного числа по заданному адресу. С@ ( а -- b ) Выборка 8-разрядного числа по заданному адресу.


так как ПРЕДЕЛЫ доставляет адрес первой ячейки нашего массива. Установим предельное значение температуры для горелки

1 равным 340° и запомним его, добавив два байта к адресу исходной ячейки:



Мы можем запомнить предельные значения для горелок 2, 3 и 4, добавляя к исходному адресу «смещения» 4, 6 и 8. Так как смещение всегда равно удвоенному номеру горелки, определим полезное слово: : ПРЕДЕЛ ( номер-горелки -- адрес-предельного-значения) 2* ПРЕДЕЛЫ + ;

чтобы по номеру соответствующей горелки, находящемуся в стеке, вычислять адрес, который отстоит от начала на величину соответствующего смещения1.

После всех преобразований полезность слова ПРЕДЕЛ возросла в такой степени, что мы можем переопределить слово ?ЖАРКО: : ?ЖАРКО ( температура номер-горелки — ) ПРЕДЕЛ @ > IF , " Опасно — Уменьшите нагрев! " THEN ;

1 1 Для начинающих. В этом случае номер горелки называется индексом массива. Индекс — это относительный указатель элемента памяти Умножая индекс на 2, мы получаем смещение относительно начала массива Смещение равно фактическому числу байтов между началом массива и искомым элементом.

2. Мы нумеруем горелки с 0 до 4, вместо того чтобы нумеровать их с I до 5. по той причине, что хотим использовать сами номера горелок в качестве индексов 1о, что большинство людей называют «первым» в какой-то последовательности, программисты называют «нулевым» При желании вы можете пронумеровать горелки с 1 по 5, но тогда вам придется добавлять в определении слов самого высокого уровня корректирующий фрагмент (простое выражение «1-»), как это всегда делается.

Примеры выполнения нового варианта этого слова приведены ниже:210 0 ?ЖАРКО ok

230 0 ?ЖАРКО Опасно — Уменьшите нагрев! ok

З00 1 ?ЖАРКО ok З50 1 ?ЖАРКО Опасно — Уменьшите нагрев! ok

и т.д.CREATE xxx ( -- ) Создание заголовка в словаре с именем xxx. xxx: ( -- a) Слово xxx при выполнении заносит в стек свой адрес

ALLOT ( n -- ) Резервирование в поле параметров слова, определенного последним, n дополнительных байт.


Содержание раздела