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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 131 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 9  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 13, 2006 17:26 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
2/ == lit(-2) shift
2* == lit(+2) shift

значит, shift с параметром - сложно, но можно! ;) Особенно для виртуальной машины. Для проца не так удобно - н. писать микропрограммы. :(

ты хотел сказать
Код:
2/ == lit(-1) shift
2* == lit(1) shift

2* 2/ сдвиг на один двоичный разряд...

так ли нужно r+ ? М.б. все-таки сделать ret попроще, т.к. он чаще применяется?
При наличии ret , call м. убрать ;)
Код:
: call  lit ret ;

но лучше оставить для скорости...

И с таким if -ом непонятка!
если применение
Код:
флаг if (флаг==TRUE==FFFF<>0) then

то переход д.б. по флагу==0 !!
Если называть if0 и учитывать это в программах - приведенный код пойдет

И условий для if-ов надо больше. Перехода по =0 мааало!!

_________________
With best wishes, in4.


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

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

in4 писал(а):
И с таким if -ом непонятка!
если применение
Код:
флаг if (флаг==TRUE==FFFF<>0) then

то переход д.б. по флагу==0 !!
Если называть if0 и учитывать это в программах - приведенный код пойдет


На самом деле это скорее не if, а ?BRANCH который в отличие от фортового берет со стека адрес перехода. По идее он ближе к DSSPшному или postskript-овому ветвелению. Просто так получается более гибкая команда.

Насчет флагов, тут есть несколько вариантов решения проблемы. Мне нравится вариант, когда все необходимые флаги мапятся в память. Тогда для проверки необходимости перехода достаточно: lit(f_addr) fetch lit(addr) if - это конечно длинновато, но согласитесь, что это стоит "упихивания" всего набора команд в 4бита 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 00:03 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
На самом деле это скорее не if, а ?BRANCH который в отличие от фортового берет со стека адрес перехода. По идее он ближе к DSSPшному или postskript-овому ветвелению. Просто так получается более гибкая команда.

но и более медленная и более длинная...:( а применяется часто. Наверное, 3я по частоте команда!
После call и ret .

Для ВМ может и подойти, для железа - :( плоховато...

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 00:17 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Вот чего нет - invert ! Мы же не собираемся работать с дополнением до 1(как Мур), а не до 2х, как обычно?
А если if сделать как в ДССП, пусть имеет 3 адреса перехода, по <0, по 0 и по >0 ?
Двойную арифметику сделать проблемно, надо перенос отслеживать, а так...

И все-таки можно систему команд расширить, если потребовать, чтобы переход и call были только в последнем просматриваемом ниббле! Это + 2(или даже 3) команды!
И переходы будут проще!

_________________
With best wishes, in4.


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

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

но и более медленная и более длинная... а применяется часто. Наверное, 3я по частоте команда!
После call и ret .

Для ВМ может и подойти, для железа - плоховато...


почему же медленная? Если кешировать два верхних элемента стека:

top & subtop то мы можем одновременно проверять subtop на равенство нулю, а top использовать, как адрес перехода.

А насчет железа: зато дешифратор команд влезет в 16 обычных блоков altera какого-нибудь EPF10K10 и проц, я так подозреваю тоже можно туда такой вместить.


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
in4 писал(а):
Вот чего нет - invert ! Мы же не собираемся работать с дополнением до 1(как Мур), а не до 2х, как обычно?


стоп invert = lit(-1) xor
c negate чуточку посложенее будет. На сколько я помню: lit(-1) xor lit(1) add

in4 писал(а):
А если if сделать как в ДССП, пусть имеет 3 адреса перехода, по <0, по 0 и по >0 ?
Двойную арифметику сделать проблемно, надо перенос отслеживать, а так...

Тут я не понял 8( Зачем так сложно.
флагов для перехода может быть целая куча, их только нужно извлечь из памяти по нужным адресам.


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

Зарегистрирован: Пт май 12, 2006 00:52
Сообщения: 88
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
c negate чуточку посложенее будет


lit(-1) mul

Умножение вы серией сдвигов делать собираетесь, что ли? При том, что оно на всех современных процессорах однотактовое?

_________________
... чтобы понять рекурсию, нужно сперва понять рекурсию ...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 11:25 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
not имхо то же самое,
тут, похоже, я уже сам путаться начинаю, что есть что :(
что invert - побитовая
инверсия. хотя, можно определить его и для другого дела
- для конверсии флага на стеке, когда результат 0, если
на стеке не ноль и результат -1, когда на стеке ноль.

а not и neg - согласно следующим определениям

: inv -1 xor ; : neg -1 xor 1+ ;

если в наборе xor нет, то через nand

: inv dup nand ; : neg dup nand 1+ ;

: xor 2dup nand dup >r nand r> swap >r nand r> nand ;


по поводу shift - в процессоре он скорее однобитовый, и может быть даже только правый, тогда:

: lshift dup add ; : lshiftc dup addc ;

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


Последний раз редактировалось WingLion Пт июл 14, 2006 12:23, всего редактировалось 1 раз.

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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
хотя, можно определить его и для другого дела
- для конверсии флага на стеке, когда результат 0, если
на стеке не ноль и результат -1, когда на стеке ноль.


Да-да, именно так.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 12:42 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
in4 писал(а):
Вот чего нет - invert ! Мы же не собираемся работать с дополнением до 1(как Мур), а не до 2х, как обычно?

Глюкнул... :( д.б. negate- изменение знака ... примеры для него... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 12:52 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Balancer писал(а):
Умножение вы серией сдвигов делать собираетесь, что ли? При том, что оно на всех современных процессорах однотактовое?


Не на всех. Его можно делать за один такт, но при необходимости экономить площадь можно отказаться от умножения, заменив его серией сдвигов-сложений.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 14, 2006 13:08 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
почему же медленная? Если кешировать два верхних элемента стека:

многие операции со стеком будут медленнее... :(
будет много пересылок между этими кешами... :(
Обычно кешируют только TOS - Top Of Stack (на традиционных архитектурах процов).

_________________
With best wishes, in4.


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

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

многие операции со стеком будут медленнее...
будет много пересылок между этими кешами...
Обычно кешируют только TOS - Top Of Stack (на традиционных архитектурах процов).


А ты видел хоть один современный проц, набор команд которого вмещался бы 4 бита?

Обьясни на пальцах, почему операции со стеком будут медленнее? Если весь стек помещается на кристалле?
А у нас архитектура нетрадиционная! И что с того?
Ну будет в худшем случае двойная загрузка регистров как при 2DROP или 2DUP.

Тогда к чему мы пришли - кто обобщит? Стоит ли обговорить стандартную модель форт-процессора? Как поступать с флагами арифметических операций?


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
oleg писал(а):
Тогда к чему мы пришли - кто обобщит? Стоит ли обговорить стандартную модель форт-процессора? Как поступать с флагами арифметических операций?


Думается, что никак. По сути, форт-процессор сводится к вариациям безоперандной системы команд, которую можно основать на стековой модели. Но можно обойтись и регистрами, тогда мнемоники ассемблера по-прежнему могут выглядеть похожими на Форт. Стандартной модели как таковой не будет - если даже ее и начертать на скрижалях, это только даст цель для критики и основу для всевозможных улучшений. Даже флаги - не обязательное решение. Детали аппаратного решения сильно зависят от возможностей аппаратуры и желаемого результата. Форт-процессор может и управлять LCD (тогда ему надо совсем немного ресурсов), и выступать в качестве центрального процессорного яжра (тогда это 32-разрядный процессор с большими стеками и развитой системой команд). Кто из них "настоящий" - а Форт его знает!...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 17, 2006 13:48 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
А ты видел хоть один современный проц, набор команд которого вмещался бы 4 бита?

Пока нигде ;) Сам над таким думал... ;) И продолжаю думать... ;)
Я рассматривал реализацию либо интерпретатора такого проца, либо JIT-компилятор.
Вот их-то реализация на процах традиционных архитектур и будет тормозить.
А если делать аппаратно, то этих ограничений нет... :)

_________________
With best wishes, in4.


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

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


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

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


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

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