Регистры, доступные пользователю

К доступным регистрам пользователь может обращаться с помощью команд машинного языка. К этим регистрам, как правило, имеют доступ все програм­мы — как приложения, так и системные. Обычно среди доступных регистров есть регистры данных, адресные регистры и регистры кода условия.

Регистры данных. Программист может применять их в различных целях. В ряде случаев они имеют общее назначение и могут использоваться любой ма­шинной командой для операций с данными. Однако зачастую при этом накла­дываются определенные ограничения. Например, некоторые регистры предна­значены для операций над числами с плавающей точкой, в то время как осталь­ные — для хранения целых чисел.

Адресные регистры. В них заносятся адреса команд и данных в основной памяти; в этих регистрах может быть записана только часть адреса, использую­щаяся при вычислении полного или эффективного адреса. Рассмотрим следую­щие примеры.

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

• Сегментный регистр. При сегментной адресации память разделяется на блоки (сегменты), состоящие из различного количества машинных слов. Адрес ячейки памяти складывается из адреса сегмента и смещения относительно начала сегмента. Имея представление о таком режиме адресации, легче будет усвоить ма­териал, изложенный в главе 7, "Управление памятью", в которой обсуждаются методы управления памятью. При этом режиме адресации базовый адрес сег­мента (его начало) хранится в одном из регистров. Таких регистров может быть несколько; например, один — для операционной системы (т.е. использующийся при выполнении процессором кода операционной системы), другие — для ис­полняющихся в данный момент приложений.

• Регистр стека. При стековой адресации выделяется специальный регистр, в котором размещен указатель на вершину стека. Этот режим адресации по­зволяет использовать некоторые команды, в которых отсутствует поле адре­са, например push и pop.

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