Имитация локальных переменных на ПМК без local

Здравствуйте!
Какие вы используете приемы для имитации локальных переменных на своих ПМК?

Зачем же иммитировать? В HP-48/49/50, TI-89/92/Voyage, TI Nspire (CAS) есть локальные переменные. Ну а для Кэсио можно, например, какой-либо список использовать вместо стека для сохранения и восстановления переменных.

Мои программируемые калькуляторы:
Б3-21, Б3-34, МК-61, МК-52, МК-85
CASIO: cfx-9850GB+, fx-9750G+, fx-9750GII, fx-9860G, Algebra fx-2.0, fx-5800P, fx-7400G+
HP: 50G, 48G, 35s
TI: Nspire-CAS, Voyage-200, 89Titanium
SHARP EL-9600G

Ну так я задал вопрос относительно тех ПМК, где не предусмотрены локальные переменные. У меня так TI-86 и Casio 9950, например.

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

Регистры. Я просто выделяю разным подпрограммам разные регистры — и всё. Если нет рекурсии, всё нормально работает.

Рекурсия как раз есть.

ЭКВМ. На ЭКВМ - стек в предварительно отведённой области регистров с обращением на основе косвенной адресации. Удобно использовать подпрограммы переноса данных в рабочие регистры R0-RE (или другие, что несущественно) и обратно (по аналогии с PUSHA, POPA процессоров i86).

Для некоторых применений возможен программный вызов прерывания, который позволяет работать с копиями регистров R0-RE, но для рекурсии это не подходит.

Имитация стека = Имитация локальных переменных. Спасибо за ответ! Похоже основа имитации локальных переменных это имитация, в первую очередь, стека.

Забыл я про эту косвенную адресацию... Интересно, на TI-86 как сделать косвенную адресацию? Кроме List1(i) ничего пока не нашел. Но это какая-то урезанная косвенная адресация, при которой нельзя обратится к любой переменной.

На TI-86. Это не ко мне. ;-)

А на ЭКВМ - элементарно: из первой сотни регистров любой используется как индекс (NN) в стеке, другой для организации цикла (CC). Предполагается, что перед первым вызовом в NN записано начало стека.

Загрузка из регистров в стек (31 байт):
15 P M CC
S1: PK RM CC ; считать содержимое регистра с адресом записанным в CC
PK M NN ; записать его в регистр с адресом записанным в NN
P RM NN ; инкремент NN
1 +
P M NN
999 - ; проверка на выход за пределы области вверх
P X<0 ERR ; перейти на ошибку
P RM CC ; декремент CC
1 -
P M CC
P X<0 S1 ; цикл от 15 до 0
RTN

Загрузка из стека в регистры (32 байта):
0 P M CC
S2: PK RM NN ; считать содержимое регистра с адресом записанным в NN
PK M CC ; записать его в регистр с адресом записанным в CC
P RM NN ; декремент NN
1 -
P M NN
20 - ; проверка на выход за пределы области вниз
P X>=0 ERR ; перейти на ошибку
P RM CC ; инкремент CC
1 +
P M CC
16 -
P X>=0 S2 ; цикл от 0 до 15
RTN

Примерно так.

Может кто другой ответит по TI. Спасибо, как куплю 161 буду знать где про имитацию локальных переменных расписано!