Достаточно будет 1 раз "зарегистрировать" (при загрузке) для задачи мета-данные описывающие по какому смещению от начала "адресса в памяти" и перечень тех регистров которые содержат адресса, позже можно добавить или поменять "декларацию" по ходу выполнения программы, чтобы OS всегда хранила для каждой задачи все места где лежат указатели. Со стеком можно поступить жестко - определить ему место с адреса #ffff и запретить его использование кроме как для адресов возврата (т.е. в нем будут только 2-х байтные адреса возврата). Для передачи параметров в функции использовать регистры.1) Типизация стека и регистров. В стек каждый раз пишется не 2 байта, а 4 (данные и тип - число/указатель). Области смены типа регистров, а также EXX'ы обрамляются системными вызовами.
Нужно эмулировать виртуальную память c таким интерфейсом:2) Чтение данных по указателям - только через системные вызовы (очень медленно!). В указателях только смещения относительно начала блока программы. CALL и RET - через системные макросы (тоже по смещению, и в стеке лежит смещение точки возврата).
1. выделить регион памяти (возвращает id региона)
2. получить указатель на регион памяти и зафиксировать его (при этом он становится неперемещаемый)
3. инвалидировать указатель на регион и разрешить его премещение
4. освободить память занимаемую регионом
При этом вместо адресов на структуры в памяти нужно будет передавать id региона.
Тут нужно будет ввести понятие short call - который сможет и напрямую работать (при условии что тот кого он собрался вызывать перемещается всегда вместе с тем кто использует этот short call). Ну и far call - через системный вызов.3) CALL и RET - через системные макросы (в стеке лежит смещение точки возврата). Типы регистров никогда не меняются.
Если указатели - HL и DE, то проблема с 16-битной арифметикой.
Если указатели - IX и IY, то всё медленно.
Если только один указатель и буферизация данных в стеке, то ещё медленнее и вообще изврат.
Компромисс - IX и DE (или DE и DE').
[/QUOTE]4) Интерпретируемый язык (очень медленно!).
Что значит очень? forth даст замедление в 3...4 раза всего то, это сравнимо со скоростью компилируемой программы на С, при этом размер стека можно сделать автоконтроллируемым и легко использовать всю спекки память из форт программы не замечая ограничения адреса в 16bit.


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