Регистр процессора - Processor register

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

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

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

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

Размер

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

Типы

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

  • Регистры, доступные пользователю могут быть прочитаны или записаны машинными инструкциями. Чаще всего доступные пользователю регистры делятся на регистры данных и регистры адреса.
    • Регистр данныхs может держать числовые значения данных Такие как целое число и, в некоторых архитектурах, значения с плавающей запятой, а также символы, маленький битовые массивы и другие данные. В некоторых старых и младших процессорах используется специальный регистр данных, известный как аккумулятор, используется неявно для многих операций.
    • Регистр адресовs держать адреса и используются инструкциями, которые косвенно обращаются к первичная память.
      • Некоторые процессоры содержат регистры, которые можно использовать только для иметь адрес или только чтобы хранить числовые значения (в некоторых случаях используется как индексный регистр значение которого добавлено как смещение от некоторого адреса); другие позволяют регистрам хранить любой вид количества. Большое разнообразие возможных режимы адресации, используется для указания эффективного адреса операнда, существует.
      • В указатель стека используется для управления стек времени выполнения. Редко другие стеки данных адресуются специальными адресными регистрами, см. штабелеукладчик.
    • Регистры общего назначения (Георадарs) может хранить как данные, так и адреса, т.е. они представляют собой комбинированные регистры данных / адресов; в некоторых архитектурах зарегистрировать файл является единый так что георадары могут хранить числа с плавающей запятой также.
    • Регистры состояния держать ценности истины часто используется для определения того, следует ли выполнять какую-либо инструкцию.
    • Регистр с плавающей точкойs (FPRs) магазин числа с плавающей запятой во многих архитектурах.
    • Постоянный регистры хранить значения только для чтения, такие как ноль, единица или число Пи.
    • Векторные регистры хранить данные для векторная обработка сделано SIMD инструкции (одна инструкция, несколько данных).
    • Регистры специального назначения (SPRs) удерживать состояние программы; они обычно включают счетчик команд, также называемый указателем инструкции, а регистр статуса; счетчик программ и регистр состояния могут быть объединены в слово состояния программы (PSW) зарегистрироваться. Вышеупомянутый указатель стека иногда также включается в эту группу. Встроенные микропроцессоры также могут иметь регистры, соответствующие специализированным аппаратным элементам.
    • В некоторых архитектурах регистры для конкретных моделей (также называемый машинные регистры) хранить данные и настройки, относящиеся к самому процессору. Поскольку их значения связаны с конструкцией конкретного процессора, нельзя ожидать, что они останутся стандартными между поколениями процессоров.
    • Регистры диапазона типа памяти (MTRRs)
  • Внутренние регистры - регистры, недоступные для инструкций, используются внутри процессора для операций.
  • Архитектурный регистр - Регистры, видимые для программного обеспечения, определенного архитектурой, могут не соответствовать физическому оборудованию, если есть зарегистрировать переименование выполняется нижележащим оборудованием.

Регистры оборудования похожи, но происходят вне ЦП.

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

Примеры

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

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

АрхитектураГеорадары / данные + адресные регистрыFP
регистры
Примечания
AT&T Хоббит0стопка из 7Штабелеукладчик
Крей-1[1]8 скалярных данных, 8 адресов8 скалярных, 8 векторных (64 элемента)Регистры скалярных данных могут быть целыми или с плавающей запятой; также 64 скалярных T-регистра блокнота и 64 адресных регистра B блокнота
4004[2]1 аккумулятор, 16 других0Регистр A предназначен для общего назначения, а регистры r0 – r15 - для адреса и сегмента.
8008[3]1 аккумулятор, 6 других0Регистр A - это аккумулятор, с которым производятся все арифметические операции; регистры H и L могут использоваться в комбинации в качестве адресного регистра; все регистры могут использоваться как операнды в командах загрузки / сохранения / перемещения / увеличения / уменьшения и как другой операнд в арифметических командах. Нет доступных единиц FP.
8080[4]1 аккумулятор, 6 других0Плюс указатель стека. Регистр A - это аккумулятор, с которым производятся все арифметические операции; пары регистров B + C, D + E и H + L могут использоваться в качестве адресных регистров в некоторых инструкциях; все регистры могут использоваться как операнды в инструкциях загрузки / сохранения / перемещения / увеличения / уменьшения и как другой операнд в арифметических инструкциях. В некоторых инструкциях используется только H + L; другая инструкция меняет местами H + L и D + E. Процессоры с плавающей запятой, предназначенные для 8080, были Intel 8231, AMD Am9511 и Intel 8232. Их также можно было легко использовать с Z80 и аналогичные процессоры.
iAPX4320стопка из 6Штабелеукладчик
16-битный x86[5]6стек из 8 (если есть FP)8086 /8088, 80186 /80188, 80286, с 8087, 80187 или же 80287 для чисел с плавающей запятой, с 80-битным стеком из 8 регистров с глубиной, с некоторыми инструкциями, которые могут использовать регистры относительно вершины стека в качестве операндов; без 8087/80187/80287, без регистров с плавающей запятой
IA-32[6]8стек из 8 (при наличии FP), 8 (при наличии SSE / MMX)80386 требуется 80387 для операций с плавающей запятой более поздние процессоры имели встроенную функцию с плавающей запятой, причем оба из них имели 80-битный стек из 8 регистров, при этом некоторые инструкции могли использовать регистры относительно вершины стека в качестве операндов. В Pentium III а позже был SSE с дополнительными 128-битными регистрами XMM.
x86-64[6][7]1616/32Регистры FP - это 128-битные регистры XMM, позже расширенные до 256-битных регистров YMM с AVX / AVX2 и 512-битные регистры ZMM0-ZMM31 с AVX-512.[8]
Ксеон Пхи[9]1632Включая 32 256/512-битных регистра ZMM с AVX-512.
Fairchild F8один аккумулятор, 64 регистра блокнота, один регистр косвенного блокнота (ISAR)н / дКоманды могут напрямую ссылаться на первые 16 регистров блокнота и могут обращаться ко всем регистрам блокнота косвенно через ISAR.[10]
Geode GX1 данные, 1 адрес8Geode GX /Media GX /4x86 /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 SPG06 стек + 4 SIMD16-битный 32-битный процессор стека адресного пространства от тайваньской компании Sunplus Technology, его можно найти в линейке Vtech V.Smile для образовательных целей и в игровых консолях, таких как wireless 60, Mattel HyperScan и XaviXPORT. в нем отсутствует какой-либо регистр общего назначения или внутренний регистр для именования / переименования, но его модуль с плавающей запятой имеет 80-битный 6-каскадный стек и четыре 128-битных регистра VLIW SIMD на сопроцессоре вершинного шейдера.
VM Labs Nuon0132-разрядный стековый процессор, разработанный лабораториями виртуальных машин для специализированных мультимедийных целей. Его можно найти в собственной линейке консолей Nuon для DVD-плееров и в семейной развлекательной системе Game Wave от ZaPit games. На дизайн сильно повлияла технология Intel MMX, он содержал 128-байтовый унифицированный стековый кеш для векторных и скалярных инструкций. унифицированный кэш можно разделить на 8 128-битных векторных регистров или 32 32-битных скалярных регистра SIMD посредством переименования банка, в этой архитектуре целочисленный регистр не обнаружен.
Nios II[11][12]318Nios II основан на наборе инструкций MIPS IV[нужна цитата ] и имеет 31 32-битный GPR, при этом регистр 0 жестко привязан к нулю и 8 64-битных регистров с плавающей запятой[нужна цитата ]
Motorola 6800[13]2 данных, 1 индекс0Плюс указатель стека
Motorola 68k[14]8 данных (d0-d7), 8 адресов (a0-a7)8 (при наличии FP)Адресный регистр 8 (a7) является указателем стека. 68000, 68010, 68012, 68020 и 68030 требуют FPU для операций с плавающей запятой; 68040 имеет встроенный FPU. Регистры FP 80-битные.
SH 16 бит16
Двигатель эмоций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[15]настраиваемый, до 255 на потокПредыдущие поколения допускали до 127/63 регистров на поток (Тесла /Ферми ). Чем больше регистров настроено для каждого потока, тем меньше потоков может выполняться одновременно. Регистры имеют ширину 32 бита, числа с плавающей запятой двойной точности, а для 64-битных указателей требуется два регистра. Дополнительно имеет до 8 регистров предикатов на поток[16]
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 / 360164 (при наличии FP)Это относится к преемникам S / 360, Система / 370 через Система / 390; FP был необязательным в System / 360 и всегда присутствовал в S / 370 и более поздних версиях. В процессорах с функцией Vector Facility имеется 16 векторных регистров, содержащих машинно-зависимое количество 32-битных элементов.[17]
z / Архитектура161664-битная версия S / 360 и последователей; он увеличил количество регистров с плавающей запятой до 16.
MMIX[18]256256Набор инструкций, разработанный Дональд Кнут в конце 1990-х гг. в педагогических целях.
NS320xx[19]88 (при наличии FP)
Xelerated X10132сетевой процессор на базе 32/40 битной стековой машины с модифицированной инструкцией MIPS и 128-битным блоком с плавающей запятой.[нужна цитата ]
Параллакс пропеллер02Восьмиядерный 8/16-битный стековый контроллер с простой логической схемой внутри, имеет восемь шестеренчатых счетчиков (ядро), и каждый содержит три 8/16-битных специальных управляющих регистра с 32-битным стековым плунжером на 512 бит, однако он не содержит никаких общих регистров. для целочисленных целей. В отличие от большинства файлов теневых регистров в современных процессорах и многоядерных системах, все эти стековые RAM в Cog могут быть доступны на уровне инструкций, и все эти Cog могут при необходимости действовать как одно большое ядро ​​общего назначения. Блок с плавающей запятой является внешним и содержит два 80-битных векторных регистра.
Itanium128128И 64 1-битных регистра предикатов и 8 регистров ветвления. Регистры FP - 82-битные.
SPARC3132Глобальный регистр 0 жестко привязан к 0. Использование зарегистрировать окна.
IBM POWER3232И 1 ссылка и 1 счетный регистр.
Питание ISA3232И 1 ссылка и 1 счетный регистр. Процессоры, поддерживающие Объект Vector также имеют 32 128-битных векторных регистра,
Blackfin8 данных, 2 аккумулятора, 6 адресов0И указатель стека и указатель фрейма. Дополнительные регистры используются для реализации циклов с нулевыми накладными расходами и кольцевых буферов DAG (генераторы адресов данных).
IBM Cell SPE128128 GPR, которые могут содержать целые числа, адреса или значения с плавающей запятой[20]
PDP-1016Все могут использоваться в общем случае (целое число, число с плавающей запятой, указатель стека, переход, индексация и т. Д.). Каждое 36-битное слово памяти (или регистра) также может обрабатываться как полуслово, которое можно рассматривать как (18-битный) адрес. В определенных инструкциях используются другие толкования слов. В исходных процессорах PDP-10 эти 16 GPR также соответствовали основным (т.е. основной ) ячейки памяти 0-15; аппаратная опция, называемая «быстрая память», реализовала регистры как отдельные ИС, а ссылки на ячейки памяти 0-15 относятся к регистрам ИС. Более поздние модели реализовали регистры как «быструю память» и продолжали делать ячейки памяти 0-15 ссылаться на них. Инструкции по перемещению принимают (регистр, память) операнды: ПЕРЕМЕСТИТЬ 1,2 регистр-регистр, и ПЕРЕЕЗД 1,1000 это память для регистрации.
PDP-1180R7 на самом деле является программным счетчиком. Любой регистр может быть указателем стека, но R6 используется для аппаратных прерываний и ловушек.
VAX16GPR также используются для значений с плавающей запятой. Три регистра имеют специальное использование: R12 (указатель аргумента), R13 (указатель кадра) и R14 (указатель стека), а R15 относится к счетчику программы.
Альфа3131Регистры R31 (целое число) и F31 (с плавающей точкой) жестко обнулены.
65021 данные, 2 индекса0Регистр содержимого 6502 A (накопитель) для основного хранилища данных и адреса памяти (8-битные данные / 16-битный адрес), X, Y - косвенные и прямые индексные регистры (соответственно), а регистр SP - только конкретный индекс.
W65C816S1065c816 является 16-битным преемником 6502. X, Y, D (регистр прямой страницы) - это регистры состояния, а регистр SP - только конкретный индекс. основной аккумулятор расширен до 16 бит (C)[21] оставив 8-битный (A) для совместимости, основной регистр теперь может адресовать до 24-бит (16-битная инструкция данных / 24-битный адрес памяти).
65 тыс.10Прямой преемник 6502, 65002 только содержимое регистра A (накопитель) для основного хранилища данных и расширения данных до 32-разрядных и 64-разрядных команд, поддержка 48-разрядного виртуального адреса в программном режиме, X, Y по-прежнему являются регистрами условий и остаются 8-битными, а регистр SP является конкретным индексом, но увеличивается до 16-битной ширины.
MeP48Встроенный мультимедийный процессор представлял собой 32-битный процессор, разработанный toshiba, модифицированный набор инструкций 8080 с только регистрами A, B, C, D, доступными во всех режимах (8/16/32 бит) и несовместимый с x86, однако он содержит 80 бит. модуль с плавающей запятой, совместимый с x87.
Микроконтроллер PIC10
Микроконтроллер AVR320
РУКА 32-бит (ARM / A32, Thumb-2 / T32)14Варьируется (до 32)r15 - это счетчик программы, который нельзя использовать в качестве GPR; r13 - указатель стека; r8-r13 могут быть отключены для других (сгруппированы) переключателем режима процессора. Старые версии имели 26-битную адресацию,[22] и использовал старшие биты программного счетчика (r15) для флагов состояния, сделав этот регистр 32-битным.
РУКА 32-бит (большой палец)816Версия 1 Thumb, которая поддерживала доступ только к регистрам с r0 по r7[23]
РУКА 64-бит (A64)[24]3132Регистр r31 является указателем стека или зашит в 0, в зависимости от контекста.
MIPS3132Целочисленный регистр 0 жестко привязан к 0.
RISC-V3132Целочисленный регистр 0 жестко привязан к 0. Вариант RV32E, предназначенный для систем с очень ограниченными ресурсами, имеет 15 целочисленных регистров.
Богоявление64 (на ядро)[25]Каждая инструкция определяет, интерпретируются ли регистры как целые числа или как числа с плавающей запятой одинарной точности. Архитектура масштабируется до 4096 ядер с доступными в настоящее время реализациями с 16 и 64 ядрами.

Применение

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

Смотрите также

Рекомендации

  1. ^ "Справочное руководство по аппаратному обеспечению компьютерной системы Cray-1" (PDF). Cray Research. Ноябрь 1977 г.
  2. ^ "Руководство пользователя микрокомпьютерного комплекса MCS-4" (PDF). Intel. Февраль 1973 г.
  3. ^ «Руководство пользователя 8-битного параллельного центрального процессора 8008» (PDF). Intel. Ноябрь 1973 г.. Получено 23 января, 2014.
  4. ^ «Руководство пользователя микрокомпьютерных систем Intel 8080» (PDF). Intel. Сентябрь 1975 г.. Получено 23 января, 2014.
  5. ^ "Справочное руководство программиста 80286 и 80287" (PDF). Intel. 1987 г.
  6. ^ а б «Руководства разработчика программного обеспечения для архитектур Intel 64 и IA-32». Intel. 4 декабря 2019.
  7. ^ "Руководство программиста по архитектуре AMD64, том 1: Программирование приложений" (PDF). AMD. Октябрь 2013.
  8. ^ «Справочник по программированию расширений набора команд архитектуры Intel и будущих функций» (PDF). Intel. Январь 2018.
  9. ^ "Справочное руководство по архитектуре набора команд сопроцессора Intel Xeon Phi" (PDF). Intel. 7 сентября 2012 г.
  10. ^ F8 Руководство по программированию (PDF). Подразделение микрокомпьютеров Fairchild MOS. 1977 г.
  11. ^ «Справочное руководство по классическому процессору Nios II» (PDF). Альтера. 2 апреля 2015 года.
  12. ^ «Справочное руководство по процессору Nios II Gen2» (PDF). Альтера. 2 апреля 2015 года.
  13. ^ «Справочное руководство по программированию M6800» (PDF). Motorola. Ноябрь 1976 г.. Получено 18 мая, 2015.
  14. ^ "Справочное руководство для программистов семейства Motorola M68000" (PDF). Motorola. 1992 г.. Получено 13 июня, 2015.
  15. ^ "Руководство по программированию CUDA C". Nvidia. 2019 г.. Получено 9 января, 2020.
  16. ^ Цзя, Чжэ; Маггиони, Марко; Стайгер, Бенджамин; Скарпацца, Даниэле П. (2018). «Анализ архитектуры NVIDIA Volta GPU с помощью микробенчмаркинга». arXiv:1804.06826 [cs.DC ].
  17. ^ "Архитектура IBM Enterprise Systems / 370 и System / 370 - векторные операции" (PDF). IBM. SA22-7125-3. Получено 11 мая, 2020.
  18. ^ «Домашняя страница MMIX».
  19. ^ "Серия 32000 Датабук" (PDF). National Semiconductor.
  20. ^ "Версия 1.2 архитектуры набора команд блока синергетического процессора" (PDF). IBM. 27 января 2007 г.
  21. ^ «Обучение сборке 65816». Вики по разработке Super Famicom. Получено 14 ноября 2019.
  22. ^ «Стандарт вызова процедур для архитектуры ARM» (PDF). ARM Holdings. 30 ноября 2013 г.. Получено 27 мая 2013.
  23. ^ «2.6.2. Набор регистров состояния большого пальца». ARM7TDMI Техническое справочное руководство. ARM Holdings.
  24. ^ «Стандарт вызова процедур для 64-битной архитектуры ARM» (PDF). ARM Holdings. 22 мая 2013. Получено 27 мая 2013.
  25. ^ «Справочник по архитектуре Богоявления» (PDF).