Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Спасибо, сделал трамплин, но с еще одним уровнем косвенности (нюансы ITC).
Спасибо, сделал трамплин, но с еще одним уровнем косвенности (нюансы ITC).
|
|
|
|
Добавлено: Вс май 15, 2011 11:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Эх... Вот она путаница в терминах во всей красе... "Адресный интерпретатор" и "Форт интерпретатор" - разные вещи. Хотя, в данном топике изначально речь шла именно об адресной интерпретации. Потому и непонятки вышли. Для возврата в форт интерпретатор, проще всего, наверно, вызвать (INTERPRET) заново с остатком интерпретируемой строки в параметрах. danbst писал(а): Или лучше интепретатор тоже закодить на форте? Кстати, вот это именно то решение, которое вполне подойдет, чтобы не ломать сильно голову. А для "простого" вызова форт-слов из ассемблера (ассемблерной имитации EXECUTE) придется делать специальную ассемблерную оболочку, которая по сути будет "адресным интерпретатором на одно слово", которая и сделает возврат в нужную точку.
Эх... Вот она путаница в терминах во всей красе...
"Адресный интерпретатор" и "Форт интерпретатор" - разные вещи. Хотя, в данном топике изначально речь шла именно об адресной интерпретации. Потому и непонятки вышли.
Для возврата в форт интерпретатор, проще всего, наверно, вызвать (INTERPRET) заново с остатком интерпретируемой строки в параметрах.
[quote="danbst"]Или лучше интепретатор тоже закодить на форте?[/quote]
Кстати, вот это именно то решение, которое вполне подойдет, чтобы не ломать сильно голову. А для "простого" вызова форт-слов из ассемблера (ассемблерной имитации EXECUTE) придется делать специальную ассемблерную оболочку, которая по сути будет "адресным интерпретатором на одно слово", которая и сделает возврат в нужную точку.
|
|
|
|
Добавлено: Вс май 15, 2011 05:18 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
danbst писал(а): НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте? Напишите INTERPRET на форте. Или втолкните на стек возвратов адрес трамплина, CFA которого вернет в ассемблер. Код: TRAMP: .word BACK2ASM
INTERPRET: ... (PUSH RP) := TRAMP JUMP (POP DP) BACK2ASM: ...
[quote="danbst"]НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте?[/quote] Напишите INTERPRET на форте. Или втолкните на стек возвратов адрес трамплина, CFA которого вернет в ассемблер.
[code]TRAMP: .word BACK2ASM
INTERPRET: ... (PUSH RP) := TRAMP JUMP (POP DP) BACK2ASM: ...[/code]
|
|
|
|
Добавлено: Сб май 14, 2011 23:22 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
ну правильно! это интерпретация скомпилированых слова! А я про интепретацию строковых слов (или как она называется).
ну правильно! это интерпретация скомпилированых слова! А я про интепретацию строковых слов (или как она называется).
|
|
|
|
Добавлено: Сб май 14, 2011 21:40 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Так ведь NEXT - это и есть возврат в интерпретатор!
EXECUTE вызывает слово. Если оно ассемблерное, то напрямую возвращается в адресный интерпретатор по NEXT.
Если фортовое, то оно сначала вызывает ENTER - новый вход в интерпретатор, a по EXIT выходит из него и по NEXT (из слова EXIT) вновь попадает в интерпретатор (который обслуживает то слово, что содержит EXECUTE)
Интерпретатор, конечно один на всех, просто ENTER - сохраняет текущий IP в стеке возвратов, который позже оттуда возвращается словом EXIT, и записывает в IP новый адрес... для вызываемого слова.
Так ведь NEXT - это и есть возврат в интерпретатор!
EXECUTE вызывает слово. Если оно ассемблерное, то напрямую возвращается в адресный интерпретатор по NEXT.
Если фортовое, то оно сначала вызывает ENTER - новый вход в интерпретатор, a по EXIT выходит из него и по NEXT (из слова EXIT) вновь попадает в интерпретатор (который обслуживает то слово, что содержит EXECUTE)
Интерпретатор, конечно один на всех, просто ENTER - сохраняет текущий IP в стеке возвратов, который позже оттуда возвращается словом EXIT, и записывает в IP новый адрес... для вызываемого слова.
|
|
|
|
Добавлено: Сб май 14, 2011 21:10 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Хорошо, тогда так. Вход (режим интерпретации) Код: <вычисление CFA> EXECUTE <дальше слова> EXECUTE делает jmp mem(CFA) Слово выполняется через NEXT. Доходит очередь до EXIT. Последний должен восстановить IP, который находился ДО входа в слово. НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте?
Хорошо, тогда так. Вход (режим интерпретации) [code] <вычисление CFA> EXECUTE <дальше слова>[/code] EXECUTE делает jmp mem(CFA)
Слово выполняется через NEXT. Доходит очередь до EXIT. Последний должен восстановить IP, который находился ДО входа в слово. НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте?
|
|
|
|
Добавлено: Сб май 14, 2011 21:00 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
danbst писал(а): Есть какое-то стандартное решение проблемы? а в чем проблема?.. Слово вызвалось и вернулось по NEXT на следующее слово за EXECUTE... просто, само EXECUTE не имеет собственного jmp NEXT, а только jmp ADDR на исполняемый адрес слова
[quote="danbst"]Есть какое-то стандартное решение проблемы?[/quote]
а в чем проблема?..
Слово вызвалось и вернулось по NEXT на следующее слово за EXECUTE...
просто, само EXECUTE не имеет собственного jmp NEXT, а только jmp ADDR на исполняемый адрес слова
|
|
|
|
Добавлено: Сб май 14, 2011 20:51 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Еще вопрос. Как работает слово EXECUTE, вызванное с режима интерпретации при ITC? Дело в том, что адресный интепретатор в режиме интерпретации не используется, а слово EXIT делает jmp NEXT, а не ret (не возврящается в интерпретатор). Есть какое-то стандартное решение проблемы?
Еще вопрос. Как работает слово EXECUTE, вызванное с режима интерпретации при ITC? Дело в том, что адресный интепретатор в режиме интерпретации не используется, а слово EXIT делает jmp NEXT, а не ret (не возврящается в интерпретатор). Есть какое-то стандартное решение проблемы?
|
|
|
|
Добавлено: Сб май 14, 2011 20:25 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Ethereal писал(а): Смысл уже состоит в том, что если Хищник говорит, что удобно, а мне так не кажется, то пусть скажет еще что-нибудь по этому поводу. Может быть есть какая-то идея, которая лежит на поверхности, а я ее в упор не вижу. Так иногда бывает. А что говорить-то? Существуют процессоры с гарвардской архитектурой, которые могут дописывать код в процессе работы. Если даже не могут дописывать, все равно остается кросс-компиляция, что позволяет использовать Форт, разрабатывая программы только на хост-машине. Разделение адресных пространств полезно хотя бы потому, что в ходе компиляции нет проблем с выполнением ALLOT - выделяемая память не пересекается с программным кодом. Если говорить о конфигурируемых процессорах, то вопрос вообще лишен смысла - почему вдруг нельзя описать память программ с доступом от процессора?
[quote="Ethereal"]Смысл уже состоит в том, что если Хищник говорит, что удобно, а мне так не кажется, то пусть скажет еще что-нибудь по этому поводу. Может быть есть какая-то идея, которая лежит на поверхности, а я ее в упор не вижу. Так иногда бывает.[/quote] А что говорить-то? Существуют процессоры с гарвардской архитектурой, которые могут дописывать код в процессе работы. Если даже не могут дописывать, все равно остается кросс-компиляция, что позволяет использовать Форт, разрабатывая программы только на хост-машине. Разделение адресных пространств полезно хотя бы потому, что в ходе компиляции нет проблем с выполнением ALLOT - выделяемая память не пересекается с программным кодом. Если говорить о конфигурируемых процессорах, то вопрос вообще лишен смысла - почему вдруг нельзя описать память программ с доступом от процессора?
|
|
|
|
Добавлено: Сб мар 26, 2011 22:08 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Ethereal писал(а): На практике, тот Гарвард, что часто встречается, такой, что : - память, доступная для исполнения, недоступна для модификации - память, доступная для модификации, недоступна для исполнения Так-что правит бал какой-то неправильный Гарвард. Или таки правильный ? Так-что мысль про "удобнее всего" просто непонятна. Существующие МК чаще всего ориентированы на кросс-компиляцию, при которой модификация программы в процессе работы попросту не нужна. В гарвардской архитектуре нет какого-то специального запрета на модификацию памяти программ в процессе работы. Однако если не обеспечивать доступ к памяти программ специально, то его не получится - идет постоянная выборка команд, в которую надо как-то вклиниваться. Это проблема не архитектуры, а технической реализации процессора.
[quote="Ethereal"]На практике, тот Гарвард, что часто встречается, такой, что : - память, доступная для исполнения, недоступна для модификации - память, доступная для модификации, недоступна для исполнения Так-что правит бал какой-то неправильный Гарвард. Или таки правильный ? Так-что мысль про "удобнее всего" просто непонятна.[/quote] Существующие МК чаще всего ориентированы на кросс-компиляцию, при которой модификация программы в процессе работы попросту не нужна. В гарвардской архитектуре нет какого-то специального запрета на модификацию памяти программ в процессе работы. Однако если не обеспечивать доступ к памяти программ специально, то его не получится - идет постоянная выборка команд, в которую надо как-то вклиниваться. Это проблема не архитектуры, а технической реализации процессора.
|
|
|
|
Добавлено: Сб мар 26, 2011 22:02 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Ethereal писал(а): ну и нафиг было выдумывать столь не по русски звучащий термин "токенезированный", тут согласен, нерусское слово в переводе статьи надо менять.
[quote="Ethereal"]ну и нафиг было выдумывать столь не по русски звучащий термин "токенезированный",[/quote]
тут согласен, нерусское слово в переводе статьи надо менять.
|
|
|
|
Добавлено: Сб мар 26, 2011 17:14 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Блин, ну и зачем было выдумывать столь не по русски звучащий термин "токенезированный", коли такой тип ШК называется свернутым ? См. Баранов-Ноздрунов, например. В свернутом шитом коде адрес исполняемого кода слова представлен более коротким числом и вычисляется из этого числа по некоторому правилу. Индекс в таблице токенов - это частный случай.
Блин, ну и зачем было выдумывать столь не по русски звучащий термин "токенезированный", коли такой тип ШК называется свернутым ? См. Баранов-Ноздрунов, например. В свернутом шитом коде адрес исполняемого кода слова представлен более коротким числом и вычисляется из этого числа по некоторому правилу. Индекс в таблице токенов - это частный случай.
|
|
|
|
Добавлено: Сб мар 26, 2011 17:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Ethereal писал(а): Можно, кстати, ссылку на статью или пояснение что значит токенезированный ШК. А то я ить неучем помру Ой, а первый пост данной темы прочитать слабо? Из первого поста: mOleg писал(а): Токенизированный шитый код.
[quote="Ethereal"]Можно, кстати, ссылку на статью или пояснение что значит токенезированный ШК. А то я ить неучем помру :roll:[/quote]
Ой, а первый пост данной темы прочитать слабо?
Из первого поста: [quote="mOleg"]Токенизированный шитый код. [/quote]
|
|
|
|
Добавлено: Сб мар 26, 2011 16:55 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
Смысл уже состоит в том, что если Хищник говорит, что удобно, а мне так не кажется, то пусть скажет еще что-нибудь по этому поводу. Может быть есть какая-то идея, которая лежит на поверхности, а я ее в упор не вижу. Так иногда бывает.
Смысл уже состоит в том, что если Хищник говорит, что удобно, а мне так не кажется, то пусть скажет еще что-нибудь по этому поводу. Может быть есть какая-то идея, которая лежит на поверхности, а я ее в упор не вижу. Так иногда бывает.
|
|
|
|
Добавлено: Сб мар 26, 2011 16:48 |
|
|
|
|
|
Заголовок сообщения: |
Re: Портирование Форта. ч1. адресная интерпретация, регистры |
|
|
не понятна полемика. в пространстве, где можно исполнять располагаем ФВМ т.е. примитивы. выбираем косвенный или токенезированный ШК. вся форт-программа располагается в пространстве доступном на запись и чтение. Т.е. по сути делаем из гарвардской - форт машину.
понятно, что теряем в скорости и частично в использовании пространства, откуда код можно исполнять, но туда надо запихивать (и обычно хватает чего) всякие таблицы статические, вобщем константы разные туда.
не понятна полемика. в пространстве, где можно исполнять располагаем ФВМ т.е. примитивы. выбираем косвенный или токенезированный ШК. вся форт-программа располагается в пространстве доступном на запись и чтение. Т.е. по сути делаем из гарвардской - форт машину.
понятно, что теряем в скорости и частично в использовании пространства, откуда код можно исполнять, но туда надо запихивать (и обычно хватает чего) всякие таблицы статические, вобщем константы разные туда.
|
|
|
|
Добавлено: Сб мар 26, 2011 16:36 |
|
|
|
|