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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: И снова - 16 Minimal instructions.
СообщениеДобавлено: Ср апр 07, 2010 23:41 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
0 NOP выборка следующей команды (нет операции)
1 ?BRANCH (IFNZ) переход, если на стеке не ноль
2 LIT загрузка непосредственного литерала на стек ( --> data )
3 @ извлечь данное по адресу из стека ( addr --> data=mem[addr])
4 ! сохранить даное в памяти по адресу ( data, addr --> )
5 CALL вызов попрограммы ( вызов адресного интерпретатора)
6 RET возврат из подпрограммы
7 DUP дублирование данного с вершины стека
8 DROP удаление данного с вершины стека
9 SWAP перестановка двух элементов на вершине стека
10 OVER копирование второго элемента стека
11 AR> переместить данное со стека данных на стек возвратов
12 A>R переместить данное со стека возвратов на стек данных
13 NAND поразрядное логическое "И-НЕ" двух верхних элементов стека ( d1 d1 --> d1 nand d2)
: NOT DUP NAND ; поразрядное логическое инвертирование верхнего элемента стека
: OR NOT SWAP NOT NAND ; поразрядное логическое "ИЛИ" двух верхних элементов стека ( d1 d1 --> d1 or d2 )
: AND NAND DUP NAND ; поразрядное логическое "И"
: XOR OVER OVER NAND DUP >R NAND SWAP R> NAND NAND ; поразрядное "Исключающее ИЛИ" ( d1 d1 --> d1 xor d2)
14 ADD сложить два верхних элемента стека (d1 d2 --> d1+d2)
: SUB SWAP NOT ADD NOT ; вычесть верхнее из нижнего (d1 d2 --> d2-d1)
15 2/ разделить верхний элемент стека на 2
: 2* DUP ADD ;
__________
итого 16 команд без префиксов (зеленым обозначено доопределение нужных команд)

9.04.2010 - добавлено зеленое определение SUB

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


Последний раз редактировалось WingLion Пт апр 09, 2010 00:21, всего редактировалось 1 раз.

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

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 380
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
А че DUP и SWAP под нож не пустили? чтоб 16?
И, кстати, почему AR>/A>R, а не PUSH/POP?


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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
А вот если вместо NOT , N?BRANCH (т.е. ?BRANCH наоборот)
сдается мне что пользы больше будет :shuffle;

forther писал(а):
А че DUP и SWAP под нож не пустили?

Да вы что :shock: этож одни из самых "популярных" примитивов.
Нельзя так на святое... :lol:


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

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


"под нож" пустили NOT, OR и XOR определения которых через NAND специально выдлены в списке, чтобы вопросов не было на их счет.

forther писал(а):
И, кстати, почему AR>/A>R, а не PUSH/POP?


Когда в процессоре два стека, чистые PUSH/POP, без указания куда и откуда эти PUSH/POP, становятся бессмысленными.

a A>R и AR> вместо >R и R> - потому что об этом раньше была договоренность.

_Harry писал(а):
А вот если вместо NOT , N?BRANCH (т.е. ?BRANCH наоборот)
сдается мне что пользы больше будет shuffle


: N?BRANCH DUP NAND ?BRANCH ;
и аналогично, если наоборот:
: ?BRANCH DUP NAND N?BRANCH ;

А NOT в списке примитивов и нет. Зеленым выделено определение нужных примитивов через те что есть.

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

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


Последний раз редактировалось WingLion Пт апр 09, 2010 00:23, всего редактировалось 1 раз.

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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
WingLion писал(а):
: ?BRANCH DUP NAND N?BRANCH ;

Понятно все что нужно можно сделать на ЛА7 такая вот схемотехника :D


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

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


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
nand-а одного для смены знака маловато. Надо еще и инкремент, а это потянет за собой LIT или кучу извратов с NAND...
так что, еще вопрос, стоит ли выделка овчинки?..
_Harry писал(а):
все что нужно можно сделать на ЛА7

на ЛА3 однако :)

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
WingLion писал(а):
nand-а одного для смены знака маловато. Надо еще и инкремент, а это потянет за собой LIT или кучу извратов с NAND...
так что, еще вопрос, стоит ли выделка овчинки?..

Так я о чем и говорю. Инверсия, потом +1. А как тогда вообще вычитать?


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

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

: SUB SWAP DUP NAND ADD DUP NAND ;

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


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

Зарегистрирован: Сб май 13, 2006 23:37
Сообщения: 380
Благодарил (а): 1 раз.
Поблагодарили: 10 раз.
WingLion писал(а):
: SUB SWAP NOT ADD NOT ;
или после подстановки через NAND

: SUB SWAP DUP NAND ADD DUP NAND ;


Вот что получается, когда не тупо, а пополоскать (подумать).


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

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 412
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 4 раз.
WingLion писал(а):
_Harry писал(а):
все что нужно можно сделать на ЛА7

на ЛА3 однако

Ну я про 155 серию уже и забыл.
Это про КМОП було :D 561ЛА7 4х2И-НЕ
Экономить электроинергию однако надо :P


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
А если сделать команду RETZ (возврат, если на стеке ноль, иначе удаление числа со стека возвратов), то можно будет убрать
?BRANCH, который определится через LIT >R RETZ. При этом JMP будет >R 0 RETZ. Но это из разряда "очумелые мозжечок и гипоталамус", потому что надо же еще придумать, а что бы такого более полезного впихнуть в освободившийся опкод.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Думаю, наиболее полезным тут будет *, чтобы не изворачиваться для ее реализации программно.
Даже не просто *, a М*, тогда
: * M* DROP ;
: 2/ 0x8000 M* SWAP DROP ;
\ для 32-битного варианта - 0x8000 -> 0x80000000
и освобождается еще один опкод.. ха! ;)
прямое деление в список инструкций добавить, что ли? :))

При жесткой необходимости можно еще освободить и:
: OVER SWAP >R DUP R> SWAP ;

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Есть еще такой резерв, как memory-mapped устройства. Можно что-то сажать в адресное пространство памяти, писать в определенные ячейки операнды, и забирать откуда-нибудь данные. Это для редко используемых, но не выражающихся через базовый набор команд.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7958
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
whiteTigr добавил профайлер для форт-процессора. Проверим в нем несколько программ, мы выяснили, что обычные команды (т.е. не переходы и не литералы) составляют 25-30% от общего количества команд, компилируемых в программу. Т.е., сокращая длину команды, мы сокращаем размер вот этих 25% опкодов, оставляя при этом неизменными остальные 75%. При этом число тактов растет, потому что загнать 32-битный литерал по 16-разрядной шине можно за 2 такта, а по 4-битной придется за 8. Так что пока видится в основном доведение компактности до упора, а вот производительность серьезно пострадает.


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

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


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

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


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

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