Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб апр 20, 2024 08:16

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 175 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10 ... 12  След.
Автор Сообщение
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Ср дек 03, 2014 20:52 
mOleg писал(а):
Уж лучше тогда в 6 бит команды упаковывать 8) код еще плотнее выйдет.

Ну, некоторые таки в 8 бит честно Форт уложили...
http://www.atmel.com/Images/doc4747.pdf


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 06:42 
Не в сети
Moderator
Moderator
Аватара пользователя

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

source file: f2a.fts


memory/ buff.fts


\ -- буфер для склейки строк ---------------------------------------------------
USER-VALUE outbuf

\ создать буфер размером в 1 МБ (должно хватать)
: init-buf 0x100000 Buffer TO outbuf ;

\ освободить занятый буфер
: del-buf outbuf Retire ;

\ добавить в буфер строку текста
: +>buf ( asc # --> ) outbuf >Buffer DROP ;

\ вернуть содержимое буфера
: buf> ( --> asc # ) outbuf Buffer> ;

\ открыть буфер
: buf< ( --> ) outbuf Clean ;

\ -- сохранение содержимого в файл ---------------------------------------------

0 VALUE FId

\ создать файл с заданным именем
: file ( asc # --> fid ) W/O CREATE-FILE THROW TO FId ;

\ сохранить содержимое буфера в файл
: save ( fid --> )
>L buf> L@ WRITE-FILE THROW
L> CLOSE-FILE THROW ;

\ -- создание новой метки ------------------------------------------------------

USER-VALUE LastLab

: l>name ( lab --> asc # ) S>D 0x10 {# # # # # s" lab_" HOLDS #> ;

\ создать новую метку, вернуть имя
: label ( --> lab asc # ) LastLab 1 + DUP TO LastLab DUP l>name ;

\ -- словарь для хранения макросов

VOCABULARY MACRO

\ завершить создание макроса
: ;M ( --> ) [COMPILE] ; IMMEDIATE DEFINITIONS ; IMMEDIATE

\ начать создание макроса с указанным именем
: (:) ( asc # --> ) ALSO MACRO DEFINITIONS PREVIOUS S: ;

\ начать создание макроса
: M: ( /name --> ) NextWord (:) ;

\ начать трансляцию текста
: TRANSLATE: ( /name --> )
NextWord <| KEEPS s" .asm" KEEPS 0 KEEP |> file
init-buf
ONLY MACRO DEFINITIONS ;

\ -- ---------------------------------------------------------------------------

\ завершить трансляцию текста
M: ;TRANSLATE ( --> ) FId save ONLY DEFINITIONS del-buf ;M

\ создать безымянную метку для перехода назад
M: BEGIN ( --> lab p )
label +>buf s" :\t" +>buf s" ; переход назад\n\r" +>buf
NOTICE" Не обнаружена метка для перехода назад!" ;M
\ создать безусловный переход назад на метку lab
M: AGAIN ( lab p --> )
?PAIRS" Не обнаружена метка для перехода назад!"
s" \tJMP " +>buf l>name +>buf s" \n\r" +>buf ;M


M: NOOP s" \t\tNOP\n\r" +>buf ;M
M: DROP s" \t\tMOV EAX, [EBP]\n\r\t\tLEA EBP, [EBP]\n\r" +>buf ;M
M: SWAP s" \t\tMOV EDX, [EBP]\n\r\t\tMOV [EBP], EAX\n\r\t\tMOV EAX, EDX\n\r "
+>buf ;M

M: : ( / name --> )
NextWord DDUP (:)
DDUP SLIT, <: s" \t CALL _" +>buf +>buf s" \n\r" +>buf ;>
COMPILE,
<| s" _" KEEPS KEEPS s" : ; новое определение\n\r" KEEPS |> +>buf
;M

M: ; ( --> ) [COMPILE] ;M ;M

M: \ [COMPILE] \ ;M
\ -- ---------------------------------------------------------------------------

\ пример транслируемого текста
TRANSLATE: zzz
NOOP BEGIN DROP SWAP AGAIN DROP
: zzz DROP SWAP ;
NOOP
zzz
NOOP
;TRANSLATE



в результате выходит следующее:
Код:
                NOP
lab_0001:       ; переход назад
                MOV EAX, [EBP]
                LEA EBP, [EBP]
                MOV EDX, [EBP]
                MOV [EBP], EAX
                MOV EAX, EDX
        JMP lab_0001
                MOV EAX, [EBP]
                LEA EBP, [EBP]
_zzz: ; новое определение
                MOV EAX, [EBP]
                LEA EBP, [EBP]
                MOV EDX, [EBP]
                MOV [EBP], EAX
                MOV EAX, EDX
                NOP
               CALL _zzz
                NOP

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 11:36 
mOleg писал(а):
M: NOOP s" \t\tNOP\n\r" +>buf ;M

Воистину, через зад: иметь FORTH-программу, пишущую ассемблерный файл? Не проще ли иметь готовый ассемблерный файл? По крайней мере, легче править и меньше места.
Правда, к решению проблемы это отношения не имеет...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 12:18 
Не в сети
Moderator
Moderator
Аватара пользователя

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

какой вопрос - такой ответ.
Все эти \t\n можно опустить - выбран самый простой вариант.
По крайней мере я отвечаю на поставленный вопрос, а не треплюсь

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 12:23 
mOleg писал(а):
По крайней мере я отвечаю на поставленный вопрос, а не треплюсь
Треплитесь. Вопрос изначально в другом. Коллега ищет "универсальный FORTH", который будет работать на любом железе (правда, он пока не решил, на каком этапе "жизненного цикла" программы).


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:09 
Не в сети
Administrator
Administrator
Аватара пользователя

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

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

Форт сам по себе является спецификацией. Его разработка не имеет особенных подводных камней и производится в рутинном порядке. Попытки автоматизации генерации фортов приведут только к большей путанице и необходимости управлять через какие-то настройки, заполнять структуры данных, а после этого вручную проверять результат. Зачем? Есть список слов, которые нужны для работы на разных платформах. Он реализуется. Автоматизировать можно верификацию, написав грамотный тест, который будет не просто не выполняться, а выдаст диагностику - что не сделано, что неправильно работает и т.д.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:34 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Потому что языка ассемблер не существует 8) (в смысле это не единый язык)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:40 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Не так уж и много надо переписывать: примитивов достаточно штук 30-40, остальное уже на форте.
А разбираться с окружением: где что находится в данном проце, как адресуется память и прочее все равно придется.
Так что преобразование в асм не так уж и бесперспективно.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:49 
gudleifr писал(а):
Это называется ядром FORTH-системы. Оно пишется на любом удобном языке. Строчек, этак, пара тысяч максимум.
mOleg писал(а):
Не так уж и много надо переписывать: примитивов достаточно штук 30-40, остальное уже на форте.
А разбираться с окружением: где что находится в данном проце, как адресуется память и прочее все равно придется.
Всего-то сотня сообщений ушла на почти понимание.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:55 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Ну и получается базовый Форт. Который адаптируется под каждый процессор в индивидуальном порядке.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 17:58 
Hishnik писал(а):
Который адаптируется под каждый процессор в индивидуальном порядке.
Самое неприятное, что в подавляющем числе случаев эти адаптации сделают FORTH-системы несовместимыми на уровне FORTH-языка.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 18:07 
Не в сети
Moderator
Moderator
Аватара пользователя

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

О том и речь, только асм текст все же проще получается, чем реализовывать асм на форте.
В общем, ИМХО, дело вкуса.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 18:29 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Коллега ищет "универсальный FORTH", который будет работать на любом железе (правда, он пока не решил, на каком этапе "жизненного цикла" программы).

Это, по моемому, достаточно прозрачно определено -> Скрипт для пользователя устройством.
Пример одного такого решения ForthLogic

P.S. Или что то подобное QED-Forth,


Последний раз редактировалось KPG Чт дек 04, 2014 18:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 18:37 
KPG писал(а):
Скрипт для пользователя устройством.
К сожалению, пользователь - только одна из подзадач.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-транслятор в Ассемблер
СообщениеДобавлено: Чт дек 04, 2014 18:46 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Это если МК сильно разные, но тогда они вряд ли будут использоваться для решения одной и той же задачи. А в целом да, если одна система - это ARM с графическим LCD, сетью и SD-картой, а другая - 8-битный МК с 4 кб памяти, их Форты будут совместимы ну очень условно - на уровне стека/арифметики/базовых структур управления. Даже EMIT не факт что будет куда сделать. Но чудес не бывает. Если задача не может быть нормально сформулирована в технических терминах, Форт не поможет.


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

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


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

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


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

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