Регистр (процессор)

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

Многие архитектуры , особенно архитектуры RISC , позволяют арифметическим устройствам обрабатывать данные в регистрах; другие архитектуры также позволяют, по крайней мере частично, использовать незарегистрированное содержимое из  ОЗУ или из аппаратных регистров.

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

  • В настоящее время размер отдельных регистров обычно равен степени двойки, т. Е. ЧАС. 8, 16, 32, 64, 128, 256 или 512  бит .
  • Количество регистров на ядро варьируется от пяти до нескольких сотен.
  • Ниже описаны различные типы регистров.

Типы регистров в ядре ЦП

По характеристикам

У старых процессоров ( Z80 , Intel 486 ) регистры аппаратного обеспечения и архитектуры идентичны, с более современными процессорами (IBM  System / 360 Model 91, Pentium Pro , AMD K5 , Intel Core ) это разные вещи.

По количеству содержащихся значений данных

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

Согласно функции приложения

Регистр данных, аккумулятор

Регистры данных используются для хранения операндов для  АЛУ и его результатов. В более старых архитектурах процессоров иногда использовался только один такой регистр - аккумулятор ; Ядра процессоров нового поколения часто имеют несколько регистров данных с функцией накопителя.

Как правило, размер регистра данных вместе с шириной шины данных имеют решающее значение для классификации архитектуры процессора как 8-, 16-, 32-разрядной или 64-разрядной архитектуры. С 8-битной шиной данных и 8-битными регистрами данных она называется 8-битной архитектурой, например B. MOS Technology 6502 или Zilog Z80 . Процессоры с разными размерами шины данных и регистров данных часто упоминаются соответственно, например B. Motorola 68000 , называемый 16/32-битным процессором с 16-битной шиной данных и 32-битными регистрами данных. В настоящее время ( 2013 г. ) новейшие процессоры - это в основном 64-битные процессоры, например Б. AMD Opteron или AMD Bulldozer или процессоры Intel с EM64T и (редко) Itanium и Alpha AXP .

В 8-битных процессорах адресная шина и регистр были в основном 16 -битными . В большинстве современных процессоров адресные регистры имеют тот же размер, что и регистры данных, адресная шина обычно такого же размера или меньше.

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

Свободно используемые регистры

В современных процессорах RISC , таких как PowerPC или Sun SPARC , регистры данных называются общими или свободно используемыми регистрами (англ. GPR для General Purpose Register ), поскольку они могут использоваться как регистры данных или адреса . Точно так же Motorola 68000 имеет восемь эквивалентных регистров данных.

32-разрядные процессоры семейства Intel x86 происходят от архитектуры CISC и поэтому в значительной степени обладают свойствами своих 8- и 16-разрядных поколений предшественников. У них всего четыре общих регистра, которые также называются именами того времени (аккумулятор, базовый регистр, счетный регистр, регистр данных). Ядро процессора также не может выполнять определенные операции со всеми регистрами (например, деления могут иметь место только в аккумуляторе).

Регистр адресов

В адресные регистры играют важную роль в адресной арифметики. Они используются для вычисления адресов памяти операндов или команд и подключаются к внутренней шине данных и шине адреса.

При индексированной адресации , например, в Intel 8086 , различают два типа адресных регистров:

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

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

В других архитектурах процессоров единственный регистр, участвующий в адресации, называется индексным регистром: в Motorola 6800 и Zilog Z80 добавляется константа, в MOS Technology 6502 добавляются 16-битное значение и 8-битный индексный регистр. 6502 также имеет тип адресации, при котором один из нескольких регистров базового адреса может быть выбран из таблицы, хранящейся в RAM, с использованием индексного регистра. Точное наименование отдельных типов адресации непоследовательно и зависит от процессора.

Специальный регистр

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

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

Следующие специальные регистры можно найти в большинстве архитектур:

  • Команда регистр счетчика , а также программы счетчик или счетчик команд , ( на английском языке Инструкция Указатель  IP - ( 16-бит ) или Расширенная инструкция Указатель  ОПЗ ( 32-бит ) или счетчик команд  ПК): В зависимости от архитектуры системы, содержит в адрес памяти тока или следующая выполняемая команда - команда перехода устанавливает в этот регистр новое значение
  • Регистр инструкций (англ. Instruction register ): сохраняет текущую команду - для программиста недоступно
  • Базовый регистр , например Б. для таблицы базовых векторов: может быть сброшен пользовательской программой.
  • Сегментный регистр : особенность платформы x86, которая содержит старшие 16 бит 20-битного адреса; Поэтому их содержимое должно быть умножено на 16, а затем добавлено к смещению в сегменте, чтобы получить окончательный адрес памяти (таким образом, 20 бит адресного пространства могут быть покрыты чистыми 16-битными командами загрузки регистра , то есть 1  MiB )
  • Регистр состояния (английский: регистр кода состояния CCR или слово состояния процессора PSW или регистр флага ): указывает определенные состояния после выполнения команды (например, нулевой флаг , знак знака и т. Д.) - программа пользователя инициализирует отдельные флаги, например Б. перед арифметическими операциями
  • Регистр управления прерываниями (английский: регистр управления прерываниями ): когда более сложные ЦП, где эта функция не может быть обработана (см. Выше) с одним или двумя битами в регистре состояния, здесь выше может быть указано очень дифференцированное, на которое реагируют прерывания. на всех и с каким приоритетом. Читая, программа может узнать, какое из различных прерываний действительно присутствует. Написав, она может (временно) z. Б. блокировать отдельные прерывания, которые могут помешать выполнению определенной операции.

Обновления счетчик Z80, автоматический счетчик , который генерирует на обновления экрана адреса памяти и используется некоторыми программами в качестве генератора псевдослучайных чисел , также принадлежит к этой категории.

Некоторые микроконтроллеры (семейство Intel MCS 51, а также семейство Siemens C167 ) организуют эти специальные регистры и регистры для управления внутренними портами ввода-вывода в виде банка регистров , который использует ввод-вывод с отображением памяти с обычными командами для адресации. доступ к основной памяти. Основная память, скрытая этим банком регистров, может быть либо не адресована вообще, либо только косвенно.

Регистр стека

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

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

На большинстве современных архитектур существуют:

По электротехнике

8-битный регистр, состоящий из D-триггеров
  • простые защелки, которые могут хранить отдельные биты и выводить их для чтения; это большинство регистров (статус, регистры данных параллельного ввода / вывода).
  • Регистры многобитового счетчика, которые дополнительно увеличивают или уменьшают свое содержимое на 1 в ответ на импульс; Примеры: счетчик программ, регистр стека и регистр таймера .
  • Регистры сдвига в основном находятся в ALU процессора или числового сопроцессора , где они , помимо прочего, выполняют подфункции умножения и деления .

Регистр ввода / вывода

В дополнение к расположениям буферов в центральном процессоре компьютерной системы регистры также могут появляться в электронике подключенных периферийных устройств или микросхем, но сам ЦП также может иметь интегрированные регистры ввода / вывода . Как правило, их можно разделить на те же подкатегории, что и указанные выше. чистый регистр ЦП. Несколько репрезентативных примеров:

  • В дополнение к регистрам состояния и данных, регистры состояния блоков управления внешнего запоминающего устройства обычно включают в себя адресные регистры, которые относятся к адресной информации запоминающего устройства большой емкости, сегодня в основном это номера секторов .
  • В видеочипах биты в регистрах состояния управляют, например, Б. различные режимы видео; Регистры данных могут, например, B. Включены данные Sprite .
  • При параллельном интерфейсе регистр данных содержит фактические данные печати, а регистр состояния - биты подтверждения . Часто существует также регистр состояния, называемый DDR (для регистра направления данных ), с помощью которого можно запрограммировать направление данных (ввод или вывод) линий данных (например, для двунаправленного использования).

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

история

Уже в первом компьютере Zuse Z3 1941 г. и его предшественнике Zuse Z1 1938 г. две ячейки памяти "R1" и "R2" в слове машины доступны в качестве операндов для арифметических операций в " арифметический блок ». Для обмена данными (загрузки и сохранения) между этими регистрами и блоком хранения реализованы специальные машинные команды , которые можно увидеть отдельно от арифметического блока .

Таким образом, разработка регистров тесно связана с техническим развитием рабочей памяти самых ранних компьютеров: первые компьютеры вообще не имели рабочей памяти в сегодняшнем понимании. Все данные и сама программа хранились на совершенно разных носителях, таких как механические запоминающие устройства, перфокарты и запоминающие устройства на магнитных барабанах . Чтобы арифметический блок мог выполнять операцию, слова должны были быть переданы из массовой памяти в буферные ячейки арифметического блока, которые затем могли передать значение в логику переключения. Значение, сгенерированное на выходе логической схемы переключения, нужно было снова буферизовать до тех пор, пока его нельзя будет записать в запоминающее устройство большой емкости. Эти буферные пространства назывались регистрами (от латинского: regesta ; от regerere - входить).

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

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

Использование на языках высокого уровня

Некоторые языки высокого уровня, такие как  C, предусматривают явное использование регистров для переменных, которые, по словам программиста, используются особенно часто. Современные компиляторы (с середины 1990-х годов) игнорируют эти атрибуты и оставляют назначение констант, переменных или частичных выражений оптимизатору . В языке программирования C ++ , начиная с C ++ 11, объявление «регистровых» переменных с использованием одноименного ключевого слова было объявлено устаревшим («устаревшим»); с C ++ 17 поддержка прекращена. существовать целиком.

веб ссылки

Commons : Processor Register  - коллекция изображений, видео и аудио файлов.