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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 117 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 20:22 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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

mgw писал(а):
Как сравнить машинные коды после

обычно при пошаговой трассировке проблем нет. К тому же, обычно проверяется несколько кусков асм кода, которые в последствии проверять смысла нет.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 20:23 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 20:45 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Нужна более подробная расшифровка след конструкции. Правильно ли я её понимаю?

lea EBP, CELL[EAX]; // Допустим EAX=1000, CELL=4, значит EBP = 1004 Верно?
mov EAX, -CELL[EBP]; // EAX = значению, которое было на 1000 адресе?
ret;

Вот что получилось в отладчике
Код:
0x00402084 8d6804           lea         ebp,dword ptr [eax+04]
0x00402087 8b45fc           mov         eax,dword ptr [ebp-04]
0x0040208a c3               retn


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 21:03 
Не в сети
Moderator
Moderator
Аватара пользователя

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

да

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 21:10 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Код:
const CELL = 4;
//  SP! ( addr --> )
void SP_set() {
   asm {
      naked;       // Отключить пролог/эпилог
       lea  EBP,  CELL[EAX];
       mov  EAX, -CELL[EBP];      
       ret;
   }   
}


Вот такое определение получилось. Посмотрел в отладчике, все работает как и задумано. Буду потихоньку
переписывать слова из stacks.f SPF-Fork


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 21:12 
Не в сети
Administrator
Administrator
Аватара пользователя

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

Только аккуратно, а то при переходе из asm в D и обратно могут потеряться регистры. Обычно ebp нужно восстанавливать при возврате в ЯВУ-код. Часто ebx, возможно, потребуется что-то еще. Это уже зависит от компилятора.



За это сообщение автора Hishnik поблагодарил: mgw
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Пн апр 27, 2015 23:54 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1261
Благодарил (а): 3 раз.
Поблагодарили: 19 раз.
mgw писал(а):
Как увидеть, что в форте стоит на этом слове?

Код:
S" lib\ext\disasm.f" INCLUDED
SEE wordName
' wordName REST

Что-то мне кажется, что все пойдет чуточку легче, если бы была какая-то схема, объясняющая использование тех или иных регистров в СПФ4.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 13:24 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
VoidVolker писал(а):
Может, как-то, на примерах?


Пока только мечты. Как я это вижу.

На прогу на D цепляем Форт
import SPF-Fork;

Где то в main()
LoadSPF-Fork("....../start.fs"); // Выполнить начальную загрузку библиотек и вернуть
//управление в D.

С этого момента есть "набор" готовых слов (функций).

В любом месте проги на D можно вызвать кусок Форта:
.....
ExecWordSpf-Fork("Что_то_там", параметр1, параметр2 ....); Так как это уже
готовый скомпилированный код, то время только на поиск слова.

Думаю, что возможны вызовы и в обратную сторону, с Форта вызывать процедуры на D.

Чего больше, D или Forth должно быть в программе? Ну кому как нравится. Можно в D только main() а остальное все на форте - На выходе переносимый форт. Можно наоборот, вызывать только Форт в качестве "скрипта".

Ещё не маловажный аспект, я очень не люблю гигантизм.
Когда говорят, поставь IDE + 8 библиотек + систему Make файлов, причем их нужно собрать обязательно nmake ...... брррр. Весь инет забит вопросами, типа я поставил (перечисление установленных монстров ....) а оно не работает ...

Так вот мне достаточно D + ( 5 dll из Qt ) + SP-Forth.d в качестве модуля для решения большинства задач.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 17:12 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Как быть с MACRO в форт ассемблере. Может быть есть возможность вывести листинг с подставленными макрокомандами. Дело в том, что в ручную довольно долго приходится разбирать код.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 18:58 
Не в сети
Moderator
Moderator
Аватара пользователя

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

их совсем немного ведь.

mgw писал(а):
Может быть есть возможность вывести листинг с подставленными макрокомандами.

готовой нет, но сделать не сложно

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 19:17 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Я смотрю коды в disasm.f по совету VoidVolker. Там видны коды asm в нормальном виде.
Но смотрю в SPF4, как включить дизасм в Форк, я на вскидку не нашел. Вопрос, к Олегу, примитивы Форка и SPF одинаковые? Если одинаковые, то вполне можно обойтись и этим подходом.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 20:01 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
mgw писал(а):
Как быть с MACRO в форт ассемблере.
Боюсь, никак. Там происходит подстановка кодов, а не текста. Нужно создать специальную читалку. Сомневаюсь, что в SPF таковая есть. (Ее наличие свидетельствовало бы о понимании его авторов основ FORTH, но такового я не наблюдал.- Но это, так, к слову.).

Добавлял специально к ff303 понимание текстовых ассемблерных макросов.
Могу, значит, считать себя знающим основы Форт :) Сам Форт и есть такая специальная "читалка"

P,S. А как вариант вставить в D уже готовый массив байтов Форка?
Михаил Максимов часто такое решение применял для "имплантирования" SPF в "чужеродные" программы на раз,два,три


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Вт апр 28, 2015 20:49 
Не в сети
Moderator
Moderator
Аватара пользователя

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

Частично. Например, я следил за тем, чтобы указатель стека сначала изменялся, а лишь затем сохранялся параметр, немного иначе реализованы ветвления, совсем иначе вызов АПИ, есть примитивы, которых нет в СПФе (всего уж не упомню).

mgw писал(а):
Я смотрю коды в disasm.f по совету VoidVolker. Там видны коды asm в нормальном виде.

можно смотреть прямо в дизасме, скажем hiew (прямо в исходном файле) либо в отладчике.
Собственно, давно бы уже пора освоить хотя бы OllyDbg 8) и не морочиться.
Начала и размеры всех определений в names.xrf находятся.

KPG писал(а):
P,S. А как вариант вставить в D уже готовый массив байтов Форка?

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Ср апр 29, 2015 02:02 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mgw писал(а):
На прогу на D цепляем Форт
import SPF-Fork;

Где то в main()
LoadSPF-Fork("....../start.fs"); // Выполнить начальную загрузку библиотек и вернуть
//управление в D.

С этого момента есть "набор" готовых слов (функций).

В любом месте проги на D можно вызвать кусок Форта:
.....
ExecWordSpf-Fork("Что_то_там", параметр1, параметр2 ....); Так как это уже
готовый скомпилированный код, то время только на поиск слова.

Думаю, что возможны вызовы и в обратную сторону, с Форта вызывать процедуры на D.


Если передать в Форт какие-то переменные/массивы/и т.п. из D, ими можно манипулировать оттуда. Вообще, встраивание инструмента управления может быть полезно во многих случаях. Если программа не имеет жесткой привязки к мыши/тачскрину, то скорее всего, для нее рано или поздно пригодится текстовый сценарий производимых действий. Например, задача "поставить на чертеж 10 отверстий диаметром 3 мм, расположенных равномерно вокруг центра с координатами 10; 12 на окружности радиусом 6 мм". Прицеливаться мышкой - непроизводительно и чревато ошибками. Иметь конфигураторы/визарды/диалоговые панели - на все случаи не напастись. Если нацелиться на подобные задачи, Форт не будет выглядеть странно или убого. Напротив - хорошо проработанный язык с известными подходами к его написанию и встраиванию. И возможности не сказать чтобы ограниченные. По крайней мере, нет ограничений вида "на самом деле все переменные текстовые, просто попытка применить к ним математические операции вызывает преобразование в число".
Кстати, о производительности в таком случае можно не сильно и беспокоиться. Например, если считает в основном код на D, а код на Форте организует для него данные.



За это сообщение автора Hishnik поблагодарил: mgw
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Forth на inline asm. Это реально?
СообщениеДобавлено: Ср апр 29, 2015 11:22 
Не в сети

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Огромное спасибо всем!

Ваши советы мне сильно помогают. Признаюсь, что в ассемблере, дизассемблере и отладчиках я не силен. Хотя стараюсь )). Осваиваю OllyDbg.

Выяснил, что в Форке есть ещё и локальный стек LP. А вот в SPF4 что стоит у меня его нет. Вопрос, его вообще нет в SPF или он отключен?

Вставка кодов, вместо ASM конструкций мне не нравится по этическим соображениям. Я за максимальную открытость исходников. Пусть люди учатся.

Первая задача, как проверить внесенные примитивы? У кого какие предложения.

Ещё вопрос, нужно ли выкладывать файл SPF-Fork.d на всеобщее обозрение, есть интерес на него смотреть?


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

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


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

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


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

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