Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн сен 23, 2019 04:48

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Пн мар 27, 2017 23:52 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Аналогия в том, что структура опкодов инструкций процессора как и структура кода представления чисел оптимально описывается регулярными выражениями.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 00:04 
chess писал(а):
Аналогия в том...
Допустим, это, в некотором смысле, верно. Но как из этого следует полезность написания универсального ассемблера?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 09:56 
Не в сети

Зарегистрирован: Вс мар 26, 2017 00:23
Сообщения: 40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
По-моему, вы ненужно заморачиваетесь.
Я сделал ассемблер простой как лопата, даже еще проще.
Он состоит из единственного слова opcode, которое связывает числовое значение опкодов с мнемоникой
0x B8 0x 48 0x 2 opcode mov_rax,#
Слово-мнемоника при использовании компилирует опкоды на словарь.

HEADER 1+ HERE CELL+ ,
mov_rdx,# ' Pop @ , call_rdx
inc_rax
mov_rdx,# ' Push @ , call_rdx
ret

ALIGN

Решение выглядит экстенсивным, но:
1) В ядре, в базовой системе количество разных используемых мнемоник вряд-ли будет достигать даже пары тысяч.
2) Такой подход абсолютно универсален. Имея слово opcode можно задавать любой ассемблер.
3) Подавляющее большинство низкоуровневых определений должно быть линейно-исполняемым. Для редких случаев организации циклов и ветвлений достаточно примитивного же механизма.
4) Недостающие опкоды можно дописать прямо в прикладной программе.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 10:04 
vpn289 писал(а):
состоит из единственного слова
vpn289 писал(а):
количество разных используемых мнемоник... будет достигать... пары тысяч.
Об этом и речь. Само слово "ассемблер" здесь не применимо.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 10:51 
Не в сети

Зарегистрирован: Вс мар 26, 2017 00:23
Сообщения: 40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
gudleifr писал(а):
Об этом и речь. Само слово "ассемблер" здесь не применимо.

Ну это уже вопрос терминологии. Давайте назовем "вспомогательным инструментом для преобразования опкодов в мнемоники и обратно".
Разверните тогда, пожалуйста, что Вы вкладываете в слово "ассемблер".


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 11:15 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
gudleifr писал(а):
Но как из этого следует полезность написания универсального ассемблера?

Полезность ассемблера? Для меня она очевидна. Универсального? Ну это трудно
SSE-SSE5, VMX, VME, CLFSH, APIC, CMOV, PSE36, SEP и еще очень много функций, которые поддерживает процессор.
Зачем? Если понадобится-допишем что надо.
vpn289 писал(а):
По-моему, вы ненужно заморачиваетесь.

По-разному можно не заморачиваться. Я вот писал встроенный ассемблер как вы(постепенно),
только чуть по-другому(не экстенсивно).
Надо ADD EAX, EDX - определяем R+R в отдельном файле, посвященном встроенному ассму,
а потом в программе пишем A+D, а также A+C, A+B и тп. И так для всех остальных инструкций.
Регистров мало, поэтому такой подход написания ассма вполне оправдан.
Вот для R+@RR будет около 500 опкодов, а у меня всего одно описание этой мнемоники.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 11:25 
vpn289 писал(а):
Разверните тогда, пожалуйста, что Вы вкладываете в слово "ассемблер".
Ассемблер - это программа, переводящая программу, написанную на языке ассемблера, в машинные коды.

Ваш вариант "0x B8 0x 48 0x 2 opcode mov_rax,#", который вполне можно заменить просто (что за 48?) ": mov_rax,# B8 C, ;" ассемблером не является по очень простой причине - Вы переводите с языка ассемблера в коды руками. Ассемблер в данном случае - Вы сами.

chess писал(а):
Полезность ассемблера? Для меня она очевидна. Универсального? Ну это трудно
Не универсальный ассемблер не является ассемблером по определению.

chess писал(а):
Для меня она очевидна.
И какова статистика для одной программы?
Сколько строк написаны в кодах?
Сколько строк уходит на ассемблер?
Сколько строк затем написано на языке ассемблера?
На тот момент, когда Вы пишете на языке ассемблера, Вы еще помните коды?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 12:00 
gudleifr писал(а):
И какова статистика для одной программы?
Посчитал у себя:

Старая версия Win-32 FOBOS (ок. 3000 строк) - текстовая часть (ядро написано на языке ассемблера целиком - ок. 1000 строк).
Слова, написанные в кодах (и/или с учетом знания длины кодов): VARIABLE CONSTANT CREATE >CFA >PFA >BODY (DOES) VOCABULARY ASM (DO) (LOOP) (+LOOP)
Затем ок.300 строк - сам ассемблер.
Слова, написанные на языке ассемблера (в т.ч. доступа к WIN-API и недостающие FORTH-стандартные): I J CALL (Z") (S") (C") SP@ SP! WIN-CYCLE CALL-BACK WIN-RET >> W! WIN-DLG-CYCLE ERASE THREAD THREAD-RET ENUM-RET ENUMCHILD INVERT COMP-RE COMP. STREAM-IN STREAM-OUT

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

С DOS-версией FOBOS было еще смешнее: несмотря на наличие ассемблера, за исключением экспериментов с расширенной памятью и графикой, чаще правил и перекомпилировал ассемблерное ядро, чем дописывал новые кодовые слова.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 13:00 
Не в сети

Зарегистрирован: Вс мар 26, 2017 00:23
Сообщения: 40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
gudleifr писал(а):
vpn289 писал(а):
Разверните тогда, пожалуйста, что Вы вкладываете в слово "ассемблер".
Ассемблер - это программа, переводящая программу, написанную на языке ассемблера, в машинные коды.

Ваш вариант "0x B8 0x 48 0x 2 opcode mov_rax,#", который вполне можно заменить просто (что за 48?) ": mov_rax,# B8 C, ;" ассемблером не является по очень простой причине - Вы переводите с языка ассемблера в коды руками. Ассемблер в данном случае - Вы сами.

Нельзя. Судя по всему Вы не читали исходное сообщение. Поясню еще раз.
Слово opcode связывает опкод с мнемоникой. Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды.
Используется ассемблер для создания низкоуровневых определений.
Например:
HEADER CELL- HERE CELL+ ,
mov_rdx,# ' Pop @ , call_rdx
sub_rax,b# 0x 8 B,
mov_rdx,# ' Push @ , call_rdx
ret
ALIGN

И если еще не заметили, это x64.

Моя идея в том, что нет нужды пыхтеть и пытаться сделать красивый ассемблер. В подавляющем большинстве случаев достаточно простейшего ассемблера.
Еще одно соображение - возможно мне никогда не понадобится инструкция mov_r10,[rax+rsi] А если вдруг понадобится, я посмотрю опкоды для нее отладчиком или чем-еще и добавлю еще строчку со словом opcode.
Мне не нужен шкаф с кучей винтиков. Мне нужен инструмент, которым я могу создать нужный винтик.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 13:22 
vpn289 писал(а):
Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды.
Т.е. opcode делает тоже самое, что и двоеточие (с запятыми внутри), только через задницу.

vpn289 писал(а):
Моя идея в том, что нет нужды пыхтеть и пытаться сделать красивый ассемблер.
О чем и речь. Вам понадобились слова, оставляющие на вершине словаря некоторые "кубики". Т.к. для каждого нового кубика Вы лезете в таблицы, чтобы скомпилировать его вручную, а для каждого нового набора кубиков проверяете список уже введенных, то этот метод не является ассемблером и не является особо удобным. И уж, конечно, любая задача, требующая кодов, потребует и конструкций из наборов кубиков, т.е. вместо вместо ассемблера Вы быстро получите набор макросов, удобный(!) для этой программы, но никак не претендующий на "ассемблерность", тем более, на применимость в других программах.

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 15:44 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6786
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
vpn289 писал(а):
Слово opcode связывает опкод с мнемоникой. Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды.

Вполне рабочий вариант. Не делать так по каким-то причинам - все равно что не заводить в программе константы. Я такое делал для 32-bit DPMI, нескольких МК и всех своих форт-процессоров. Собственно, мимо этого этапа, имея на руках Форт, проходить как-то странно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 15:48 
Hishnik писал(а):
Вполне рабочий вариант. Не делать так по каким-то причинам - все равно что не заводить в программе константы.
Правильно! Это такой же костыль, как и константы.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 18:16 
Не в сети

Зарегистрирован: Вс мар 26, 2017 00:23
Сообщения: 40
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
gudleifr писал(а):
vpn289 писал(а):
Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды.
Т.е. opcode делает тоже самое, что и двоеточие (с запятыми внутри), только через задницу.

Чевой-то? Вообще, так рассуждать - "есть двоеточие, а все остальное через задницу" странно.
Раскрою еще тему. opcode в моей системе существует ДО двоеточия ( его аналога). Задолго до.
И поясните кодом, пожалуйста, что Вы имели ввиду. Не улавливаю.

vpn289 писал(а):
Моя идея в том, что нет нужды пыхтеть и пытаться сделать красивый ассемблер.
О чем и речь. Вам понадобились слова, оставляющие на вершине словаря некоторые "кубики". Т.к. для каждого нового кубика Вы лезете в таблицы, чтобы скомпилировать его вручную, а для каждого нового набора кубиков проверяете список уже введенных, то этот метод не является ассемблером и не является особо удобным. И уж, конечно, любая задача, требующая кодов, потребует и конструкций из наборов кубиков, т.е. вместо вместо ассемблера Вы быстро получите набор макросов, удобный(!) для этой программы, но никак не претендующий на "ассемблерность", тем более, на применимость в других программах.

Т.е., как раз, то, что я имел в виду - вставить в программу коды без ассемблера проще, чем с ним. Попробуйте прикинуть статистику, как я выше.[/quote]
Опять мы не понимаем друг друга.
1) При написании любого иного ассемблера вам все равно придется лезть в таблицы.
2) Какие "кубики"? Мне приятнее не выписывать 0x 48 B, 0x FF B, 0x C0 B, а написать inc_rax.
Числа я пишу один раз, при определении мнемоники, а мнемонику могу использовать потом сотню раз.
И другому человеку гораздо понятнее что обозначет inc_rax супротив 0x 48 B, 0x FF B, 0x C0 B,.
Собственно в этом и основная функция любого ассемблера. Пользоваться не машкодом, а мнемониками.
3) Опять 25. Маленький существенный нюанс Форта. Программа на нем по сути и являет набор макросов, удобный для нее самой. Каждая задача требует разработки своего собственного языка. ( В смысле набора слов). В процессе разработки можно создать инструмент, который внезапно окажется универсальным.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1107
Благодарил (а): 3 раз.
Поблагодарили: 41 раз.
vpn289 писал(а):
3) Опять 25.

Похоже Вы ещё не в курсе абсурдности самой полемики с Gudliefer/

P.S. У него же однозначно определена позиция в диалоге с собеседником - в виде подписи ко всем сообщениям :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Форт-ассемблер
СообщениеДобавлено: Вт мар 28, 2017 18:44 
vpn289 писал(а):
И поясните кодом
"Нет, уж лучше - Вы к нам". Что конкретно делает opcode? Может, я чего недопонял?

vpn289 писал(а):
Раскрою еще тему. opcode в моей системе существует ДО двоеточия( его аналога). Задолго до.
Если это так, то это ошибка. "Задолго до" существуют слово ENTRY (или (CREATE) ) - создание словарной статьи, и "запятая". Все остальные "двоеточия" определяются через них за пару касаний клавиш.

vpn289 писал(а):
При написании любого иного ассемблера вам все равно придется лезть в таблицы.
Да, но в "обычном" ассемблере после этого лезть в таблицы не надо. В отличие от Вашего. Сами же написали - приходится проверять, и при необходимости добавлять.

vpn289 писал(а):
Числа я пишу один раз, при определении мнемоники, а мнемонику могу использовать потом сотню раз.
Сотни? Значит Вы что-то совсем неправильно делаете. При "сотнях" проще отказаться от FORTH и писать на нормальном языке ассемблера.

vpn289 писал(а):
Каждая задача требует разработки своего собственного языка. ( В смысле набора слов).
Не в смысле "нового набора слов", а в смысле "нового FORTH-ядра".

vpn289 писал(а):
В процессе разработки можно создать инструмент, который внезапно окажется универсальным.
Т.е. за предыдущие 50 лет ни одному фортеру это не удалось, и вдруг удастся?

P.S. И, чтобы не быть голословным, приведите, пожалуйста, статистику, которую я просил, для одной из Ваших программ.


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

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


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

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


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

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