- •Глава 12. Регистры
- •12.1. Типы регистров
- •12.2. Программно доступные регистры
- •12.3. Регистры общего назначения
- •Универсальные регистры для хранения данных любых форматов или специализированные регистры в соответствии с определенными типами данных?
- •12.4. Регистры условий
- •12.5. Регистры управления и состояния
- •12.6. Об эффективном использовании регистров
- •12. 7. Программная оптимизация использования регистров
- •12.8. Аппаратный подход к повышению эффективности использования регистров Регистровые окна
- •Глобальные переменные
- •Большой набор регистров или кэш-память?
- •12.9. Контрольные вопросы
12.4. Регистры условий
Регистры условий также в определенной мере программно доступны, хотя набор операций с ними со стороны программы очень ограничен. Эти регистры (или регистр) хранят одноразрядные коды условий, которые в архитектуре фирмы Intel называют флагами. Большинство флагов устанавливается процессором в зависимости от значения результата последней выполненной арифметической или логической операции. Например, арифметическая операция может породить положительный или отрицательный результат, равный нулю или отличный от нуля, может произойти переполнение и т.д. Все эти свойства результата фиксируются в соответствующих разрядах дополнительно к собственно результату, который фиксируется в каком-либо регистре данных или в ячейке оперативной памяти. Эти признаки могут быть проанализированы при выполнении команд условного перехода.
Разряды кодов условий объединяются в один или несколько регистров условий. Обычно они включаются в регистр состояния. В общем случае эти признаки могут анализироваться машинными командами, но машинная команда не может их явно изменить. (Это возможно только при выполнении арифметической команды со специально подобранными значениями операндов.)
В некоторых архитектурах процессоров при выполнении команд вызова подпрограмм автоматически сохраняется вся информация, размещенная в программно доступных регистрах. При возврате из подпрограммы эта информация восстанавливается. Такой механизм вызова и возврата из подпрограммы позволяет каждой подпрограмме независимо пользоваться всеми регистрами. В архитектурах процессоров, где такого автоматического сохранения/восстановления регистров не происходит, заботы о сохранении информации в регистрах перекладываются на программиста.
12.5. Регистры управления и состояния
В управлении работой процессора принимает участие несколько регистров. В большинстве моделей процессоров эти регистры недоступны программе, но могут неявно опрашиваться при выполнении некоторых привилегированных машинных команд в супервизорном режиме (такие команды используются в программах операционной системы). Нужно отметить, что разные модели процессоров имеют отличную друг от друга организацию регистров и, следовательно, отличную терминологию.
В процессе обработки машинной команды существенную роль играют четыре регистра управления:
Регистр номера команды (Счетчик команд) - содержит адрес извлекаемой машинной команды;
Регистр текущей команды - содержит последнюю извлеченную машинную команду;
Регистр адреса в оперативной памяти - содержит адрес ячейки оперативной памяти;
Регистр данных памяти - содержит слово данных, которое должно быть записано в оперативную память или слово, только что извлеченное из оперативной памяти.
Как правило, регистр номера команды (РНК) обновляется процессором сразу после того, как извлекается очередная машинная команда, и, таким образом, практически в течение всего цикла обработки команды в нем содержится адрес команды, которая должна выполняться в следующем цикле. Содержимое РНК также изменяется командами переходов и пропуска.
Извлеченная из оперативной памяти машинная команда помещается в регистр команды, а затем производится анализ отдельных ее полей — кода операции и полей операндов.
Данные извлекаются из оперативной памяти с использованием регистра адреса данных и регистра данных.
Четыре перечисленных регистра используются при перемещении данных между процессором и оперативной памятью. Но внутри процессора данные должны передаваться в АЛУ для обработки. АЛУ имеет доступ, как к регистру данных, так и к программно доступным регистрам. Но возможен и такой вариант структуры процессора, в котором существуют дополнительные буферные регистры на стыке АЛУ с другими компонентами. Эти буферные регистры играют роль входных и выходных для АЛУ и обмениваются данными с регистром данных и с программно доступными регистрами.
Регистр слова состояния программы
Во всех моделях процессоров существуют один или несколько регистров, хранящих слово состояния программы. В состав этого регистра входят разряды кодов условий и некоторая другая информация о текущем состоянии программы (фактически, процессора). В большинстве моделей процессоров в слове состояния программы присутствуют если не все, то уж обязательно некоторые из перечисленных ниже признаков или полей:
S (знак). Содержит знаковый разряд результата последней арифметической операции.
Z (нуль). Устанавливается в 1, если результат последней операции равен нулю.
С (перенос). Устанавливает в 1, если в результате последней арифметической операции возник перенос (при сложении) или заем (при вычитании) из старшего значащего разряда. Используется при выполнении арифметических операций над многословными операндами.
Е (равенство). Устанавливает в 1, если при логическом сравнении обнаружено равенство операндов.
О (переполнение). Индикатор переполнения при выполнении последней арифметической операции.
I (разрешение/блокировка прерывания). Используется для разрешения или блокировки прерывания.
SV (режим супервизора). Индикатор привилегированного режима выполнения программы (режима супервизора). В режиме супервизора разрешается выполнение некоторых привилегированных машинных команд и доступ к защищенным областям оперативной памяти.
В конкретных моделях процессоров можно встретить и другие регистры, хранящие информацию о текущем состоянии процессора и управляющие режимом его функционирования. Помимо слова состояния программы это может быть регистр указателя блока оперативной памяти, содержащего дополнительную информацию о состоянии (т.е. блока управления процессом). В состав процессоров, работающих с векторными прерываниями, включается регистр вектора прерывания. Если для выполнения некоторых функций используется стек, в составе процессора должен быть регистр указателя системного стека. Регистр указателя таблицы страниц необходим в системах, работающих с виртуальной памятью. И, наконец, определенные регистры нужны для управления операциями ввода-вывода.
