Регистр процессора

редактировать
Оперативная память с немедленным доступом, доступная как часть цифрового процессора

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

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

Регистры процессора обычно находится на вершине иерархии памяти и обеспечивает самый быстрый способ доступа к данным. Этот термин обычно относится только к группе регистров, которые непосредственно кодируются как часть инструкции, как определено набором инструкций . Однако современные высокопроизводительные процессоры часто имеют дубликаты этих «архитектурных регистров» для повышения производительности за счет переименования регистров , что позволяет выполнять параллельное и спекулятивное выполнение. Современный дизайн x86 приобрел эти методы примерно в 1995 году с выпусками Pentium Pro, Cyrix 6x86, Nx586 и AMD K5..

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

Содержание

  • 1 Размер
  • 2 Типа
  • 3 Примеры
  • 4 Использование
  • 5 См. Также
  • 6 Ссылки

Размер

Регистры обычно измеряются количество битов, которые они могут хранить, например, «8-битный регистр», «32-битный регистр» или «64-битный регистр "или даже больше. В некоторых наборах команд регистры могут работать в различных режимах, разбивая свою память хранения на более мелкие (например, 32-битные на четыре 8-битных), в которые несколько данных (вектор или одномерный массив данных ) можно загружать и эксплуатировать одновременно. Обычно это реализуется путем добавления дополнительных регистров, которые отображают свою память в более крупный. Процессоры, которые могут выполнять одну инструкцию для нескольких данных, называются векторными процессорами.

Типами

Процессор часто содержит несколько типов регистров, которые можно классифицировать в соответствии с их содержанием или инструкциями, которые работают. на них:

  • Доступные пользователю регистры могут быть прочитаны или записаны машинными инструкциями. Чаще всего доступные пользователю регистры делятся на регистры данных и регистры адреса.
    • Регистры данных могут содержать числовые значения данных, такие как целое число и, в некоторых архитектурах, значения с плавающей запятой, а также символы, маленькие битовые массивы и другие данные. В некоторых старых и младших ЦП специальный регистр данных, известный как аккумулятор, неявно используется для многих операций.
    • Адресные регистры содержат адреса и используются инструкциями, которые косвенно обращаются к первичной памяти.
      • . Некоторые процессоры содержат регистры, которые могут использоваться только для адреса или только для хранения числовых значений (в некоторых случаях используются как индексный регистр , значение которого добавлено как смещение от некоторого адреса); другие позволяют регистрам хранить любой вид количества. Существует большое количество возможных режимов адресации, используемых для указания эффективного адреса операнда.
      • указатель стека используется для управлять стеком времени выполнения . Редко другие стеки данных адресуются с помощью специализированных адресных регистров, см. стековая машина.
    • Регистры общего назначения (GPR) могут хранить как данные, так и адреса, т. Е. Они являются комбинированными данными. / адресные регистры; в некоторых архитектурах файл регистров унифицирован, так что GPR могут также хранить числа с плавающей запятой.
    • Регистры состояния содержат истину значения часто используются для определения того, должна или не должна выполняться какая-либо инструкция.
    • Регистры с плавающей запятой (FPR) хранят числа с плавающей запятой во многих архитектурах.
    • Константа регистры содержат значения только для чтения, такие как ноль, единица или pi.
    • векторные регистры содержат данные для векторной обработки, выполняемой инструкциями SIMD (одиночная инструкция, Несколько данных).
    • Регистры специального назначения (SPR s) удерживают состояние программы; они обычно включают в себя счетчик программ , также называемый указателем команд, и регистр состояния ; счетчик программ и регистр состояния могут быть объединены в регистр слова состояния программы (PSW). Вышеупомянутый указатель стека иногда также включается в эту группу. Встроенные микропроцессоры также могут иметь регистры, соответствующие специализированным аппаратным элементам.
    • В некоторых архитектурах регистры, зависящие от модели, (также называемые машинными регистрами) хранят данные и настройки, относящиеся к самому процессору. Поскольку их значения связаны с конструкцией конкретного процессора, нельзя ожидать, что они останутся стандартными между поколениями процессоров.
    • Регистры диапазона типов памяти (MTRR)
  • Внутренние регистры - регистры недоступны инструкциям, используются внутри процессора для операций.
  • Архитектурный регистр - Регистры, видимые программному обеспечению, определенному архитектурой, могут не соответствовать физическому оборудованию, если переименование регистров выполняется нижележащим оборудованием.

Аппаратные регистры аналогичны, но происходят вне ЦП.

В некоторых архитектурах (например, SPARC и MIPS ) первым или последним регистром в целочисленном регистровом файле является псевдо-регистр таким образом, чтобы он всегда возвращал ноль при чтении (в основном для упрощения режимов индексации), и его нельзя перезаписать. В Alpha это также делается для файла регистров с плавающей запятой. В результате этого файлы регистров обычно упоминаются как имеющие на один регистр больше, чем то, сколько их фактически можно использовать; например, цитируются 32 регистра, когда только 31 из них соответствует приведенному выше определению регистра.

Примеры

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

Хотя все вышеперечисленные архитектуры различны, почти все они представляют собой базовую структуру, известную как архитектура фон Неймана, впервые предложенную венгерско-американским математиком Джон фон Нейман. Также стоит отметить, что количество регистров на GPU намного больше, чем на CPU.

АрхитектураРегистры GPR / данных + адресные регистрыFP. регистрыПримечания
ATT Hobbit 0стек из 7Стек-машина
Cray -1 8 скалярных данных, 8 адресов8 скалярных, 8 векторных (64 элемента)Скалярные регистры данных могут быть целыми или с плавающей запятой; также 64 скалярных T-регистра блокнота и 64 адресных регистра B блокнота
4004 1 аккумулятор, 16 других0Регистр A предназначен для общего назначения, а регистры r0 – r15 - для адреса и сегмента.
8008 1 аккумулятор, 6 других0Регистр A - это аккумулятор, в котором выполняются все вычисления; регистры H и L могут использоваться в комбинации в качестве адресного регистра; все регистры могут использоваться как операнды в командах загрузки / сохранения / перемещения / увеличения / уменьшения и как другой операнд в арифметических командах. Нет доступных единиц FP.
8080 1 аккумулятор, 6 других0Плюс указатель стека. Регистр A - это аккумулятор, с которым производятся все вычисления; пары регистров B + C, D + E и H + L могут использоваться как регистры адреса в некоторых инструкциях; все регистры могут использоваться как операнды в командах загрузки / сохранения / перемещения / увеличения / уменьшения и как другой операнд в арифметических командах. В некоторых инструкциях используется только H + L; другая инструкция меняет местами H + L и D + E. Процессоры с плавающей запятой, предназначенные для 8080, были, и. Их также можно было использовать с Z80 и аналогичными процессорами.
iAPX432 0стек из 6стековая машина
16-битный x86 6стек из 8 (при наличии FP)8086 / 8088, 80186 / 80188, 80286, с 8087, 80187 или 80287 для чисел с плавающей запятой, с 80-битным стеком из 8 регистров с глубиной, с некоторыми инструкциями, которые могут использовать регистры относительно вершины стека в качестве операндов; без 8087/80187/80287, без регистров с плавающей запятой
IA-32 8стек из 8 (при наличии FP), 8 (при наличии SSE / MMX)80386 требуется 80387 для операций с плавающей запятой, более поздние процессоры имели встроенную функцию с плавающей запятой, причем оба из них имели 80-битный стек из 8 регистров с глубиной стека с некоторыми инструкциями, которые могли использовать регистры относительно вершины стека в качестве операндов. Pentium III и более поздние версии имели SSE с дополнительными 128-битными регистрами XMM.
x86-64 1616/32Регистры FP представляют собой 128-битные регистры XMM, позже расширенные до 256-битных регистров YMM с помощью AVX / AVX2 и 512-битных ZMM0 -ZMM31 регистры с AVX-512.
Xeon Phi 1632Включая 32 256/512-битных регистра ZMM с AVX-512.
Fairchild F8 один аккумулятор, 64 регистра блокнота, один регистр косвенного блокнота (ISAR)н / дИнструкции могут напрямую ссылаться на первые 16 регистров блокнота и иметь доступ ко всем блокнотная запись косвенно регистрируется через ISAR
Geode GX 1 данные, 1 адрес8Geode GX / Media GX // 5x86 - это эмуляция 486 / Pentium-совместимого Процессор производства Cyrix / National Semiconductor. Как и Transmeta, процессор имел уровень трансляции, который переводил код x86 в собственный код и выполнял его. Он не поддерживает 128-битные регистры SSE, только стек 80387 из восьми 80-битных регистров с плавающей запятой и частично поддерживает 3DNow! от AMD. Собственный процессор содержит только 1 регистр данных и 1 адресный регистр для всех целей и переведен в 4 пути 32-битного регистра именования r1 (базовый), r2 (данные), r3 (обратный указатель) и r4 (указатель стека) в блокноте sram. для целочисленных операций и использует кеш L1 для эмуляции кода x86 (обратите внимание, что он несовместим с некоторыми инструкциями 286/386/486 в реальном режиме). Позже от дизайна отказались после того, как AMD приобрела IP у National Semiconductor и заклеймила его ядром Athlon на рынке встраиваемых систем.
SunPlus SPG 06 стек + 4 SIMD16-битный 32-битный стековый процессор адресного пространства от тайваньской компании Sunplus Technology, его можно найти на линии V.Smile Vtech для образовательных целей и игровая консоль Mattel HyperScan и XaviXPORT. в нем действительно отсутствует регистр общего назначения или внутренний регистр для именования / переименования, но его модуль с плавающей запятой имеет 80-битный 6-каскадный стек и четыре 128-битных регистра VLIW SIMD на сопроцессоре вершинного шейдера.
VM Labs Nuon 0132-битный стековый процессор, разработанный лабораториями VM для специализированных мультимедийных целей. Его можно найти в собственной линейке консолей Nuon для DVD-плееров и в семейной развлекательной системе Game Wave от ZaPit games. На дизайн сильно повлияла технология Intel MMX, он содержал 128-байтовый унифицированный стековый кеш для векторных и скалярных инструкций. унифицированный кэш можно разделить на 8 128-битных векторных регистров или 32 32-битных скалярных регистра SIMD посредством переименования банка, в этой архитектуре целочисленный регистр не обнаружен.
Nios II 318Nios II основан на наборе инструкций MIPS IV и имеет 31 32-битный GPR, при этом регистр 0 жестко привязан к нулю и 8 64-битных регистров с плавающей запятой
Motorola 6800 2 данных, 1 индекс0Плюс указатель стека
Motorola 68k 8 данных (d0-d7), 8-адрес (a0-a7)8 (если присутствует FP)Адресный регистр 8 (a7) является указателем стека. 68000, 68010, 68012, 68020 и 68030 требуют FPU для операций с плавающей запятой; 68040 имеет встроенный FPU. Регистры FP 80-битные.
SH 16-бит 16
Emotion Engine 3 (VU0) + 32 (VU1)32 SIMD (интегрировано в UV1) + 2x 32 Vector (выделенный векторный сопроцессор, расположенный рядом с своим графическим процессором)Основное ядро ​​Emotion Engine (VU0) - это сильно модифицированное общее ядро ​​DSP, предназначенное для общих фоновых задач и содержащее один 64-битный аккумулятор, два общих регистра данных и один 32-битный счетчик программ. Модифицированное исполняемое ядро ​​MIPS III (VU1) предназначено для управления данными игры и протокола и содержит 32 записи 32-битных регистра общего назначения для целочисленных вычислений и 32 записи 128-битных регистров SIMD для хранения инструкции SIMD, значения потоковых данных и некоторых целых чисел. расчетное значение. один регистр накопителя для подключения общих вычислений с плавающей запятой к файлу векторного регистра на сопроцессоре. Сопроцессор построен из 32 записей 128-битного векторного регистрового файла (может хранить только векторное значение, которое передается из аккумулятора в процессор), и не имеет встроенного целочисленного регистра. И векторный сопроцессор (VPU 0/1), и весь механизм эмоций Модуль основного процессора (VU0 + VU1 + VPU0 + VPU1) построен на основе модифицированного набора инструкций MIPS, а аккумулятор в этом случае не общего назначения, а контролирует состояние.
CUDA настраиваемый, до 255 на потокБолее ранние поколения допускали до 127/63 регистров на поток (Tesla / Fermi ). Чем больше регистров настроено на поток, тем меньше потоков может выполняться одновременно. Регистры имеют ширину 32 бита, числа с плавающей запятой двойной точности, а для 64-битных указателей требуется два регистра. Дополнительно имеет до 8 регистров предиката на поток
Серия CDC 6000 1688 регистров A0-A7 содержат 18-битные адреса; 8 регистров «B» B0-B7 содержат 18-битные целочисленные значения (при этом B0 постоянно установлен в ноль); 8 регистров «X» X0-X7 содержат 60 бит целочисленных данных или данных с плавающей запятой. Семь из восьми 18-битных регистров A были связаны с соответствующими им регистрами X: установка любого из регистров с A1 по A5 на значение вызвала загрузку содержимого этого адреса в соответствующий регистр X. Точно так же установка адреса в регистры A6 или A7 вызвала сохранение памяти в этом месте памяти из X6 или X7. (Регистры A0 и X0 не были связаны таким образом).
IBM S / 360 164 (при наличии FP)Это относится к преемникам S / 360, от System / 370 до System / 390 ; FP был необязательным в System / 360 и всегда присутствовал в S / 370 и более поздних версиях. В процессорах с Vector Facility имеется 16 векторных регистров, содержащих машинно-зависимое количество 32-битных элементов.
z / Architecture 161664-битная версия S / 360 и последующих; он увеличил количество регистров с плавающей запятой до 16.
MMIX 256256Набор команд, разработанный Дональдом Кнутом в конце 1990-х. в педагогических целях.
NS320xx 88 (при наличии FP)
132сетевой процессор на базе 32/40-битной стековой машины с модифицированной инструкцией MIPS и 128-битным блоком с плавающей запятой.
Parallax Propeller 02Восьмиядерный 8 / 16-битный контроллер стекового автомата с простой логикой внутри, имеет восемь счетчиков Cog (ядро) и каждый содержит три 8/16-битных специальных управляющих регистра с 32-битным x 512 стековым плунжером, однако он не несет никакого общего регистра для целочисленных целей. В отличие от большинства файлов теневого регистра в современных процессорах и многоядерных системах, все эти стековые RAM в Cog могут быть доступны на уровне команд, и все эти Cog могут при необходимости действовать как одно большое ядро ​​общего назначения. Блок с плавающей запятой является внешним и содержит два 80-битных векторных регистра.
Итан 128128И 64 1-битных регистра предикатов и 8 регистров ветвления. Регистры FP 82-битные.
SPARC 3132Глобальный регистр 0 жестко привязан к 0. Использует окна регистров.
IBM POWER 3232, а также 1 ссылку и 1 регистр счета.
Power ISA 3232И 1 ссылка и 1 регистр счета. Процессоры, поддерживающие функцию Vector, также имеют 32 128-битных векторных регистра,
Blackfin 8 данных, 2 аккумулятора, 6 адресов0, а также указатель стека и указатель кадра. Дополнительные регистры используются для реализации циклов с нулевыми издержками и кольцевых буферов DAG (генераторов адресов данных).
IBM Cell SPE 128128 GPR, которые могут содержать целые числа, адреса или значения с плавающей запятой
PDP-10 16Все могут использоваться в общем случае (целое число, число с плавающей запятой, указатель стека, переход, индексация и т. д.). Каждое 36-битное слово памяти (или регистра) также может обрабатываться как полуслово, которое можно рассматривать как (18-битный) адрес. В определенных инструкциях используются другие толкования слов. В исходных процессорах PDP-10 эти 16 GPR также соответствовали основным (т.е. ядро ​​ ) ячейкам памяти 0-15; аппаратная опция, называемая «быстрой памятью», реализовала регистры как отдельные ИС, а ссылки на ячейки памяти 0-15 относятся к регистрам ИС. Более поздние модели реализовали регистры как «быструю память» и продолжали делать ячейки памяти 0-15 ссылаться на них. Команды перемещения принимают (регистр, память) операнды: MOVE 1,2- регистр-регистр, а MOVE 1,1000- преобразование памяти в регистр.
PDP-11 80R7 фактически является программным счетчиком. Любой регистр может быть указателем стека, но R6 используется для аппаратных прерываний и ловушек.
VAX 16GPR также используются для значений с плавающей запятой. Три регистра имеют специальное использование: R12 (указатель аргумента), R13 (указатель кадра) и R14 (указатель стека), а R15 относится к счетчику программы.
Alpha 3131Регистры R31 (целое число) и F31 (с плавающей запятой) жестко привязаны к нулю.
6502 1 данные, 2 индекса0Регистр содержимого 6502 A (накопитель) для основного хранилища данных и адреса памяти (8-битные данные / 16-битный адрес), X, Y - косвенные и прямые индексы регистры (соответственно) и регистр SP являются только конкретным индексом.
W65C816S 1065c816 является 16-битным преемником 6502. X, Y, D (регистр прямой страницы) - это регистры состояния, а регистр SP - только конкретный индекс. основной аккумулятор расширен до 16 бит (C), в то время как оставлен 8 бит (A) для совместимости, а основной регистр теперь может адресовать до 24 бит (16-битная инструкция данных / 24-битный адрес памяти).
65k 10Прямой преемник 6502, 65002, только регистр содержимого A (накопитель) для основного хранилища данных и расширения данных до 32-битных и 64-битных команд, поддержка 48-битного виртуального адреса в программном режиме, X, Y по-прежнему являются регистрами условий и остаются 8-битными, а регистр SP - конкретным индексом, но увеличивается до 16-битной ширины.
MeP 48Медиа-встроенный процессор был 32-битным процессором, разработанным toshiba, модифицированным набором инструкций 8080 с только регистрами A, B, C, D, доступными во всех режимах (8/16/32 бит) и несовместимым с x86, однако он содержит 80-битный модуль с плавающей запятой, совместимый с x87.
микроконтроллер PIC 10
микроконтроллер AVR 320
ARM 32-бит (ARM / A32, Thumb-2 / T32)14варьируется (до 32)r15 - это программа счетчик и не может использоваться в качестве георадара; r13 - указатель стека; r8-r13 могут быть отключены для других (сгруппированы) переключателем режима процессора. Старые версии имели 26-битную адресацию и использовали старшие биты программного счетчика (r15) для флагов состояния, что делало этот регистр 32-битным.
ARM 32-битный (Thumb)816Версия 1 of Thumb, которая поддерживает доступ только к регистрам с r0 по r7
ARM 64-бит (A64)3132Регистр r31 является указатель стека или зашит в 0, в зависимости от контекста.
MIPS 3132Целочисленный регистр 0 жестко привязан к 0.
RISC-V 3132Целочисленный регистр 0 жестко привязан к 0. Вариант RV32E, предназначенный для систем с очень ограниченными ресурсами, имеет 15 целочисленных регистров.
Epiphany 64 (на ядро)Каждая инструкция определяет, интерпретируются ли регистры как целые числа или как числа с плавающей запятой одинарной точности. Архитектура масштабируется до 4096 ядер с доступными в настоящее время реализациями с 16 и 64 ядрами.

Использование

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

См. Также

Ссылки

Последняя правка сделана 2021-06-02 07:27:59
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте