Язык программирования Форт



         

Глава 14. Память Форта. Словари и контекстные словари - часть 6


Адрес Содержимое

995 х 996 х Указатель стека 997 2 LSB Верх стека (SP@ или 'S) 997 998 0 MSB 999 1 LSB 1000 0 MSB Начало стека (S0 или S0 @)

где каждый адрес содержит старший (MSB) или младший (LSB) байт числа. В этом случае стек содержит 1 и 2, а каждый символ "х" проставлен для неопределенного байта. Число 2 находится на верху стека, так как на адрес его младшего байта указывает указатель стека. Если мы положим в стек 3 с помощью 3 таблица измениться:

Адрес Содержимое

Указатель стека 995 3 LSB Верх стека (SP@ или 'S) 995 996 0 MSB 997 2 LSB 998 0 MSB 999 1 LSB 1000 0 MSB Начало стека (S0 или S0 @)

Два байта, представляющие число 3, занесены в ячейку с адресами 996 и 995, а указатель стека уменьшен на 2. Если вы теперь напечатаете DROP

результатом будет

Адрес Содержимое 995 3 996 0 Указатель стека 997 2 LSB Верх стека (SP@ или 'S) 997 998 0 MSB 999 1 LSB 1000 0 MSB Начало стека (S0 или S0 @)

Снова указатель стека просто увеличен на 2. Форт может стирать или не стирать 3, которая "удалена" из стека. Число 3 может остаться, так как любое новое число, положенное в стек, просто заместит его там. Стек по существу - массив с полуавтоматической укладкой и извлечением чисел. Если вы немного знакомы с тем, как работает процессор, мы можем сказать, что обычно указатель стека параметров совпадает с указателем стека процессора. Ото обсуждается подробнее в гл.16.) Большинство версий Форта имеет нестандартные слова, позволяющие вам найти адреса начала и верха стека. Наиболее часто адрес начала стека хранится в переменной пользователя, так что SO @ заносит в стек этот адрес (MMSFORTH делает это), хотя в некоторых версиях SO само засылает в стек этот адрес, т.е. @ не нужно. Адрес верхней ячейки стека засылается в стек оператором SP@ (засылка указателя стека - Stack Pointer Fetch), хотя некоторые модификации Форта используют слово 'S (MMSFORTH использует SP@). Таким образом, если стек содержит

3 9 99 тогда S0 @ 2 - @ . S0 @ 4 - @ . S0 @ 6 - @ .


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