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

...
Google Search
Forth-FAQ Spy Grafic

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




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

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

Допустим, CELL 32 разряда. Как хорошо сделать С! ?
Код:
: C! ( char c-addr -- )  DUP >R  @ FF INVERT AND  OR  R> ! ;

Плохо :(

Добавить команд С>CELL ( байт #байта cell -- cell1) для доступа к соотв. байту CELL ?
Код:
: C! ( char c-addr -- )  DUP >R 3 AND  R> 3 INVERT AND DUP >R @ C>CELL R> ! ;

Тоже не лучше...

С выравниванием буферов на CELL можно работать, но при работе с краями буферов будут трудности.
Похоже, надо адресацию по 1 по 2 и по 4=CELL ...

_________________
With best wishes, in4.


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

Зарегистрирован: Вс май 07, 2006 17:38
Сообщения: 6
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Извините за оффтоп, но это сильно напоминает мне преподавателя из института, который говорил, что любую схему можно собрать на 315-ых транзисторах (КТ315). Вкюя их особым образом получим и сопротивление, и ёмкость, и диод...


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

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


Да, разумеется. В приводимом примере результат от 2И записывался в следующий разряд :) Так что все эти вещи в основном из "академической теории". На практике надо делать то, что можно, пока на это есть ресурсы. Образно и нестрого выражаясь, искать своеобразную точку перегиба на шкале "сложность - производительность".


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

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
WingLion писал(а):
: R@ R> DUP >R ; и : RDROP R> DROP ; -- еще и лишнюю глубину стека данных используют.


Надо учесть адрес возврата не стеке возвратов.

: R@ R> R> DUP >R SWAP >R ; и : RDROP R> R> DROP >R ;


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

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

: R@ R> R> DUP >R SWAP >R ; и : RDROP R> R> DROP >R ;


Во как я лопухнулся... :(
Значит, точно надо в железе эти слова делать сразу.

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


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

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


Есть такой вариант без адресного регистра:

: move ( addr addr --> addr addr ) OVER C@ OVER C! ;

: CMOVE ( addr addr Count --> )
>R BEGIN R@ WHILE move 1.1 D+ R-- REPEAT RDROP 2DROP ;
Где move & r-- должны быть зашиты в железе.

move - лучше в железе, так как можно не гонять стек туда-сюда на два элемента.
А r-- или r- или даже r+ лучше для организации счетчика точнее даже счетчиков.

Удачи


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

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

Манипуляции со стеками:
DUP DROP OVER NIP >R R> Выражаются через них: SWAP ROT
Арифметика
+ - * / AND OR XOR NOT SHL SHR = > <
Управление программой
JMP IF CALL RET
Память
@ ! LIT (загрузка литерала)
Разновидности @ ! требуются для каждого адресного пространства.


А как вам такой набор:
0- lit
1- call
2- if
3- >R
4- R>
5- R+
6- R@
7- dup
8- drop
9-over
A- add
B- and
C- xor
D- shift
E- fetch
F- store

Все команды в 4 бита &)


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

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

Вот только, каких-то команд в наборе не хватает...
ret не вижу, например... (на nop можно и плюнуть, хотя он нужен, если команды паковать в слова)
swap потребует длинной подпрограммы.
: swap over >R >R drop R> R> ;

короче, надо думать...

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


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
oleg писал(а):
А как вам такой набор:
0- lit
1- call
2- if
3- >R
4- R>
5- R+
6- R@
7- dup
8- drop
9-over
A- add
B- and
C- xor
D- shift
E- fetch
F- store

нет ret :( - самое худшее, остальное решаемо!!
lit call if - надо данное/адрес

что делает R+ поподробнее

fetch - требует адрес
store - требует данное и адрес

там, где нужны дополнительные данные, н. иметь правила их получения.

какая разрядность?
16бит? - тогда трудности с обработкой байтовых строк.

8бит? - малое адресное пространство :(

Я склоняюсь к комбинированному варианту.
CELL=8бит, команды тоже кодируются по 4 бита(ниббл), но значения кодов команд разные в зависимости от того, где стоит, в старшем ниббле, или в младшем.
Был еще вариант в 16 бит поместить 3 5-битные команды и бит для тегов.

_________________
With best wishes, in4.


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

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

Насчет ret == r> dup if


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

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

а что именно if делает, примеры применения?

_________________
With best wishes, in4.


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

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

да, еще execute надо как-то реализовывать...
можно было бы >R ret, если бы ret был...

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


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Для экономии можно вместо and и xor оставить только NAND

Код:
: INVERT ( a --~a)   DUP NAND ;
: AND ( a b -- a&b )   NAND INVERT ;
: OR ( a b -- a|b )   INVERT SWAP INVERT NAND ;  \ можно ли лучше?
: XOR ( a b -- a xor b )    OVER OVER OR -ROT NAND NAND INVERT ;   \ можно ли лучше?

Это идея, ее можно переписать в указанном базисе команд.

или NOR, что там даст XOR попроще?

и 2/ жалко... :(
без ухищрений сделать не получится...

_________________
With best wishes, in4.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Кстати, call/ret хорошо бы иметь быстрыми. Если ret будет превращаться в цепочку действий, будут большие потери на вызовах слов (а Форт любит факторизацию).
Вообще, 16 команд - любопытно. Это можно погрызть :) Аргумент "против" (сугубо хищнический, ибо ПЛИСовая специфика) - может появляться соблазн добавить какие-то удобные команды (удобные для данного проекта), а места под них уже нет :(
Да, и еще. Сейчас есть тенденция организации памяти в ПЛИС по 9 бит. И не только в ПЛИС. Это сделано для того, чтобы хранить "честный" (не сгенерированный) бит четности, который можно использовать и как данные.


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

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


просто добавляет к верхнему элементу стека возвратов верхнее значение со стека данных.
то есть R> + >R

in4 писал(а):
нет ret - самое худшее, остальное решаемо!!
lit call if - надо данное/адрес


Значит насчет if = ( flag addr --> ) берет два параметра, куда идти и идти ли вообще, то есть:

lit(addr) if аналогично обычному if

тогда ret == r> dup if
in4 писал(а):
какая разрядность?
16бит? - тогда трудности с обработкой байтовых строк.


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

WingLion писал(а):
да, еще execute надо как-то реализовывать...
можно было бы >R ret, если бы ret был...


execute == dup if ( если только переход не на нулевой адрес ;)


in4 писал(а):
или NOR, что там даст XOR попроще?

и 2/ жалко...
без ухищрений сделать не получится...


XOR мне нравится больше - легче обойтись без or

2/ == lit(-2) shift
2* == lit(+2) shift

Еще вопросы?


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

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


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

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


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

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