Описанная выше схема регистровых окон обеспечивает эффективную работу с локальными скалярными переменными процедур. Однако она никак не учитывает необходимость обработки глобальных переменных, к которым обращаются несколько процедур.
Существует два подхода к обработке глобальных переменных. Первый подход, который совершенно очевиден, состоит в том, что для переменных, объявленных в исходном тексте программы на языке высокого уровня как глобальные, компилятор резервирует определенные ячейки в оперативной памяти, и все команды обращения к глобальным переменным используют режимы адресации, работающие с оперативной памятью, а не с регистрами. Однако для обработки часто используемых в программе глобальных переменных такой подход не эффективен.
Альтернативный подход состоит в том, чтобы включить в состав процессора специальную группу регистров для размещения таких часто используемых глобальных переменных. Эти регистры должны иметь фиксированные номера, и доступ к ним должен быть открыт из любой процедуры. Для упрощения формата машинных команд при этом можно использовать унифицированную схему нумерации регистров. Например, номера от 0 до 7 присваиваются регистрам глобальных переменных, а номера от 8 до 31 — регистрам в составе регистровых окон, т.е. фактически эти номера представляют собой смещение относительно значения указателя текущего окна. Конечно, использование регистров для хранения глобальных переменных несколько усложняет схему адресации регистров в процессоре, и, к тому же, компилятор должен решать, какие именно глобальные переменные имеет смысл размещать в этих регистрах, а какие хранить в ячейках памяти.
|
|