Работа с регистровым стеком

Вызов в Самсоне

Парал. Процессы

Сoroutine - сопрограмма

Возврат

1) Переход обратно

2) Восстан. Регистры

3) На врехушку стека возвращ зн-ие

4) Передаем упр-е

Полный детерменизм во время написания, никакого стека, команда transfer

У кажд.процесса свой сегмент данных.Никакого стека. Есть semaphore или жжужалка или мониторы, захваты ресурса, сообщения

Обычно 50 тактов команда вызов, боремся как с вырезкой.

To 1000 do p(x,y) od “толкотня регистров”

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

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

Сложение регистров – 1 такт, чтение-запись в память – 4-5 такта. Значит, надо работать с регистрами.

В САМСОНе ~ 40 регистров.

Стек регистров:

 
 

УК – указатель верхушки стека регистров.

 
 

Перенумеровываем регистры: 0-ой – УК, дальше влево – 1, 2 и т.д. Если нужен ещё один регистр, УК сдвигаем вправо. Тот регистр, на который он указывал, становится 0-ым, тот, который был 0-ым, становится первым и т.д. В разные моменты времени один и тот же регистр имеет разные номера.

for i:=1 to N do a[i]:=0

 
 

Ч1 – загрузить 1

Ч N – загрузить N

ЦК М8 – проверка

ЧА а – загрузить адрес начала массива

инд1Р – регистровая индексация

Ч0 – загрузить 0

П@ - с верхушки стека целых записать в память, куда указывает адресный регистр

КЦ – конец цикла

 
 

Так плохо: на каждой итерации читаем адрес начала массива. Улучшение:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: