Существует целая куча регистров, которые можно рассматривать как блоки по 8. В любой момент времени три последовательных блока из 8 регистров видны как текущее окно регистров и помечены как %o0
-%o7
, %l0
- %l7
и %i0
- %i7
.(Существует четвертый блок из 8 регистров, %g0
- %g7
, которые являются глобальными, а не являются частью механизма управления окнами.)
Когда вы save
или restore
, окноперемещается на два блока из 8. Перекрывающийся блок позволяет передавать параметры и результаты.Регистры с именем %o0
- %o7
в вызывающем абоненте - это те же регистры, которые называются %i0
- %i7
в вызывающем абоненте.(Два новых блока в вызываемом объекте - %l0
- %l7
, которые являются частными для локального использования в этом окне, и %o0
- %o7
, которые вызываемый абонент может использовать, когда он, в свою очередь, хочет вызвать другую функцию.)
Это яснее с изображением:
: :
+----------------------+
| Block of 8 registers | caller's window
+----------------------+ +----------------------+
| Block of 8 registers | | %i0 - %i7 | ---------.
+----------------------+ +----------------------+ | save
| Block of 8 registers | | %l0 - %l7 | v
+----------------------+ +----------------------+ +----------------------+
| Block of 8 registers | | %o0 - %o7 | | %i0 - %i7 |
+----------------------+ +----------------------+ +----------------------+
| Block of 8 registers | ^ | %l0 - %l7 |
+----------------------+ restore | +----------------------+
| Block of 8 registers | `--------- | %o0 - %o7 |
+----------------------+ +----------------------+
| Block of 8 registers | callee's window
+----------------------+
: :
Ваш абонент помещает аргумент num
в %o0
(в своем окне), а затем вызывает вас.Вы save
настраиваете новое окно, и вы видите его в %i0
в своем окне.
.rem
принимает два параметра.Вы помещаете их в свои %o0
и %o1
(в своем окне), а затем вызываете их.Он увидит их в своих %i0
и %i1
(при условии, что он установит save
для установки нового окна).Ответ помещается в %i0
, который является вашим %o0
.
Аналогично, вы должны поместить свой результат в %i0
;кто бы ни позвонил вам, вы увидите это в своих %o0
.