Forth http://fforum.winglion.ru/ |
|
Портирование Форта. ч1. адресная интерпретация, регистры http://fforum.winglion.ru/viewtopic.php?f=34&t=2260 |
Страница 3 из 3 |
Автор: | Hishnik [ Сб мар 26, 2011 22:08 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Ethereal писал(а): Смысл уже состоит в том, что если Хищник говорит, что удобно, а мне так не кажется, то пусть скажет еще что-нибудь по этому поводу. Может быть есть какая-то идея, которая лежит на поверхности, а я ее в упор не вижу. Так иногда бывает. А что говорить-то? Существуют процессоры с гарвардской архитектурой, которые могут дописывать код в процессе работы. Если даже не могут дописывать, все равно остается кросс-компиляция, что позволяет использовать Форт, разрабатывая программы только на хост-машине. Разделение адресных пространств полезно хотя бы потому, что в ходе компиляции нет проблем с выполнением ALLOT - выделяемая память не пересекается с программным кодом. Если говорить о конфигурируемых процессорах, то вопрос вообще лишен смысла - почему вдруг нельзя описать память программ с доступом от процессора? |
Автор: | danbst [ Сб май 14, 2011 20:25 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Еще вопрос. Как работает слово EXECUTE, вызванное с режима интерпретации при ITC? Дело в том, что адресный интепретатор в режиме интерпретации не используется, а слово EXIT делает jmp NEXT, а не ret (не возврящается в интерпретатор). Есть какое-то стандартное решение проблемы? |
Автор: | WingLion [ Сб май 14, 2011 20:51 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
danbst писал(а): Есть какое-то стандартное решение проблемы? а в чем проблема?.. Слово вызвалось и вернулось по NEXT на следующее слово за EXECUTE... просто, само EXECUTE не имеет собственного jmp NEXT, а только jmp ADDR на исполняемый адрес слова |
Автор: | danbst [ Сб май 14, 2011 21:00 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Хорошо, тогда так. Вход (режим интерпретации) Код: <вычисление CFA> EXECUTE <дальше слова> EXECUTE делает jmp mem(CFA) Слово выполняется через NEXT. Доходит очередь до EXIT. Последний должен восстановить IP, который находился ДО входа в слово. НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте? |
Автор: | WingLion [ Сб май 14, 2011 21:10 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Так ведь NEXT - это и есть возврат в интерпретатор! EXECUTE вызывает слово. Если оно ассемблерное, то напрямую возвращается в адресный интерпретатор по NEXT. Если фортовое, то оно сначала вызывает ENTER - новый вход в интерпретатор, a по EXIT выходит из него и по NEXT (из слова EXIT) вновь попадает в интерпретатор (который обслуживает то слово, что содержит EXECUTE) Интерпретатор, конечно один на всех, просто ENTER - сохраняет текущий IP в стеке возвратов, который позже оттуда возвращается словом EXIT, и записывает в IP новый адрес... для вызываемого слова. |
Автор: | danbst [ Сб май 14, 2011 21:40 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
ну правильно! это интерпретация скомпилированых слова! А я про интепретацию строковых слов (или как она называется). |
Автор: | dynamic-wind [ Сб май 14, 2011 23:22 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
danbst писал(а): НО до входа в слово IP вообще не использовался (интепретатор - асемблерная процедура)! Как вернутся в процедуру (интепретатор) после NEXT? Или лучше интепретатор тоже закодить на форте? Напишите INTERPRET на форте. Или втолкните на стек возвратов адрес трамплина, CFA которого вернет в ассемблер. Код: TRAMP:
.word BACK2ASM INTERPRET: ... (PUSH RP) := TRAMP JUMP (POP DP) BACK2ASM: ... |
Автор: | WingLion [ Вс май 15, 2011 05:18 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Эх... Вот она путаница в терминах во всей красе... "Адресный интерпретатор" и "Форт интерпретатор" - разные вещи. Хотя, в данном топике изначально речь шла именно об адресной интерпретации. Потому и непонятки вышли. Для возврата в форт интерпретатор, проще всего, наверно, вызвать (INTERPRET) заново с остатком интерпретируемой строки в параметрах. danbst писал(а): Или лучше интепретатор тоже закодить на форте? Кстати, вот это именно то решение, которое вполне подойдет, чтобы не ломать сильно голову. А для "простого" вызова форт-слов из ассемблера (ассемблерной имитации EXECUTE) придется делать специальную ассемблерную оболочку, которая по сути будет "адресным интерпретатором на одно слово", которая и сделает возврат в нужную точку. |
Автор: | danbst [ Вс май 15, 2011 11:04 ] |
Заголовок сообщения: | Re: Портирование Форта. ч1. адресная интерпретация, регистры |
Спасибо, сделал трамплин, но с еще одним уровнем косвенности (нюансы ITC). |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |