Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 21:04

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
nop м. использоваться для выравнивания группы команд, если в адресуемую ячейку пихать несколько команд
16=1+5+5+5
8=4+4 тоже ;) Или как ты будешь адресоваться на половинку байта? ;)
oleg писал(а):
А четыре бита на команду еще не было К тому же если старший бит - признак call то разрядность шины адреса ограничивается 15 битами

не обязательно, если в команде кодируется не адрес, а смещение.
oleg писал(а):
А при предлагаемом мною подходе нет вообще никаких завязок на разрядность шин. Лишь бы разрядность данных была кратна разрядности адресов.

это не обязательное условие, можно не использовать лишние биты... ;)


разные условия я предлагал из расчета "код условия в команде", и не рассматривал отображение ресурсов на память... ;)

_________________
With best wishes, in4.


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

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

Потом (после написания тестов и примеров программ) все команды можно по частоте отсортировать. Частые - в 4х битные, остальные - в "префиксные"... ;) М. всего одного префикса хватит... ;)

И желательно */ к арифметике добавить или умножение с делением на нем делать...

_________________
With best wishes, in4.


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

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

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


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
in4 писал(а):
nop м. использоваться для выравнивания группы команд, если в адресуемую ячейку пихать несколько команд
16=1+5+5+5
8=4+4 тоже Или как ты будешь адресоваться на половинку байта?


Вообще можно и адресовать половинку байта. Просто сокращается все-тот же 1 бит в старшем разряде.
Тогда выравнивать ничего ненадо!
in4 писал(а):
А четыре бита на команду еще не было К тому же если старший бит - признак call то разрядность шины адреса ограничивается 15 битами

не обязательно, если в команде кодируется не адрес, а смещение.

Туда же8) Хотя должна присутствовать возможность записать адрес с помощью литерала.
Так как и call & if в предложенном варианте адрес перехода получают на стеке данных.

in4 писал(а):
oleg писал(а):
А при предлагаемом мною подходе нет вообще никаких завязок на разрядность шин. Лишь бы разрядность данных была кратна разрядности адресов.

это не обязательное условие, можно не использовать лишние биты...

Нет, обязательное -так как в случае data_stack_width = 32 а return_stack_width = 16 бит можно реализовать >R и R> а если они не кратны - то уже нельзя 8(

in4 писал(а):
разные условия я предлагал из расчета "код условия в команде", и не рассматривал отображение ресурсов на память...

Ну а я предлагаю в память все лишнее проекцировать!
Кстати для хохмы можно и алу в память спроекцировать и оставить лишь одну команду запуска алу 8)
а результат получать по необходимому смещению!!! Хотя изврат конечно страшный, но он ничем не хуже использования префикса для арифметических команд!
ВООТ 8)
in4 писал(а):
Я бы + и xor оставил в 4хбитных командах, а остальные вынес бы в команды с префиксом.
и м.б. все-таки 2 if-а? Хотя второй тоже можно в "префиксные"...

Не хочется префиксов. Лучше я резульаты работы алу в память замаплю!! Чес слово.
И зачем два ифа? Чем плох вариат с нулем? Флаги можно какие угодно получать просто прочитав их из памяти. Это может и не так красиво - но зато просто очень.
in4 писал(а):
Потом (после написания тестов и примеров программ) все команды можно по частоте отсортировать. Частые - в 4х битные, остальные - в "префиксные"... М. всего одного префикса хватит...

Да конечно хватит. Просто 32-е команды уже Чак Мур (впрочем у него по идее 28 команд было )
то есть уже никакой новизны не будет :)
in4 писал(а):
И желательно */ к арифметике добавить или умножение с делением на нем делать...

ага, и больше всего на кристале места будет занимать умножитель и делитель :( Или сделать умножение многотактным? то есть за один такт - одна итерация умножения? как у Чака :)

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


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

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

Так-то оно так, но при этом выборка команд будет сложнее, нужна дополнительная проверка.
Это усложняет систему(что хуже) и снижает быстродействие(не так критично).
Щедрый Мур адресует группу команд, забивая остаток группы nop-ами
oleg писал(а):
Туда же Хотя должна присутствовать возможность записать адрес с помощью литерала.
Так как и call & if в предложенном варианте адрес перехода получают на стеке данных.

С этим уж ничего не поделаешь... Обойти, конечно, можно, но это лишняя сложность... :( Я бы сейчас не возился. Потом посмотрим... ;)
oleg писал(а):
Нет, обязательное -так как в случае data_stack_width = 32 а return_stack_width = 16 бит можно реализовать >R и R> а если они не кратны - то уже нельзя 8(

Зя! Пусть d:32 и r:14, одна ячейка данных в стеке возвратов займет 3-4 ячейки. В реализации R> маскируем лишние биты. Или просто пакуем по-другому. Например, байт в ячейке возвратов. Лишние биты просто не используем при восстановлении! ;) Будет быстро, но много ячеек возвратов... ;)
Это усложнение, но только в реализации и только для некратных размеров стеков, а не везде. Программы будут работать в обоих случаях одинаково! Мы абстрагировались от некратности... ;) И наш машинно-независимый код опирается на стандартные(!) слова, просто с машинно-зависимой реализацией.
Идею о том, что можно делать машинно-независимые вещи на основе машинно-зависимых, я впервые встретил в статье Михаила Гассаненко в 93 или 94 году. Это очень важная идея и она должна быть основой стандарта!

_________________
With best wishes, in4.


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

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

Хуже. У тебя идет загрузка, м.б. логическая операция(можно обойти, по-разному отобразив флажки в память), а только потом сравнение. И так каждый раз! Для частых команд это не хорошо. if0 или аналог я буду отстаивать в основном наборе, очень желательно проверку на отрицательное, но ее я пока(пока нет аргументов ;) ) готов уступить... ;)
IMHO, реализация с префиксом отработает быстрее и будет меньше, чем альтернатива ;)
Можно и АЛУ сделать внешним устройством... Загружаешь операнды(ой, они уже в стеке! ;) , ладно, берем оттуда), загружаешь команду, читаешь ответ (о! он тоже уже в стеке!). Значит, АЛУ запускается записью в него вида операции...
Смотри, что получается! Префикс может играть роль короткой записи или короткого чтения твоих замапленых регистров!
4 бита(префикс) +4(операция) вместо 4(lit)+CELL(адрес флага)+4(load?)... ;)
oleg писал(а):
in4 писал(а):
И желательно */ к арифметике добавить или умножение с делением на нем делать...

ага, и больше всего на кристале места будет занимать умножитель и делитель Или сделать умножение многотактным? то есть за один такт - одна итерация умножения? как у Чака

Если ВМ, то команда, для кристалла если не получится команда, сделать многотактное... Программы разницы не заметят... ;)

_________________
With best wishes, in4.


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

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

Команда "Литерал" в этом случае может быть и скрытой, т.е. железяка, получив команду if или call автоматом считает, что ей сначала надо lit исполнить и вытащить адрес... Хотя, явный литерал может быть в каких-то случаях и удобнее.

oleg писал(а):
Нет, обязательное -так как в случае data_stack_width = 32 а return_stack_width = 16 бит можно реализовать >R и R> а если они не кратны - то уже нельзя 8(

Вообще-то, даже в кратном случае возникнут проблемы.
Откуда командам >R и R> знать, с чем они в данный момент работают? С данными или с адресом возврата? За этим программисту следить придется, и использовать либо по одной, либо по несколько R> и >R подряд, в зависимости от того, что делается. А универсальными эти команды могут быть только при равенстве ширины стеков.

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

oleg писал(а):
а результат получать по необходимому смещению!!! Хотя изврат конечно страшный, но он ничем не хуже использования префикса для арифметических команд!
ВООТ Cool


Это ж какие тормоза получатся!
Тут же вытаскивание результата АЛУ потребует литерала с адресом!
Хотя, конечно, если префикс обозвать "коротким литералом", то можно :)

oleg писал(а):
ага, и больше всего на кристале места будет занимать умножитель и делитель Sad Или сделать умножение многотактным? то есть за один такт - одна итерация умножения? как у Чака Smile


Совсем не факт, что много. В новых ПЛИС-ах умножители отдельные есть по несколько десятков на кристалле. А делитель можно и многотактным сделать, если совсем невмоготу без него.
В конце концов, есть же простая формула a/b = a*(1/b), и если b - константа, деление сводится к умножению :)
В крайнем случае, 1/b можно и таблично высчитать...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 26, 2006 15:52 
Цитата:
Вот только пользоваться этим все равно, что выполнять сложение, прибавляя по единичке.

BrainFuck :)


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт авг 29, 2006 03:22 
Chrono_Syndrome писал(а):
Цитата:
Вот только пользоваться этим все равно, что выполнять сложение, прибавляя по единичке.

BrainFuck


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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн окт 09, 2006 13:51 
А вот еще пара ссылок по тематике топика:)

http://www.rdrop.com/~cary/html/minimal ... n_set.html
http://www.youngprogrammers.net/ForthVM


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 27, 2007 17:30 
Покажу, как можно сделать DUP.
Код:
: DUP 0 PICK ;

: PICK 2* SP@ + @ ;

Вот 2* , SP@ , + и @ - это и есть примитивы. Добавим сюда ещё и CMOVE для реализации ROLL и явный примитив DROP - и можно реализовать все стековые слова, включая и расширения двойной длины.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб окт 27, 2007 17:49 
ИМХО: на расширения стековых слов для двойной длины из-за относительной редкости использования коды лучше не тратить, а сделать их через двоеточие:
Код:
: 2DROP DROP DROP ;
: 2DUP OVER OVER ;
: 2SWAP 3 ROLL 3 ROLL ;
: 2ROT 5 ROLL 5 ROLL ;
: 2OVER 3 PICK 3 PICK ;


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

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

: PICK 2* SP@ + @ ;

да что вы!
а еще можно OVER OVER NIP а так же 2DUP NIP и еще куча есть вариантов ;)

yug писал(а):
ИМХО: на расширения стековых слов для двойной длины из-за относительной редкости использования коды лучше не тратить, а сделать их через двоеточие:

к чему это все?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Минимальный набор слов Форта
СообщениеДобавлено: Пн янв 17, 2022 10:21 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 463
Откуда: Москва
Благодарил (а): 57 раз.
Поблагодарили: 22 раз.
Подниму тему из небытия, уж очень она интересная... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Минимальный набор слов Форта
СообщениеДобавлено: Пн янв 17, 2022 14:20 
Не в сети
Administrator
Administrator
Аватара пользователя

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


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

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


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

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


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

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