Forth http://fforum.winglion.ru/ |
|
Форт-ассемблер http://fforum.winglion.ru/viewtopic.php?f=24&t=3118 |
Страница 2 из 3 |
Автор: | chess [ Пн мар 27, 2017 23:52 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
Аналогия в том, что структура опкодов инструкций процессора как и структура кода представления чисел оптимально описывается регулярными выражениями. |
Автор: | gudleifr [ Вт мар 28, 2017 00:04 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
chess писал(а): Аналогия в том... Допустим, это, в некотором смысле, верно. Но как из этого следует полезность написания универсального ассемблера?
|
Автор: | vpn289 [ Вт мар 28, 2017 09:56 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
По-моему, вы ненужно заморачиваетесь. Я сделал ассемблер простой как лопата, даже еще проще. Он состоит из единственного слова 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) Недостающие опкоды можно дописать прямо в прикладной программе. |
Автор: | gudleifr [ Вт мар 28, 2017 10:04 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): состоит из единственного слова vpn289 писал(а): количество разных используемых мнемоник... будет достигать... пары тысяч. Об этом и речь. Само слово "ассемблер" здесь не применимо.
|
Автор: | vpn289 [ Вт мар 28, 2017 10:51 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
gudleifr писал(а): Об этом и речь. Само слово "ассемблер" здесь не применимо. Ну это уже вопрос терминологии. Давайте назовем "вспомогательным инструментом для преобразования опкодов в мнемоники и обратно". Разверните тогда, пожалуйста, что Вы вкладываете в слово "ассемблер". |
Автор: | chess [ Вт мар 28, 2017 11:15 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
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 опкодов, а у меня всего одно описание этой мнемоники. |
Автор: | gudleifr [ Вт мар 28, 2017 11:25 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): Разверните тогда, пожалуйста, что Вы вкладываете в слово "ассемблер". Ассемблер - это программа, переводящая программу, написанную на языке ассемблера, в машинные коды.Ваш вариант "0x B8 0x 48 0x 2 opcode mov_rax,#", который вполне можно заменить просто (что за 48?) ": mov_rax,# B8 C, ;" ассемблером не является по очень простой причине - Вы переводите с языка ассемблера в коды руками. Ассемблер в данном случае - Вы сами. chess писал(а): Полезность ассемблера? Для меня она очевидна. Универсального? Ну это трудно Не универсальный ассемблер не является ассемблером по определению.chess писал(а): Для меня она очевидна. И какова статистика для одной программы?Сколько строк написаны в кодах? Сколько строк уходит на ассемблер? Сколько строк затем написано на языке ассемблера? На тот момент, когда Вы пишете на языке ассемблера, Вы еще помните коды? |
Автор: | gudleifr [ Вт мар 28, 2017 12:00 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
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 было еще смешнее: несмотря на наличие ассемблера, за исключением экспериментов с расширенной памятью и графикой, чаще правил и перекомпилировал ассемблерное ядро, чем дописывал новые кодовые слова. |
Автор: | vpn289 [ Вт мар 28, 2017 13:00 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
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. Мне не нужен шкаф с кучей винтиков. Мне нужен инструмент, которым я могу создать нужный винтик. |
Автор: | gudleifr [ Вт мар 28, 2017 13:22 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды. Т.е. opcode делает тоже самое, что и двоеточие (с запятыми внутри), только через задницу.vpn289 писал(а): Моя идея в том, что нет нужды пыхтеть и пытаться сделать красивый ассемблер. О чем и речь. Вам понадобились слова, оставляющие на вершине словаря некоторые "кубики". Т.к. для каждого нового кубика Вы лезете в таблицы, чтобы скомпилировать его вручную, а для каждого нового набора кубиков проверяете список уже введенных, то этот метод не является ассемблером и не является особо удобным. И уж, конечно, любая задача, требующая кодов, потребует и конструкций из наборов кубиков, т.е. вместо вместо ассемблера Вы быстро получите набор макросов, удобный(!) для этой программы, но никак не претендующий на "ассемблерность", тем более, на применимость в других программах.Т.е., как раз, то, что я имел в виду - вставить в программу коды без ассемблера проще, чем с ним. Попробуйте прикинуть статистику, как я выше. |
Автор: | Hishnik [ Вт мар 28, 2017 15:44 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): Слово opcode связывает опкод с мнемоникой. Иными словами слово opcode является создающим для слов-мнемоник. Слово-мнемоника же, в свою очередь компилирует на вершину словаря заданные опкоды. Вполне рабочий вариант. Не делать так по каким-то причинам - все равно что не заводить в программе константы. Я такое делал для 32-bit DPMI, нескольких МК и всех своих форт-процессоров. Собственно, мимо этого этапа, имея на руках Форт, проходить как-то странно. |
Автор: | gudleifr [ Вт мар 28, 2017 15:48 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
Hishnik писал(а): Вполне рабочий вариант. Не делать так по каким-то причинам - все равно что не заводить в программе константы. Правильно! Это такой же костыль, как и константы.
|
Автор: | vpn289 [ Вт мар 28, 2017 18:16 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
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. Маленький существенный нюанс Форта. Программа на нем по сути и являет набор макросов, удобный для нее самой. Каждая задача требует разработки своего собственного языка. ( В смысле набора слов). В процессе разработки можно создать инструмент, который внезапно окажется универсальным. |
Автор: | KPG [ Вт мар 28, 2017 18:30 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): 3) Опять 25. Похоже Вы ещё не в курсе абсурдности самой полемики с Gudliefer/ P.S. У него же однозначно определена позиция в диалоге с собеседником - в виде подписи ко всем сообщениям |
Автор: | gudleifr [ Вт мар 28, 2017 18:44 ] |
Заголовок сообщения: | Re: Форт-ассемблер |
vpn289 писал(а): И поясните кодом "Нет, уж лучше - Вы к нам". Что конкретно делает opcode? Может, я чего недопонял?vpn289 писал(а): Раскрою еще тему. opcode в моей системе существует ДО двоеточия( его аналога). Задолго до. Если это так, то это ошибка. "Задолго до" существуют слово ENTRY (или (CREATE) ) - создание словарной статьи, и "запятая". Все остальные "двоеточия" определяются через них за пару касаний клавиш. vpn289 писал(а): При написании любого иного ассемблера вам все равно придется лезть в таблицы. Да, но в "обычном" ассемблере после этого лезть в таблицы не надо. В отличие от Вашего. Сами же написали - приходится проверять, и при необходимости добавлять.vpn289 писал(а): Числа я пишу один раз, при определении мнемоники, а мнемонику могу использовать потом сотню раз. Сотни? Значит Вы что-то совсем неправильно делаете. При "сотнях" проще отказаться от FORTH и писать на нормальном языке ассемблера.vpn289 писал(а): Каждая задача требует разработки своего собственного языка. ( В смысле набора слов). Не в смысле "нового набора слов", а в смысле "нового FORTH-ядра".vpn289 писал(а): В процессе разработки можно создать инструмент, который внезапно окажется универсальным. Т.е. за предыдущие 50 лет ни одному фортеру это не удалось, и вдруг удастся?P.S. И, чтобы не быть голословным, приведите, пожалуйста, статистику, которую я просил, для одной из Ваших программ. |
Страница 2 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |