Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт янв 16, 2018 23:33

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: набросок стандарта от mOleg
СообщениеДобавлено: Сб авг 08, 2009 19:01 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
Оглавление

1. Введение
2. Принятые сокращения и обозначения, соглашения по именованию слов
3. Возможные модели памяти и типы шитого кода
3.1 Распределение памяти в системе
3.2 Грануляция памяти, выравнивание данных.
4. Основные типы данных
4.1 Дополнительные типы данных
4.2 Представление чисел
4.3 Представление символов
4.4 Представление строк и массивов данных
4.5 Представление адресов и адресных ссылок
4.6 Словарная статья.
4.7 Представление и хранение имен.
5. Первый уровень языка - ФВМ
5.1 Базовая модель Форт-Машины
5.2 Базовый обязательный набор примитивов
5.3 Расширенный набор примитивов
5.4 Набор сервисных примитивов для связи с ОС, под которой работает ФВМ
5.5 Особенности возможных аппаратных реализаций ФВМ
6. Второй уровень языка
6.1 Словари и слова для их поддержки
6.2 Обработка исключений и ошибок
6.3 Организация сообщений об ошибках
6.4 Разбор и трансляция исходных текстов
6.5 Компиляция и оптимизация кода
7. Третий уровень языка
8. Совместимость с другими стандартами

9. Набор тестов работоспособности системы
10. Список рекомендуемой литературы и другие ссылки


Последний раз редактировалось mOleg Пт мар 05, 2010 18:26, всего редактировалось 32 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:39 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
1. Введение

Данный документ содержит описание языковой среды Форт, которая обычно
называется языком Форт. В данном документе язык разбит на три условных уровня.
Перечень слов, входящих в каждый уровень языка может повторяться (за
исключением 5.1), так как понятия могут переноситься на более высокий уровень
языка безболезненно. То есть, к примеру, константы true и false могут
относиться как к первому уровню языка, так и ко второму, так и к третьему.

К ПЕРВОМУ УРОВНЮ ЯЗЫКА относится виртуальная форт машина (ФВМ),
ко ВТОРОМУ УРОВНЮ ЯЗЫКА относится организация словарей, компилятор, обработка
ошибок и исключений,
в ТРЕТИЙ УРОВЕНЬ ЯЗЫКА входит все остальное.


Последний раз редактировалось mOleg Чт авг 27, 2009 12:16, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
2. Принятые сокращения и обозначения

CELL - число, определяющее количество минимально адресуемых единиц, необходимых
для хранения числа базовой разрядности (например для ix86 32 битной
системы CELL = 4, в то время как для 16 битной системы с байтовой
адресацией памяти CELL = 2, так же могут встречаться случаи, когда
CELL = 1)

ADDR - число, определяющее количество минимально адресуемых единиц, необходимых
для хранения адресной ссылки (обычно это число совпадает с значением
CELL, но могут быть отличия, когда, к примеру, ADDR = 2 CELL и наоборот)

UNIT - число, определяющее количество бит в минимально адресуемой единице
( для систем с байтовой адресацией UNIT = 8)

FALSE - логическое значение "ложь" - все биты числа сброшены в нуль

TRUE - логическое значение "истина" - все биты числа установлены в единицу

ВМ - Виртуальная машина - набор программных примитивов и понятий, позволяющих
организовать вычислительную среду определенного вида внутри другой
вычислительной среды.

ФM - Физическая машина - набор непосредственно распознаваемых команд
реально существующего вычислительного устройства (процессора).
Виртуальные машины всегда выражаются через набор команд ФМ.

ФВМ - Форт Виртуальная Машина - базовый набор понятий, позволяющий естественным
образом выразить любую языковую конструкцию в дальнейшем, ФВМ может быть
двух типов: в железном исполнении (когда набор понятий "зашит" в логику
работы процессора), и в программном исполнении (когда набор понятий
реализован на любом отличном от Форта языке)

ШК - шитый код - в контексте данного документа понятие применимо только к
возможным видам реализации ФВМ в рамках Форт-системы.
DP - Указатель данных. Обычно, переменная, которая хранит адрес первой
свободной ячейки за пределами которой Форт-система не хранит данных.
Слово - Идентификатор куска кода и данных, по которому можно с помощью
стандартного механизма найти код и данные, получить их адреса.
Словарь -
Контекст -
Текущий словарь -

Стек - устройство или механизм, предназначенный для временного хранения данных, поддерживающий две фундаментальных операции над данными: заталкивание данных в стек, выталкивание данных из стека (мнемонически PUSH и POP). Заталкивание и извлечение данных ведется только с одной стороны, таким образом извлечении данных порядок их следования относительно порядка заталкивания реверсируется (что обозначается в англоязычной литературе как Last In First Out или LIFO). По сути стек - это метод кэширования данных, то есть сохранения копии данных в промежуточном буфере в порядке наиболее вероятного их использования. Стек может быть реализован с помощью различных методик, поэтому может обладать дополнительными свойствами и возможностями в дополнение к определяющим.

Токен -

Стековые комментарии:
( a b c --> x y z ) - где a,b и с входные параметры,
x, y, z - результат операции.

(количество входных и выходных параметров может быть произвольно.
принятые сокращения при написании стековых коментариев.
# - размер, длина, количество (чего либо), обычно положительное число
u - любое положительное число CELL разрядности
n - любое число CELL разрядности
d - любое число двойной длины
ud - положительное число двойной длины
a,b,c,, - любое число CELL разрядности
addr - адресная ссылка на какой либо объект, в зависимости от организации
памяти системы может быть представлено числом CELL или DOUBLE
разрядности
xt - исполнимый адрес токена
asc - адрес символьной строки, то же что и addr
ix, ij - произвольное количество параметров на стеке
attr - атрибут слова - может быть представлено любым значением,
а так же набором значений в зависимости от запрашиваемого атрибута
id - число-идентификатор чего-либо, может быть представлено как: #,n,u,addr,xt
aid - число идентификатор атрибута, представлено как #
lfa - уникальный адрес на запись, содержащую слово, представлено как addr
из поля lfa можно получить значение любого из полей слова используя
GET-ATTR


Последний раз редактировалось mOleg Чт авг 27, 2009 17:02, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:43 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
3. Возможные модели памяти и типы шитого кода

Как минимум необходимо учесть возможность использования всех структур и слов
языка:
1. для следующих типов шитого кода:
- подпрограммный
- прямой
- косвенный
- байт-код
- индексный
2. для следующих моделей памяти:
- линейная (иначе называемая плоская)
- гарвардская
- сегментная
- индексная динамическая
3. для методов хранения значений
- Little Endian
- Big Endian
4. для различных методов реализации стеков по методу хранения и доступа
- в общей памяти без ограничений размеров
- в отдельной памяти без ограничения размеров
- внутри недоступного для индексирования массива, когда видны только верхние
элементы стека, а остальные не доступны


Последний раз редактировалось mOleg Чт авг 27, 2009 12:17, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:45 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
3.1 Распределение памяти в системе

В простейшем случае' все адресное пространство системы принадлежит Форт-системе.

' однозадачная система + оперативная память адресуется целиком с помощью числа
CELL разрядности

---

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

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

---

3.2 Грануляция памяти, выравнивание данных.

Форт-системы работающие в виде виртуальных машин автоматически наследуют осбенности используемой гостевой архитектуры.
То есть, если процессор позволяет адресовать байты, то грануляция памяти байтовая, бывает и так, что доступ к памяти возможен только 16 или 32 битный. В случае Форт процессоров грануляция может быть еще более оригинальная. К примеру, память может адресоваться 18 битными словами, 24 битными (возможно и другие варианты есть, вполне можно себе представить полубайтовую адресацию).
Выравнивание данных вносит меньше неприятности, чем грануляция памяти, так как обычно влияет только на скорость исполнения.

Кроме того, доступ к памяти может иметь более "узкое горлышко" чем базовая разрядность данных (CELL). Обычно этот момент связан с эмулированием, к примеру, на 8 битном процессоре 16 битной ФВМ.


Последний раз редактировалось mOleg Чт дек 17, 2009 12:45, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:48 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4. Основные типы данных

числа базовой разрядности
адресные ссылки
символы
строки


Последний раз редактировалось mOleg Чт авг 27, 2009 12:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:51 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.1 Дополнительные типы данных

числа двойной разрядности
числа с фиксированной точкой
числа с плавающей точкой


Последний раз редактировалось mOleg Чт авг 27, 2009 12:18, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:53 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.2 Представление чисел
В памяти вычислительном машины числа представлены в том виде, в каком
они представлены в системе, на которой работает Форт-система, поэтому на
представление и использование чисел налагаются те же ограничения, что и в
системе.

В строковом представлении используются следующие форматы записи чисел:

1. NNNN - положительное число одинарной или двойной длины в текущей
системе счисления, например, 1234, 1AF3E, 1000101, SAMPLE;
2. -NNNN - отрицательное число одинарной или двойной длины в текущей
системе счисления, например, -5, -FFF, -1101, -SAM;
3. 0xHHH - положительное число одинарной или двойной длины в шестнадцатиричной
системе счисления, например: 0xFFE1 , 0x0A, 0xE ;
4. -0xHH - отрицательное число одинарной или двойной длины в шестнадцатиричной
системе счисления, например: -0x10 , -0x1234
5. NN:NN - положительное число двойной длины в текущей системе счисления,
например: 12.34 FFFF.0E12 11011.000101010 - причем, запись числа
с '.' аналогична записи двух чисел без точки: 12.34 = 12 34
6. -NN:N - отрицательное число двойной длины в текущей системи счисления,
например: -12.34 - что тождественно записи -12 -34
7. NN`NN`NN - положительное число двойной длины в текущей системе счисления;
8. -N`NN`NN - отрицательное число двойной длины в текущей системе счисления;
9. NNN,PPP - положительное число с фиксированной\плавающей точкой в десятичной
системе счисления;
10. -NN,PPP - отрицательное число с фиксированной\плавающей точкой в десятичной
системе счисления;
11. NNeFF или NNEFF - число с плавающей точкой,
например: 12E10 , 12e-10 , -12E10
12. система может работать с числами, представленными произвольным основанием
системы счисления, в диапазоне от 2 до 64. Текущее основание системы
счисления хранит переменная BASE.

Так же система может использовать префиксную запись чисел, когда перед числом
находится префикс, распознающий следующее за ним число, например:
0x 12EF12
0d 123456789
и другие подобные


Последний раз редактировалось mOleg Чт авг 27, 2009 12:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:54 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.3 Представление символов

Символы могут храниться, использоваться и передаваться в любой
кодировке, поэтому в памяти символы могут занимать в зависимости от вида
кодировки и метода хранения различное количество бит (от одного до шести байт
на символ, причем размер одного символа может варьироваться). Для работы с
символьными значениями рекомендуется использовать собственный набор слов: C@
C! C+ <C CHAR" [CHAR] и др. Пользоваться словами: @ ! и им подобными при
работе с символами не рекомендуется, в случае если код должен быть
переносимым.


Последний раз редактировалось mOleg Чт авг 27, 2009 12:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:55 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.4 Представление строк и массивов данных

Символьные строки хранятся в пространстве данных системы, в памяти представлены
своим содержимым, на стеках - адресом (либо индексом) и длиной ( asc # ).
Не имеет смысла использовать различные механизмы для хранения массивов и строк.
Поэтому в начале массива (адресов\чисел\символов) находится счетчик длины,
представляющий длину массива в минимально адресуемых единицах памяти (байтах
обычно). Размер счетчика длины и максимальный допустимый размер массива зависят
от того, как реализована конкретная система, размер счетчика длины строки так
же может варьироваться в зависимости от длины строки.


Последний раз редактировалось mOleg Чт авг 27, 2009 12:19, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:57 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.5 Представление адресов и адресных ссылок
в зависимости от типа ШК, который использует система адреса могут представляться
как короткими, так и длинными числами. То есть числами, которые имеют CELL
разрядность, и 2 CELL разрядность. Адресные ссылки могут так же короче CELL .
Однако для удобства рекомендуется приравнивать разрядность адресной ссылки и
разрядность данных.


Последний раз редактировалось mOleg Чт авг 27, 2009 12:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 01:59 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
4.6 Словарная статья.

Словарная статья представляет собой набор данных и кода, ассоциированных с неким ключевым именем (последовательностью символов, содержащих любые символы кроме пробельных).

Словарная статья традиционно включает в себя следующие поля:
cf - code field - поле кода
pf - parameter field - поле данных
nf - name field - поле имени
ff - flag field - поле флагов
lf - link field - поле связи

Изображение

обычно оперируют адресами указанных полей, поэтому используют аббревиатуры:
cfa, nfa, lfa, ffa, pfa.

Только поле связи (lf) является уникальным для любого слова. Поэтому, именно адрес поля связи имеет смысл использовать как глобальный идентификатор конкретного определения. Таким образом, все слова, позволяющие работать с полями слова должны как базу использовать lfa, а не nfa и не cfa.

4.7 Представление и хранение имен.
Имена словарных статей могут содержать фактически любую информацию, то есть хранить цифровые, символьные, спецсимвольные значения. С точки зрения парсера языка имена слов не должны содержать пробельных символов. Но возможны ситуации, когда имя слова является иконкой или даже мелодией.
Поэтому, не имеет смысла каким либо образом ограничивать представление имен внутри словарной структуры.
Для случая текстовых источников для удобства разбора текста одной лексемой считается последовательность символов не содержащих пробельных символов.

Имеет смысл рассматривать поле связки как универсальный идентификатор, а остальные данные как атрибуты.


Последний раз редактировалось mOleg Вт янв 05, 2010 09:38, всего редактировалось 8 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 02:00 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
5. Первый уровень языка - ФВМ

Первый уровень языка представляет собой описание обязательного, рекомендуемого и дополнительного наборов слов ФВМ, необходимых для реализации остальных уровней языка.
Базовый набор примитивов должен поддерживаться любой форт-системой, ссылающейся на данный стандарт.
Дополнительный набор примитивов не подлежит к обязательной реализации, а лишь рекомендован для реализации в виде примитивов для обеспечения более удобной и быстрой работы ФМ.

Сказанное выше не означает, что обязательный набор слов должен быть реализован в виде примитивов, а лишь означает то, что обязательный набор слов является обязательным в реализации для любой совместимой системы.


Последний раз редактировалось mOleg Вт янв 05, 2010 12:05, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 02:02 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
5.1 Базовая модель Форт-Машины.

Изображение

Форт-машина основана на 0-операндной модели, то есть в формате команды не кодируются регистры источники и приемники информации. В простейшем случае это четырехрегистровый (R1-R4) процессор, под двумя из регистров (RTOP,SUB) наращены стеки. Два арифметико-логических устройства (АЛУ) обеспечивают преобразование информации, причем, один работает с данными (дАЛУ) и жестко связан со стеком данных и регистром TOS (R4), а второй (аАЛУ) жестко связан с указателем интерпретации (R2), и отвечает за операции формирования адресов в памяти.
TOS – (top of stack) не смотря на общепринятое название является регистром аккумулятором, а так же адресным регистром, с участием этого регистра выполняются все операции над данными.
SUB – (subtop) это верхний элемент стека данных, который работает совместно с регистром TOS в случае двухоперандных операций с dALU и памятью. Под данным регистром наращен стек данных, кэширующий необходимые данные.
IP – (interpretation\instruction pointer в зависимости от того ФВМ или ФМ) указатель на следующую (еще не исполненную) команду; либо литеральные данные, содержащиеся в коде за текущей командой.
RTOS – верхний элемент стека возвратов, хранит адрес возврата из текущей процедуры. Под данным регистром наращен стек возвратов, хранящий трассу возвратов из процедур.
Управляющее устройство включает в себя дешифратор команд, устройство синхронизации, другие необходимые управляющие механизмы (в случае ФВМ оно фактически отсутствует).
ФМ может работать с различными моделями памяти и различными разрядностями данных, но в простейшем случае используется плоская модель памяти и одинаковые разрядности данных и адресов. Пространство данных стеков так же может быть расположено в любом месте, в том числе в общей памяти, но наиболее выгодно выносить каждый из стеков в отдельное адресное пространство. Доступ к стекам может вестись как только с вершины, так и произвольным образом в зависимости от методики реализации ВМ, однако, базовый набор слов предполагает, что доступ к стеку ведется только с одного его конца (то есть с вершины стека).

Так же возможно существования вспомогательных регистров различного назначения,
к примеру: TEMP, ADDR и подобные им.

В классическом случае любая команда выполняется за два такта (1 цикл = 2 такта ), на первом такте производится чтение очередной команды, на которую указывает IP (при этом IP инкрементируется на размер команды), на втором команда исполняется, что на два такта меньше по сравнению с RISC архитектурой. Данные всегда берутся со стека данных и туда же возвращаются, поэтому этапы дешифрации команды и сохранения результата совмещаются, соответственно, с чтением команды, и выполнением команды. Команды Форт-процессора не являются элементарными, и могут одновременно задействовать множество регистров и исполнительных устройств.

Формат команды выглядит следующим образом:
Opcode [Literal]
Опкод занимает 1 cell адресного пространства, за которым может следовать литеральное поле, выбираемое на втором такте цикла (команды LIT BRANCH CALL и подобные).
В опкоде не кодируются источники и приемники команд в явном виде, т.к. каждая команда работает с фиксированными, заранее известными регистрами, стеками и исполнительными устройствами, то есть обычно используется 0-операндная модель.
Каждое новое определение (последовательность опкодов, составляющих аналог подпрограммы в других языках программирования) так же является опкодом. Таким образом, набор команд процессора как бы расширяется с каждым новым определением (то есть во время работы количество команд растет). Однако при этом появляется деление на примитивы ( т.е. команды, исполняемые процессором в рамках одного цикла), и высокоуровневые определения, выполнение которых производится за множество тактов.
Вне зависимости от того, на реальном процессоре, либо на ВМ выполняется программа, базовый формат команды остается похожим, на описанный выше вариант.


Последний раз редактировалось mOleg Чт авг 27, 2009 12:23, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср авг 19, 2009 02:04 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4839
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 52 раз.
5.2 Базовый обязательный набор примитивов

Набор состоит из небольшого количества слов, которые могут быть
реализованы как в виде примитивов на подходящем языке программирования, так и
в виде "железа" внутри процессора.

DROP ( n --> )
- удалить верхнее значение с вершины стека данных
DUP ( a --> a a )
- поместить копию верхнего значения стека данных на вершину стека данных
SWAP ( a b --> b a )
- поменять местами два значения на вершине стека данных
OVER ( a b --> a b a )
- положить копию второго значения, лежащего в стеке данных, на вершину
стека данных

AR> ( r: addr --> d: addr )
- переместить адресную ссылку с вершины стека возвратов на вершину стека
данных.
A>R ( addr --> r: addr )
- переместить адресную ссылку с вершины стека данных на вершину стека
возвратов

EXIT ( r: addr --> )
- снять верхнее значение с вершины стека данных и записать его в IP
CALL ( --> r: addr )
- текущее значение IP сохранить на вершину стека возвратов, совершить
переход на адрес, сохраненный в коде за опкодом команды. Верхнее
значение стека возвратов должно указывать после выполнения операции
на адрес, следующий за адресной ссылкой перехода.

?BRANCH ( --> )
- перейти на адресную ссылку, находящуюся в коде за опкодом команды,
в случае если значение на вершине стека данных равно нулю , иначе
обойти адресную ссылку, и передать управление на код, находящийся
за ней.

AND ( a b --> n )
- произвести логическую операцию "и" над двумя числами, находящимися на
вершине стека данных, результат операции вернуть туда же.
XOR ( a b --> n )
- произвести логическую операцию "исключающее или" над двумя числами,
находящимися на вершине стека данных, результат операции вернуть туда
же.
OR ( a b --> n )
- произвести логическую операцию "или" над двумя числами, находящимися
на вершине стека данных, результат операции вернуть туда же.
ADD ( a b --> n )
- произвести сложение двух чисел, находящихся на вершине стека данных,
результат сложения оставить на вершине стека данных, в случае
переполнения установить флаг переполнения
2/ ( n --> u )
- арифметический сдвиг числа, лежащего на вершине стека данных на один
бит вправо

@ ( addr --> n )
- или FETCH - извлечь значение из памяти по адресу, находящемуся на
вершине стека данных, результат операции поместить на место адреса
! ( n addr --> )
- или STORE - сохранить значение в память по указанному адресу. Адрес
лежит на вершине стека данных, значение под ним, после совершения
операции оба удаляются.
LIT ( --> n )
- положить значение, лежащее в коде за LIT на вершину стека данных.

Всего 17 команд.
?????? что пропустил ?????
Базовый набор примитивов ФВМ может отличаться от приведенного выше,
но совместимая с данным стандартом Форт-система должа обязательно иметь
перечисленные выше примитивы.

'1. Команды DROP SWAP DUP OVER AND XOR OR ADD 2/ LIT работающие с числами могут
не работать с адресными ссылками, то есть:
AR> AR> SWAP A>R A>R
может быть не корректно выполнено в случае, если адреса представлены числами
двойной длины.
'2. В случае, если разрядность адресных ссылок не совпадает с разрядностью данных
слова, работающие с ними имеют префикс 'A', например A@ A!


Последний раз редактировалось mOleg Чт авг 27, 2009 12:24, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB