Forth
http://fforum.winglion.ru/

Всеобщий ассемблер для форта?
http://fforum.winglion.ru/viewtopic.php?f=16&t=828
Страница 1 из 10

Автор:  вопрос [ Ср июн 27, 2007 20:52 ]
Заголовок сообщения:  Всеобщий ассемблер для форта?

Для того, чтобы реализовать форт, нуно не так много операций.
И для того, чтобы описать процессор, нужно не так много ... типов операций :?
Возможен ли такой мета-ассемблер, на котором можно было бы реализовать любой ассемблер (или нужные операции любого ассемблера), просто подставив некоторые значения для нужного процессора.

Ну, например, скажем для умножения в х86 пригоден только определённый регистр

поэтому для * описание операции метаассемблера должно была бы
состоять из
полей


операция __________________ *
реализация _______________yes
ограничения ______________ o r location ; тут o r - операнды и результат
подробности_реализации __ la la la как-то реализуется

т.е. описание каждой операции включает 4 поля, часть которых можно вообще сделать опциональными (как тег "select" в html)

а на метаассемблере уже реализованы примитивы Форта.

сколько нужно процессорных операций, чтобы реализовать Форт? Если судить по предложению Winglio'на, не так много.

это заменило бы ВМ, которую нужно реализовать на обычном ассемблере.

и это делало бы Форт практически МГНОВЕННО переносимым с процессора на процессор

Это абстрактное рассуждение, но мне интересно - мжно ли? делали?

Автор:  вопрос [ Ср июн 27, 2007 20:54 ]
Заголовок сообщения: 

Разница между ВМ - в ВМ мы иммитируем регистры и стек, тут пользуемся реальными


меня всегда восхищала простота того, с чего начинается форт

Автор:  вопрос [ Ср июн 27, 2007 21:05 ]
Заголовок сообщения: 

Такой ассемблер включал бы в себя только:
    1. описание регистров (количество и название)
    2. описание операций с их ограничениями (+ - * / сдвиг сравнение логические )
    3. способы адрессации стека и данных
    4. способы ввода-вывода данных через внешние устройства


Причём везде достаточно 1-5 комманд?
Если даже 10
10 ( команды ) 4 ( их разновидности ) * ( --> 40 ) :)

Имея исходники примитивов форта, метаассеблер перебирая доступные операции, строил бы реализацию Форта

Автор:  mrack [ Ср июн 27, 2007 21:16 ]
Заголовок сообщения: 

или даже 8 каманд, или даже 4 каманды и кампилятор в 240 байт :)
пачимуто сразу подумалось про тему о брэйнфак языках,
на форуме есть :)

Автор:  вопрос [ Ср июн 27, 2007 21:18 ]
Заголовок сообщения: 

я серьёзно ...

Автор:  Mihail [ Ср июн 27, 2007 21:56 ]
Заголовок сообщения: 

вопрос писал(а):
Возможен ли такой мета-ассемблер, на котором можно было бы реализовать любой ассемблер


Чем форт не мета-ассемблер?

вопрос писал(а):
и это делало бы Форт практически МГНОВЕННО переносимым с процессора на процессор


Какие проблемы написать несколько примитивов? Куда проще!?
И их писать не надо можно их скомпилировать на (например) Си.
Листинг будет готовым набором примитивов.

tos+=*psp++; // +
tos*=*psp++; // *

*--psp=tos; // lit
tos=0x123;

{ int tmp; // ?branch
tmp=tos;
tos+=*psp++;
if(tmp) vvv();
}

итд

В общем, при готовом прототипе, в течении часа.

Автор:  вопрос [ Ср июн 27, 2007 22:02 ]
Заголовок сообщения: 

Хм... Зачем тогда делается ВМ?

Цитата:
В общем, при готовом прототипе, в течении часа.
Видимо, это будет несколько примитивный форт, хотя, см. выше о том, что меня восхщает.

И для этого ж нужен С, если он есть, можно компилировать гнуфорт под нужный процессор, (если я правильно помню, он на С сделан)

Автор:  white_TigR [ Ср июн 27, 2007 22:58 ]
Заголовок сообщения: 

Если я правильно понимаю, то кроспроцессорность должен поддерживать язык Си?
Если он это поддерживает, то просто указываем нужный процесор с одними и теми же исходниками для форта.
Если он это НЕ поддерживает, то как мы будем писать на нем кросспроцесорный код?!!!

Или я что-то неправильно понял...

Автор:  вопрос [ Чт июн 28, 2007 00:34 ]
Заголовок сообщения: 

Просто есть компиляторы С для почти любого процессора (значимого), насколько я знаю.

Автор:  in4 [ Чт июн 28, 2007 00:36 ]
Заголовок сообщения: 

вопрос писал(а):
Хм... Зачем тогда делается ВМ?

Для удобства отладки и для упрощения ассемблера виртуального процессора и сведение его к набору примитивов Форта.

Автор:  вопрос [ Чт июн 28, 2007 01:07 ]
Заголовок сообщения: 

in4 писал(а):
вопрос писал(а):
Хм... Зачем тогда делается ВМ?

Для удобства отладки и для упрощения ассемблера виртуального процессора и сведение его к набору примитивов Форта.

А я не то же "предлагаю"?
Только "стек и регистры не иммитация, а настоящие"

И переносимость без С для которого компилятор делать долго.

Автор:  begemot [ Чт июн 28, 2007 03:45 ]
Заголовок сообщения: 

что то я не понял .. по моему глубокому мнению :-) универсального ассемблера быть не может ..
у одного процессора он один .. у другого другой ... а в некоторые просто форт вшит .. :-) . тоже хотите в такие процессора мета ассемблер ?

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

си конечно хорошо .. но как то не очень для такого дела .. особенно когда форт применяет во встраевымых системах с памятью в 8000 слов

Автор:  вопрос [ Чт июн 28, 2007 08:53 ]
Заголовок сообщения: 

begemot писал(а):
что то я не понял .. по моему глубокому мнению :-) универсального ассемблера быть не может ..
у одного процессора он один .. у другого другой ... а в некоторые просто форт вшит .. :-) . тоже хотите в такие процессора мета ассемблер ?

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

си конечно хорошо .. но как то не очень для такого дела .. особенно когда форт применяет во встраевымых системах с памятью в 8000 слов

Я наоборот против реализации на С, если бы был такой метаассемблер, С (трудоёмкость реализации компилятора нужно обрисовать?) не нужен ...

для тех, в которые форт вшит, обычный их ассемблер уже будет метаассемблером.

Автор:  chess [ Чт июн 28, 2007 18:28 ]
Заголовок сообщения: 

Насколько я понял, вопрос предлагает создать минимальный набор виртуальных микрокоманд "Форт-процессора" вместо набора реальных команд процессора, на котором крутится Форт. Затем с помощью этого набора определить (задать) примитивы Форта.
В дальнейшем каждая микрокоманда этого минимальный набора подменяется (определяется) через реальные команды того процессора, на котором будет крутиться Форт. Так как таких микрокоманд очень мало, то определить
их через реальные команды просто.
Все это действительно просто. Но... Это еще одна ступень на пути замедления и без того медленного кода Форта.
Почти аналогичный подход демонстрирует Понятов со своим байт-кодом. Замедлить Форт несложно. Гораздо сложнее его потом ускорить. :o

Автор:  вопрос [ Чт июн 28, 2007 19:10 ]
Заголовок сообщения: 

chess писал(а):
Насколько я понял, вопрос предлагает создать минимальный набор виртуальных микрокоманд "Форт-процессора" вместо набора реальных команд процессора, на котором крутится Форт. Затем с помощью этого набора определить (задать) примитивы Форта.
В дальнейшем каждая микрокоманда этого минимальный набора подменяется (определяется) через реальные команды того процессора, на котором будет крутиться Форт. Так как таких микрокоманд очень мало, то определить
их через реальные команды просто.
Все это действительно просто. Но... Это еще одна ступень на пути замедления и без того медленного кода Форта.
Почти аналогичный подход демонстрирует Понятов со своим байт-кодом. Замедлить Форт несложно. Гораздо сложнее его потом ускорить. :o

Почти, с одним НО - я предлагаю ОБОЗНАЧИТЬ через некий всеобщий ассемблер реальные команды реальных процессоров (т.е. нет дополнительной ступени), команды метаассемблера не "реализуются", они И ЕСТЬ команды реального ассемблера, только более абстрактно обозначенные ("указатель на команду вообще" вместо cs-ip) , замедления нет.

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

Страница 1 из 10 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/