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

...
Google Search
Forth-FAQ Spy Grafic

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




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

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
mgw писал(а):
создание минимально-возможного форта, который "раскрутит себя сам"
именно к этому и идём.
Меня волнует насколько полно можно повторить Форк. Архитектура классического Форка спланирована исходя из того, что он должен делать всё сам, а у нас сейчас рядом D стоит. Вот например, чтение входного символьного потока. В D он кроссплатформенный, так может ему (D) это и поручить? Прочитаем всё в память и пусть оттуда Форк читает дальше. Но тогда, это будет Форк или нет? де та грань максимальной совместимости? Я сторонник того, что надо на "плечах" D позволить Форку стать кроссплатформенным.

Предположим что переписано большинство, а может даже и все примитивы. Переписать их можно и в общем то не так уж долго. Я пока переписал работу со стеками, да и то без двойной арифметики. Но как их проверить? Выборочно тестирую конечно, вроде все работает. Хотя RP! меня сильно озадачило ....

Не ясен вопрос с архитектурой. Допустим стек возвратов D и Форк будет общий (хотя бы на этапе раскрутки), но ещё есть проблема вызова из Форка D функций. Нужно где то сохранить состояние D регистров (но не в стеке, так как он уже занят Форком). Вот думаю, может перед стеком структуру создать и в ней сохранить значение D регистров. Тогда Форк сможет их достать, а свои регистры сохранит в стеке как обычно. В общем хочу испытать вызов D функции из слова Форка, восстановив регистры D из структуры в начале стека.


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

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

Согласен. Главное начать. Сейчас в качестве "базы" SPF-Fork.

Код:
void t1(int z) {
   // Проверим доступ к глобальным переменным в D функции
   // вызванной из Форк
   writeln("glb[0] = ", glb[0], "  glb=[1] = ", glb[1], "   z = ", z);
   writeln("t2(7, 8) = ", t2(7, 8)); // Проверка, что D работает
}

int t2(int a, int b) {
   int aa, bb;   aa = a; bb = b;   return aa + bb;
}

void exec_D() {
   asm {      naked;
      mov EAX, 7;      call t1;  // t1(7);
      ret;
   }
}

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
import asc1251;

int[10] glb = [7, 2];

void main() {
   
   uint[10] stSD, stSR, stSL; // По 10 CELL на каждый
   uint* begSD = cast(uint*)&stSD[9];  *begSD = 1;
   uint* begSR = cast(uint*)&stSR[9];  *begSR = 4; // Лишний, используем D-шный
   uint* begSL = cast(uint*)&stSL[9];  *begSL = 5;
   
   asm {
      align 4;
      // Сохраним регистры D
      push EBP; push EBX;   push EAX; push ECX;   push EDX;
      // --------------------
      mov ESI, begSL;             // Запомним ук на SL
      mov EAX, begSD;   call SP_set; // Стек данных для Форк
      mov EAX, 6;     call SP_dup; // Отразим 6 в stSD для контроля
      mov EAX, 3;                // 6 3 -->
      push EAX;                    // Сохраним верхушку ст дан в ст воз
      
      mov EAX, ESI;   call LP_set; // Стек дополнительный для Форк
      pop EAX;                     // Восстановим верхушку ст данных
      call SL_toL;                 // 3 ушла в доп стек
      call SL_Ldup;                // задубл доп стек, что бы посмотр stSL
      
//      int 3;      
      call exec_D; // Проверем вызов D функций их Форк
      
      // Заберем 3 из доп ст. и продублируем для отобр в буфере
      call SL_Lfrom;  call SP_dup;
      
      push 3;      call SR_rdrop;  // Побалуемся со стеком возвратов
      
      // Восстановим регистры D
      pop EDX; pop ECX; pop EAX; pop EBX;   pop EBP;
   }
   writeln(toCON("Стек данных = "), stSD);
   writeln(toCON("Стек дополнительный = "),stSL);
}

Результат работы:
Код:
C:\d_proj>dmd asm3 asc1251

C:\d_proj>asm3
glb[0] = 7  glb=[1] = 2   z = 7
t2(7, 8) = 15
Стек данных = [0, 0, 0, 0, 0, 0, 0, 0, 0, 3]
Стек дополнительный = [0, 0, 0, 0, 0, 0, 0, 3, 3, 5]



Проверил факт того, что буфера под стеки можно выделить, что из D можно "нырнуть в fort", что из fort можно вызвать D функцию.


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

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

Смотря что под этим подразумевать.

mgw писал(а):
Архитектура классического Форка спланирована исходя из того, что он должен делать всё сам, а у нас сейчас рядом D стоит. Вот например, чтение входного символьного потока. В D он кроссплатформенный, так может ему (D) это и поручить?

В форке (как и в СПФе) это просто READ-FILE, которое вобщем-то вполне может быть кроссплатформенным.
Или под чтением понимается что-то другое?

mgw писал(а):
Хотя RP! меня сильно озадачило ....

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

mgw писал(а):
Не ясен вопрос с архитектурой. Допустим стек возвратов D и Форк будет общий (хотя бы на этапе раскрутки), но ещё есть проблема вызова из Форка D функций.

Неудобно общий стек.
Взаимодействие продумывать необходимо изначально, например, форт можно запускать в отдельном потоке. Что же касается вызова функций другого языка, сложен не сам вызов (не сложнее вызова ф-ций АПИ) а как получать по их имени исполнимые адреса.

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


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

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

Я планирую применить опробованный метод в QtE. Более навороченный вариант, но идея такая же в OLE от MS, да Qt использует тоже самое.
Это просто таблица (массив), где индекс есть номер строки с адресом D функции.

D:
void*[100] tabAdrDfun; // К примеру на 100 адресов

int fun1(int a, int b); // Адрес этой функции надо запомнить
tabAdrDfun[2] = &fun1; // Запомнили в 3 строке

Тут могут быть вариации, можно и символьное имя добавить, но искать дольше.

Fort:
tabAdrDfun 2 CELL * + @ \ вот и адрес D функции. Ну а вызов - дело техники.

Тоже самое и в обратную сторону. Вызов из D функций Forth.

У нас два прохода компилятора. По времени они разнесены. Первый компилятор D, второй компилятор Forth.
При компиляции D адреса Forth функций не известны, но всегда можно заранее сказать, где будет лежать этот нужный адрес.

Может и не очень красиво, и не достаточно быстро, но зато просто и надежно.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
Может чем то поможет :)
На форуме HiAsm (последние сообщения) размещён архив (тема SPForth от flint2) по созданию SPF dll в рамках проекта HiAsm и компиляции Форт кода для использования внутри проектов HiAsm (в рамках Delphi компилятора)


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

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

Спасибо за наводку. Изучаю.


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

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
mgw писал(а):
KPG писал(а):
Может чем то поможет

Спасибо за наводку. Изучаю.

Навскидку. Мои переделки этого кода затрагивали некоторые моменты, такие как реассемблтрование DUMP кода в привязке к относительным смещениям кодовой базы и привязке к символьным таблицам процедур в диапазоне её адресов.
Могу сделать некоторую мою "выжимку" кода в каком то проверочном варианте
или опубликовать какие то "мысли" по впечатлениям от разработки этой темы :)


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

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

вот тут ничего не понял.

мысли вслух, по крайней мере в Fasm у меня в этом примере используется секция экспорта для добавления имен в содержимого собираемого исполнимого файла (section '.edata' export data readable ...)
Таким образом становится доступна таблица имен в области экспорта, и из нее можно брать все адреса.

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


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

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


Сейчас очень много информации. Аж дым из ушей. Хорошо, что на улице холодно и дожди. Что бы получить хороший совет, надо правильно сформулировать вопрос, а в голове каша. Так что чуть попозже.

Однако есть и хорошие новости. Во первых пока не сбылась моя главная страшилка, а именно я очень боялся, что не смогу разобраться
в ассемблерных hard словах и тем более заставить их работать. Но на удивление, все пока получается.
Технология следующая:
В ollydbg открываю форк, ищу адрес первого слова из файла (например в memory.f это '@') перехожу на это слово и из отладчика
копирую дизассемблерный код в файл. После чего пока руками (хотя уже подумываю написать небольшой конвертер) превращаю
код в D asm:

Пример. Это определение в memory.f
Код:
\ Записать x по адресу a-addr.
CODE ! ( x a-addr --> )
       MOV temp , subtop
       MOV [tos] , temp
       MOV tos , CELL [top]
       dheave 2 CELLS
     exit
  END-CODE


А это, что получается в D
Код:
// Записать значение по адресу
// ! ( x a-addr --> )
void h_setToAdr() {
   asm {      naked;
      mov EDX, dword ptr SS:[EBP];
      mov dword ptr DS:[EAX], EDX;
      mov EAX, dword ptr SS:[EBP+CELL];
      lea EBP, [EBP+CELL*2];
      ret;
   }
}


По возможности проверяю работу слов. Например вот такое определение замечательно записывает 7 в поле структуры
адрес которого лежит в дополнительном стеке.

Код:
// : t3 L@ 7 SWAP ! ;
void t3() {
   asm {      naked;
      call SL_get;            // L@
      call SP_dup; mov EAX, 7;   // 7
      call SP_swap;
      call h_setToAdr;
      ret;
   }
}


Попутно смотрю исходники, которые очень подробно комментированы (за что спасибо Олегу) и думаю, что делать дальше,
когда большинство hard слов будут готовы. По мне так надо написать функцию на D, которая начнет "шить" словарь. Проблема
в том, что структура словаря и словарной статьи мне показалась очень сложной. Фактически под термином "словарь", можно понимать
термин "объект", который имеет массу внутренних механизмов типа, искать или не искать, показывать или нет и т.д. и т.п.
Очень мне это напомнило 1С 8 версии, которая состоит вот из таких объектов - словарей, но это так, к слову.

Есть у меня ещё одна мысль. Существует уже готовый образ памяти с Форком. По идее наверное, его возможно загрузить из
D в память, подкорректировать указатели на буфера и вызвать (INIT) для дальнейшего старта. Правда не понятно как при таком подходе,
взаимодействовать с D, как отдать D управление.

Ну и последняя мысль, абстрактная :) Зря Forth назвали Фортом. Это же чистый B.
A - ассемблер
B - Forth
C - классика
D - развитие C++


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

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

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

Что же касается устройства словаря, то да, сложнее, но на то есть причины.
Вообще сразу оговорюсь, что предполагалось, что словари могут находиться в различных адресных пространствах, и для таких пространств имя - хранилище. У каждого хранилища могут быть не только свои адреса, но и свои собственные методы работы с ними(резервирование пространства, выравнивание,,,).
Кроме того, возможна одновременная компиляция кода в одно хранилище (которое описывается vtable).
Дальше, у каждого словаря может быть уникальная структура и вообще, он может быть расположен на другом конце света, а значит, для работы с ним необходимы инициализация и деинициализация, т.е. методы mount и umount, причем, если mount выполняется автоматически при добавлении словаря в контекст c umount дело обстоит сложнее, т.к. не ясно, когда работа с ним завершается.
В общем получается не слишком просто, однако сложность скрыта от пользователя, и работу с системой не усложняет.

Хочу добавить, что словари можно добавить в самом конце (на самом последнем этапе), и не заморачиваться с ними пока система не начнет нормально работать.

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


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

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

ну, как бы можно, только адреса не должны совпадать.
Вам виднее, что хочется получить в итоге 8)

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


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

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Пока балуюсь с "шитыми" словами. Пришлось потрудится над HERE. Мне хотелось сделать его видимым как со стороны Forth так и D.
Код:
[size=85]
uint[20] kdf;         // Сюда будем компилировать код (кодофайл)
ubyte* here;                     // Указатель на свободную область в кодофайле

// HERE ( -- Ahere)
void* d_HERE() { return &here;  }    // Это D-шный HERE
void  h_HERE() {
   asm {      naked;
      call SP_dup;   call d_HERE;  call h_getFromAdr;  // dup d_HERE() @
      ret;
   }
}
[/size]


Когда разобрался с HERE и PLACE, заработали слова компиляции. В результате закомпилировал и выполнил шитое слово в кодофайле (в буфере для компиляции).
Код:
[size=85]
// 5 , 1 , 65 B, 66 B, 67 B, 68 B, HERE ` exec_D , RET, @ EXECUTE
void t4() {
   asm {      naked;
      call SP_dup; mov EAX, 5;   call h_zpt;      // 5 ,
      call SP_dup; mov EAX, 1;   call h_zpt;      // 1 ,
      call SP_dup; mov EAX, 65;   call h_Bzpt;   // 65 B,
      call SP_dup; mov EAX, 66;   call h_Bzpt;   // 66 B,
      call SP_dup; mov EAX, 67;   call h_Bzpt;   // 67 B,
      call SP_dup; mov EAX, 68;    call h_Bzpt;   // 68 B,
      call h_HERE;  // Проверка. В это место сейчас будет закомпилирован exec_D()
      call SP_dup; lea EAX, exec_D;               // ' exec_D
      call h_zpt;                           // ,
      call h_RETzpt;                        // ret,
      call h_getFromAdr;                     // @
      call f_EXECUTE;                        // EXECUTE // exec_D();
      ret;
   }
}
[/size]


Радует то, что всё это работает и в Linux!


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

Зарегистрирован: Ср фев 17, 2010 18:10
Сообщения: 323
Откуда: Тверь
Благодарил (а): 13 раз.
Поблагодарили: 11 раз.
Пока получилось вот это. Словаря нет, поиска слов нет. Зато есть набор hard слов, так же несколько шитых слов для взаимодействия со структурой D, хранящий в себе адреса, размеры буферов, latest, here и т.д. Соответственно к этой структуре есть доступ как с Forth так и с D.
Код:
// Контекст Fotrh процесса
struct NPcb {
   pp    csd;                // указатель на начало стека SD
   pp    csr;                // указатель на начало стека SR
   pp    csc;                // указатель на начало стека SC
   pb    here;                // указатель начала свободной области словаря
   pp    latest;               // указатель на аоследнее скомпилированное слово
}

NPcb gpcb;
uint[20] kdf;         // Сюда будем компилировать код
ubyte* here;

void initForth() {
   NPcb npcb = gpcb;
   const sizeSt = 10;                   // По 10 CELL на каждый стек
   uint[sizeSt] stSD, stSR, stSL;        // Память под стеки
   npcb.csd = cast(pp)&stSD[sizeSt-1];      // Запомнить начало SP в контексте
   // npcb.csr = cast(pp)stSR[sizeSt-1]; ---> Совмещен со стеком D
   npcb.csc = cast(pp)&stSL[sizeSt-1];      // Запомнить начало SL в контексте
   npcb.here = cast(ubyte*)&kdf;         //
   gpcb = npcb;
   asm {
      align 4;
      // Сохраним регистры D
      push EBP; push EBX;   push EAX; push ECX;   push EDX;
      // --------------------
      // В ESI запомним указатель на доп стек SL
      lea EAX, npcb.csc.offsetof[npcb];
      mov ESI,  DS:[EAX];
      // Из контекста возьмем указатель на стек данных ...
      lea EAX, npcb.csd.offsetof[npcb];
      mov EAX,  DS:[EAX];
      call SP_set; // ... и инициализируем его
      mov EAX, ESI;   call LP_set; // Стек дополнительный для Форк
      
      // Работа, загрузка, компиляция и т.д.
      call t4;
      
      // ----------------------
      // Восстановим регистры D
      pop EDX; pop ECX; pop EAX; pop EBX;   pop EBP;
   }
}

void testOpenFort() {
   writeln(toCON("Проверим работу с уже инициализированной Fort"));
   NPcb npcb = gpcb;   // Возможность работы с PCB (контекст) переменными в ASM
   asm {
      align 4;
      // Сохраним регистры D
      push EBP; push EBX;   push EAX; push ECX;   push EDX;
      // --------------------
      // Найдем посл функцию по Latest и выполним её
      // LATEST @ @ EXECUTE
      call h_LATEST; call h_getFromAdr; call h_getFromAdr;   call f_EXECUTE;
      // ----------------------
      // Восстановим регистры D
      pop EDX; pop ECX; pop EAX; pop EBX;   pop EBP;
   }
}

void main() {
   // Инициализируем Forth, грузим файлы библиотек, компилим код (если надо)
   initForth();
   // Операторы D программы
   writeln(toCON("Просто программа на D"));
   // Работа с готовой Fort, а именно выполнить слово по LATEST
   testOpenFort();
}


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

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

Сейчас все шитые слова у меня единообразны.
Пример:
Код:
void t5() {
      asm {
             call SP_dup;             
             call h_LATEST;
             .....
             и т.д.
      }
}


За меня компилятор D нашел адреса этих слов (ну это понятно, словарь),
а как осуществляется компиляция (запись непосредственно по HERE) команды CALL и её аргумента? Судя по всему это делает слово COMPILE,

Это так?
Получается, что длина цепочки байтов в CALL и аргумента всегда одинакова?


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

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

Да, конечно. Я выше писал 0xE8 - сама команда, за ней идет 4-байтовое смещение. Это т.н. call rel32 (для поиска документации и примеров).


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

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


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

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


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

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