Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 07:25

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 98 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 7  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 31, 2009 23:17 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
mOleg писал(а):?BRANCH – перейти на адресную ссылку, находящуюся в коде за опкодом команды, в случае если значение на вершине стека данных отличается хоть в одном бите от нуля, иначе обойти адресную ссылку, и передать управление на код, находящийся за ней.

Естественнее для железа делать переход, если на стеке 0. Тогда это IF. Арифметика неоднозначна - она ведь может выражаться через какие-то простые вещи, а то и вообще не требоваться. SWAP стоит отдельным пунктом в стековых манипуляциях, поскольку модифицирует две ячейки стека сразу.

а какая разница? по нулю или по не-нулю? разница ведь между AND и OR

но без SWAP очень тяжело, впрочем >R R> ничем не лучше SWAP

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
а какая разница? по нулю или по не-нулю? разница ведь между AND и OR


2 2 = IF если-два-равно-двум THEN

Если на стеке 0, IF должен обеспечить переход, а если не ноль, то перехода нет, исполняется если-два-равно-двум.

mOleg писал(а):
но без SWAP очень тяжело, впрочем >R R> ничем не лучше SWAP

SWAP появляется, но разными способами. В любом случае, аппаратно дешевле делать его в два приема, и тут возможны варианты.


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
тут кстати пришла идея о том,что сравнения не должны удалять оба значения со стеком.
то есть что-то:
eq ( a b --> a flag )
gt ( a b --> a flag )
и так далее, по крайней мере чаще встречается сравнение значения с несколькими другими, а не простое сравнение

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
то есть что-то:
eq ( a b --> a flag )
gt ( a b --> a flag )
и так далее, по крайней мере чаще встречается сравнение значения с несколькими другими, а не простое сравнение

И что с этим сделать? Положить в ядро в обязательном порядке? Положить факультативно? Заменить существующие сравнения, обеспечив веселую жизнь людям, которые уже привыкли к удалению со стека значений?


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Хищник писал(а):
И что с этим сделать?

подумать :)
привычки меняются просто, если решение эффективно.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
DROP - удалить верхнее значение с вершины стека данных
DUP - поместить копию верхнего значения стека данных на вершину стека данных
SWAP - поменять местами два значения на вершине стека данных
OVER - положить копию второго значения, лежащего в стеке данных, на вершину стека данных


сие просто совпадает.

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


Эти - я пока не вижу отличия от R> и >R можно, конечно и A прибавить к названию, но зачем?

mOleg писал(а):
EXIT - снять верхнее значение с вершины стека данных и записать его в IP


по описанию неотличимо от моего RET. Надо ли делать алиасы с другими названиями?

EXIT в форте, вообще-то имеет и другое назначение, хотя оно может и совпасть по действию с RET в каких-то реализациях.



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


формально, аналогично IF в моем варианте, только не уверен на счет условия. Больше на IFNOT смахивает.
Впрочем, зафиксировать можно мнемоники и IF и IFNOT, a в реализациях - на усмотрение разработчика, какой из них или оба делать.



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


это совпадает. 2/ - у меня просто не прописано - оно должно в группу SWAP попасть, как операторная команда, не меняющая глубину стека данных.

mOleg писал(а):
@ - или FETCH – извлечь значение из памяти по адресу, находящемуся на вершине стека данных, результат операции поместить на место адреса
! - или STORE – сохранить значение в память по указанному адресу. Адрес лежит на вершине стека данных, значение под



Алиасы для @ и ! можно спокойно прописать

mOleg писал(а):
LIT - положить значение, лежащее в коде за LIT на вершину стека данных.


Аналогично, только в моем варианте не уточняется, где лежит значение прямо за LIT или после выравнивания адреса после LIT. Чтобы данные лежали по ровному адресу, а не как бог пошлет.

Итак, согласоваными можно считать:

DUP DROP SWAP OVER

AND OR XOR ADD 2/

@ = FETCH
! = STORE
LIT


под вопросом:

AR> A>R или R> >R или и то и другое с фиксацией разной интерпретации действия

?BRANCH IF IFNOT надо четко понять, чему эквивалентно ?BRANCH - IF или IFNOT и закрепить алиасы

EXIT RET - тоже пока вопрос делать ли EXIT = RET

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
mOleg писал(а):AR> - переместить адресную ссылку с вершины стека возвратов на вершину стека данных
A>R - переместить адресную ссылку с вершины стека данных на вершину стека возвратов
Эти - я пока не вижу отличия от R> и >R можно, конечно и A прибавить к названию, но зачем?

это на случай, если разрядность стеков не совпадает. То есть адресая шина может быть уже, и стек тоже уже.
то есть >R может выглядеть как A>R A>R
Вообще об этом уже писалось. Address To Return stack короче

WingLion писал(а):
mOleg писал(а):EXIT - снять верхнее значение с вершины стека данных и записать его в IP
по описанию неотличимо от моего RET. Надо ли делать алиасы с другими названиями?
EXIT в форте, вообще-то имеет и другое назначение, хотя оно может и совпасть по действию с RET в каких-то реализациях.

другое - это какое назначение?
в Форте привычнее EXIT а не RET

WingLion писал(а):
mOleg писал(а):?BRANCH – перейти на адресную ссылку, находящуюся в коде за опкодом команды, в случае если значение на вершине стека данных отличается хоть в одном бите от нуля, иначе обойти адресную ссылку, и передать управление на код, находящийся за ней.
формально, аналогично IF в моем варианте, только не уверен на счет условия. Больше на IFNOT смахивает.
Впрочем, зафиксировать можно мнемоники и IF и IFNOT, a в реализациях - на усмотрение разработчика, какой из них или оба делать.

можно сказать проще - условное ветвление необходимо (и точка), как будет называться, и по какому случаю будет переход - вторично, но логичнее так, как в IF.

WingLion писал(а):
mOleg писал(а):LIT - положить значение, лежащее в коде за LIT на вершину стека данных.
Аналогично, только в моем варианте не уточняется, где лежит значение прямо за LIT или после выравнивания адреса после LIT. Чтобы данные лежали по ровному адресу, а не как бог пошлет.

я бы даже специально не фиксировал где хранится литерал (то что у меня от лукавого)

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
это на случай, если разрядность стеков не совпадает. То есть адресая шина может быть уже, и стек тоже уже.
то есть >R может выглядеть как A>R A>R
Вообще об этом уже писалось. Address To Return stack короче


Тогда, просто фиксируем мнемоники R> >R AR> A>R с соответствующими действиями, а совпадут они или не совпадут в конкретной железке - не суть.
ok?


mOleg писал(а):
другое - это какое назначение?
в Форте привычнее EXIT а не RET


EXIT - возврат из Форт-слова. В подпрограммном коде оно совпадает с RET, в шитом - совсем не обязательно.
Впрочем, если настаиваешь, можно сделать EXIT вместо RET, но тогда RET запретить для использования в других смыслах.
Или прямо записать, что EXIT = RET.


mOleg писал(а):
можно сказать проще - условное ветвление необходимо (и точка), как будет называться, и по какому случаю будет переход - вторично, но логичнее так, как в IF.


Если мы делаем стандарт, то поведение надо прописать прямо без колебаний. Просто пишем ?BRANCH = IF а IFNOT - записываем как мнемонику с определенным действием, но не обязательным для реализации в железе.


mOleg писал(а):
я бы даже специально не фиксировал где хранится литерал (то что у меня от лукавого)


ok, значит, LIT можно считать согласованным.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
mOleg писал(а):это на случай, если разрядность стеков не совпадает. То есть адресая шина может быть уже, и стек тоже уже.
то есть >R может выглядеть как A>R A>R
Вообще об этом уже писалось. Address To Return stack короче
Тогда, просто фиксируем мнемоники R> >R AR> A>R с соответствующими действиями, а совпадут они или не совпадут в конкретной железке - не суть.
ok?

мне кажется, что стоит только A>R и AR> оставить, так как >R и R> нужно для хранения данных отличных от адресов! а значит в основную функциональность их можно не включать. То есть я за то, чтобы оставить AR> A>R и все

WingLion писал(а):
mOleg писал(а):другое - это какое назначение?
в Форте привычнее EXIT а не RET
EXIT - возврат из Форт-слова. В подпрограммном коде оно совпадает с RET, в шитом - совсем не обязательно.
Впрочем, если настаиваешь, можно сделать EXIT вместо RET, но тогда RET запретить для использования в других смыслах.
Или прямо записать, что EXIT = RET.

это вопрос. Вообще стоит почитать статью Гасаненко OPEN INTERPRETER
а потом вернуться снова к этой теме.

WingLion писал(а):
mOleg писал(а):можно сказать проще - условное ветвление необходимо (и точка), как будет называться, и по какому случаю будет переход - вторично, но логичнее так, как в IF.
Если мы делаем стандарт, то поведение надо прописать прямо без колебаний. Просто пишем ?BRANCH = IF а IFNOT - записываем как мнемонику с определенным действием, но не обязательным для реализации в железе.

IF и IFNOT по сути не являются переходами, а являются словами, которые компилируют переходы. Что там в них внутри не стоит фиксировать, и это уже другой уровень. Поэтому, либо классический ?branch либо как-нить еще назвать, к примеру, ?JMP или ?>IP короче это уже не важно.
логичнее с точки зрения мнемоники переход по ненулю, с точки зрения форта по отличному от нуля значения.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Зафиксировано на данный момент - обязательные к реализации:
DUP DROP SWAP OVER

AND OR XOR ADD 2/

@ = FETCH
! = STORE
LIT


Не обязательные для реализации, но фиксируются мнемоники:
SUB ( dd2 dd1 --> dd2-dd1)
MUL ( dd2 dd1 --> dd2*dd1)

INC (dd2 dd1 --> dd2 dd1+1)
DEC (dd2 dd1 --> dd2 dd1-1)
NEG (dd2 dd1 --> dd2 -dd1)

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
Не обязательные для реализации, но фиксируются мнемоники:
SUB ( dd2 dd1 --> dd2-dd1)
MUL ( dd2 dd1 --> dd2*dd1)
INC (dd2 dd1 --> dd2 dd1+1)
DEC (dd2 dd1 --> dd2 dd1-1)
NEG (dd2 dd1 --> dd2 -dd1)

ну посмотри же еще раз на то, что я предлагаю как прообраз стандарта. Обрати внимание на структуру!
это пойдет в: 5.2 Расширенный набор примитивов и туда войдет еще с пол сотни, а может и больше примитивов!

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
IF и IFNOT по сути не являются переходами, а являются словами, которые компилируют переходы. Что там в них внутри не стоит фиксировать, и это уже другой уровень. Поэтому, либо классический ?branch либо как-нить еще назвать, к примеру, ?JMP или ?>IP короче это уже не важно.
логичнее с точки зрения мнемоники переход по ненулю, с точки зрения форта по отличному от нуля значения.


ok, это я ступил. Фиксируем ?BRANCH


mOleg писал(а):
То есть я за то, чтобы оставить AR> A>R и все


Но, хотя бы в необязательный список мнемоники >R и R> включить не против?

mOleg писал(а):
это вопрос. Вообще стоит почитать статью Гасаненко OPEN INTERPRETER
а потом вернуться снова к этой теме.


А можно по-русски объяснить в чем там суть, а то, переводчик из меня как из свиньи апельсин.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
mOleg писал(а):
ну посмотри же еще раз на то, что я предлагаю как прообраз стандарта. Обрати внимание на структуру!
это пойдет в: 5.2 Расширенный набор примитивов и туда войдет еще с пол сотни, а может и больше примитивов!


Мне казалось, что мы здесь пытаемся согласовать нечто общее безотносительно к прообразам стандартов.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
WingLion писал(а):
ok, это я ступил. Фиксируем ?BRANCH

да. А переход по нулю - я согласен с Хищником :)

WingLion писал(а):
Но, хотя бы в необязательный список мнемоники >R и R> включить не против?

да конечно же! в том то и суть, все лишнее будет там.

WingLion писал(а):
А можно по-русски объяснить в чем там суть, а то, переводчик из меня как из свиньи апельсин.

ок, я сейчас как раз переводом ее занимаюсь. Подожди с недельку.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Зафиксировано на данный момент - обязательные к реализации:

?BRANCH
AR>
A>R

DUP DROP SWAP OVER

AND OR XOR ADD 2/

@ = FETCH
! = STORE
LIT


фиксируются мнемоники для расширенного набора:
>R
R>

NOP
SUB ( dd2 dd1 --> dd2-dd1)
MUL ( dd2 dd1 --> dd2*dd1)

INC (dd2 dd1 --> dd2 dd1+1)
DEC (dd2 dd1 --> dd2 dd1-1)
NEG (dd2 dd1 --> dd2 -dd1)

mOleg писал(а):
ок, я сейчас как раз переводом ее занимаюсь. Подожди с недельку.


Значит, ждем недельку. Из-за EXIT и RET

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

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


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

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


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

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