Что хранится в регистре состояния процессора

Обновлено: 02.07.2024

Регистр – это высокоскоростная ячейка памяти внутри процессора.

Содержание

Распространенные типы регистров ЦП

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

Типы присутствующих регистров зависят от семейства процессоров, но в целом состоят из некоторой комбинации:

Регистры общего назначения

Используется для временного хранения значений. Большинство современных архитектур имеют несколько десятков регистров общего назначения.

Накопитель

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

Индексный регистр

Специальное обозначение регистра общего назначения, используемого для хранения индекса (смещения) в массиве или области памяти. Примерами этого являются регистры исходного индекса (SI) и целевого индекса (DI) x86_64. Точно так же регистры 6502 Y и X являются индексными регистрами.

Регистрация статуса

Регистр статуса (или Регистр флага, или Регистр кода состояния) содержит флаговые биты, которые устанавливаются/очищаются/проверяются либо явно (по инструкции) или неявно (в результате других операций). Например, флаг ARM AArch32 «Z» устанавливается («1»), если операция имеет нулевой результат, и очищается («0»), если операция имеет ненулевой результат. Этот флаг представляет собой один бит в регистре состояния процессора приложений (APSR).

Регистры управления

Регистры управления содержат управляющие флаги, которые изменяют некоторые аспекты работы процессора, такие как включение двоично-десятичной математики (BCD) или переключение режима с прямым порядком байтов/обратным порядком байтов.

Указатель стека

Указатель стека — это регистр, используемый для косвенного доступа к стеку, который автоматически увеличивается или уменьшается при каждом доступе.

Счетчик программ

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

Переход выполняется путем записи адреса назначения в программный счетчик.

Вызов подпрограммы (функции) выполняется путем помещения счетчика программ в стек или сохранения его в назначенном Link Register и последующей записи адреса подпрограммы в счетчик программ. По завершении подпрограммы адрес возврата извлекается из стека или извлекается из регистра ссылок и записывается в программный счетчик.

Режимы относительной адресации добавляют значение со знаком к программному счетчику для расчета эффективного адреса.

Другое использование термина «Регистрация»

Термин регистр также может использоваться для обозначения порта ввода-вывода или адреса памяти в устройстве ввода/вывода с отображением памяти, используемом для установки/чтения состояния и параметров устройства или отправки/получения. небольшие объемы данных.

Центральный процессор MIPS (и SPIM) содержит 32 32-разрядных регистра общего назначения, пронумерованных от 0 до 31. Регистр обозначается как $n. Регистр $0 всегда содержит запрограммированное значение 0. MIPS установила ряд соглашений относительно того, как следует использовать регистры. Эти предложения являются рекомендациями, которые не применяются аппаратным обеспечением. Однако программа, нарушающая их, не будет работать должным образом с другим программным обеспечением. В таблице перечислены регистры и описано их предполагаемое использование.

Регистры $at (1), $k0 (26) и $k1 (27) зарезервированы для использования ассемблером и операционной системой.

Регистр $sp (29) — это указатель стека, указывающий на последнее используемое место в стеке. 4 Регистр $fp (30) — указатель кадра. 5 В регистр $ra (31) записывается обратный адрес для вызова инструкции jal.

Регистр $gp (28) — это глобальный указатель, указывающий на середину 64-килобайтного блока памяти в куче, содержащей константы и глобальные переменные. К объектам в этой куче можно быстро получить доступ с помощью одной инструкции загрузки или сохранения.

Кроме того, сопроцессор 0 содержит регистры, полезные для обработки исключений. SPIM не реализует все эти регистры, так как они не очень полезны в симуляторе или являются частью системы памяти, которая не реализована. Однако он обеспечивает следующее:

Имя регистрации Номер Использование
BadVAddr 8 Адрес памяти по какому адресу произошло исключение
Статус 12 Маска прерывания и биты разрешения
Причина 13 Тип исключения и биты ожидающего прерывания
EPC 14 Адрес инструкции, вызвавшей исключение

Эти регистры являются частью набора регистров сопроцессора 0, и доступ к ним осуществляется с помощью инструкций lwc0, mfc0, mtc0 и swc0.

На рисунке показаны биты в регистре состояния, реализованные SPIM. Маска прерывания содержит бит для каждого из восьми уровней прерывания. Если бит равен единице, прерывания на этом уровне разрешены. Если бит равен нулю, прерывания на этом уровне запрещены. Младшие шесть бит регистра состояния реализуют трехуровневый стек для ядра/пользователя и битов разрешения прерывания. Бит ядра/пользователя равен 0, если программа выполнялась в ядре, когда произошло прерывание, и 1, если она была в пользовательском режиме. Если бит разрешения прерывания равен 1, прерывания разрешены. Если он равен 0, они отключены. При прерывании эти шесть битов сдвигаются влево на два бита, так что текущие биты становятся предыдущими битами, а предыдущие биты становятся старыми битами. Оба текущих бита установлены в 0 (т. е. режим ядра с отключенными прерываниями).

На рисунке показаны биты в регистре причины. Восемь битов ожидающего прерывания соответствуют восьми уровням прерывания. Бит становится равным 1, когда прерывание на его уровне произошло, но не было обслужено. Биты кода исключения содержат код из следующей таблицы, описывающий причину исключения.

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

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

2 ответа 2

Я бы разделил регистры на две группы:

  1. Системные регистры
  2. Регистры, определяющие состояние процесса

Системные регистры не изменяются в зависимости от контекста процесса. Классически ко второй группе регистров относятся:

  1. Регистр состояния процессора
  2. Общие регистры
  3. Регистры отображения памяти

VAX имеет 16 32-битных регистров (R0–R15). Некоторые из этих регистров (R12–R15) имеют особое назначение:

PC = Счетчик программ указывает на следующую команду для выполнения SP = Указатель стека указывает на низ стека для текущего режима. AP = указатель аргумента указывает на аргументы функции FP = указатель кадра, используемый для восстановления стека после завершения вызова функции.

Остается R0–R11 для общего использования.

R6-R11 могут использоваться программистами по желанию. R0-R5 могут использоваться программистами, но некоторые инструкции меняют свои значения.

  1. Однобайтовое целое число со знаком или без знака
  2. Двухбайтовое целое число со знаком или без знака
  3. Четырехбайтовое целое число со знаком или без знака
  4. Четыре байта с плавающей запятой

Вы можете сделать что-то вроде этого:

В первом случае процессор обрабатывает содержимое R0 и R1 как 32-битные целые числа со знаком. Во втором случае содержимое R0 и R1 обрабатывается как 32-битные значения с плавающей запятой.

Интерпретация содержимого регистра зависит от выполняемой инструкции. Таким образом, две приведенные выше инструкции, скорее всего, сохранят разные значения в R2, даже если они имеют одинаковые значения в R0 и R1.

Большие типы данных, соседние регистры могут быть объединены.

При этом содержимое регистров R0/R1 добавляется к содержимому регистров R2/R3 и результат сохраняется в регистрах R4/R5, при этом содержимое всех пар регистров обрабатывается как 64-битные значения с плавающей запятой.

Можно даже

VAX имеет символы и сложные инструкции по сопоставлению, которые используют R0-R5 для специальных целей (например, счетчики циклов). Это инструкции с длительным выполнением, которое можно прервать. Использование регистров для поддержания состояния инструкции позволяет перезапустить инструкцию в середине потока при перезапуске процесса.

Программисты используют R0-R5. С этим проблем нет, если вы не используете инструкции, которые их нарушают.

    Темы, обсуждаемые в этой веб-заметке:

<УЛ> <УЛ>
  • Структура и работа ЦП
    • Функция каждого компонента ЦП
    • Работа процессора (цикл выполнения инструкций)
    <УЛ>
  • Концепция указателя
  • Счетчик программ — это указатель
  • Поток программы по умолчанию является последовательным
  • Инструкция перехода может изменить ход программы по умолчанию
  • <УЛ>
  • Арифметические и логические операции
  • Операции передачи данных между процессором и оперативной памятью
  • Инструкции перехода, которые изменяют ход программы (инструкции перехода могут быть условными)
    • Структура процессора:

    Компоненты ЦП:

    <УЛ> <УЛ>
  • Регистр – это синоним памяти в информатике.
  • Регистр общего назначения — это ячейка памяти.
  • Каждый регистр общего назначения имеет уникальное имя
  • Он используется для хранения (и вызова) промежуточных результатов сложных вычислений.
  • <УЛ> <УЛ>
  • Сложная электрическая цепь, которая может выполнять математические (+, -, ×, /) и логические операции ( , ≥, и , или )
  • Вывод (результат) вычисления (полученный АЛУ) часто сохраняется в регистре общего назначения
    • <УЛ>
    • Содержит текущую инструкцию, выполняемую процессором.
    • ЦП выполнит операцию, указанную кодом инструкции, содержащимся в регистре инструкций

    <УЛ> <УЛ>
  • Счетчик программ — это регистр (ячейка памяти)!
  • Этот регистр содержит адрес (местоположение в памяти) следующей инструкции после того, как ЦП завершит выполнение текущей инструкции в регистре инструкций
  • Значение счетчика команд будет увеличиваться после того, как ЦП завершит выполнение одной инструкции.
    • <УЛ>
    • Этот регистр содержит различную информацию о процессоре.
    • Среди информации, содержащейся в PSR, есть:

    Результат операции сравнения позволит ЦП определить следующий факт между a и b :

      Центральный процессор многократно выполняет следующую последовательность операций:

      После выполнения инструкции ЦП получает («выбирает») (следующую) инструкцию по адресу (местоположению), указанному в программном счетчике

      <УЛ> Предположим, ЦП только что завершил выполнение инструкции (код инструкции 0) в регистре инструкций:

    (Код инструкции 0 в регистре инструкций означает "добавить" и она только что была выполнена)

      ЦП сначала отправляет запрос на получение (восстановление) данных, хранящихся в ячейке памяти, заданной программным счетчиком (ПК) (на рисунке значение ПК = 1):

    ЦП заставит память извлекать (вызывать) значение, хранящееся по адресу памяти (местоположению) 1

    Это число (4) будет интерпретироваться как код компьютерной инструкции.

    Старый код инструкции (0) будет заменен новым кодом инструкции

    Обратите внимание, что ЦП теперь готов к выборке следующей инструкции при обработке текущей инструкции (хранящейся в регистре инструкций).

    Читайте также: