A регистр процессора - это быстро доступное место, доступное для компьютерный процессор. Регистры обычно состоят из небольшого объема быстрой памяти, хотя некоторые регистры имеют определенные аппаратные функции и могут быть доступны только для чтения или только для записи. В компьютерной архитектуре регистры обычно адресуются с помощью механизмов, отличных от основной памяти, но в некоторых случаях им может быть назначен адрес памяти, например. DEC PDP-10, ICT 1900.
Почти все компьютеры, независимо от того, архитектура загрузки / сохранения или нет, загружают данные из большей памяти в регистры, где они используются для арифметические операции и управляются или проверяются машинными инструкциями. Затем обработанные данные часто сохраняются обратно в основную память либо той же инструкцией, либо последующей. Современные процессоры используют в качестве основной памяти статическую или динамическую RAM, причем доступ к последней обычно осуществляется через один или несколько уровней кэша.
Регистры процессора обычно находится на вершине иерархии памяти и обеспечивает самый быстрый способ доступа к данным. Этот термин обычно относится только к группе регистров, которые непосредственно кодируются как часть инструкции, как определено набором инструкций . Однако современные высокопроизводительные процессоры часто имеют дубликаты этих «архитектурных регистров» для повышения производительности за счет переименования регистров , что позволяет выполнять параллельное и спекулятивное выполнение. Современный дизайн x86 приобрел эти методы примерно в 1995 году с выпусками Pentium Pro, Cyrix 6x86, Nx586 и AMD K5..
Когда компьютерная программа обращается к одним и тем же данным неоднократно, это называется эталонным местоположением. Хранение часто используемых значений в регистрах может иметь решающее значение для производительности программы. Распределение регистров выполняется либо компилятором на этапе генерации кода, либо вручную программистом на языке ассемблера.
Регистры обычно измеряются количество битов, которые они могут хранить, например, «8-битный регистр», «32-битный регистр» или «64-битный регистр "или даже больше. В некоторых наборах команд регистры могут работать в различных режимах, разбивая свою память хранения на более мелкие (например, 32-битные на четыре 8-битных), в которые несколько данных (вектор или одномерный массив данных ) можно загружать и эксплуатировать одновременно. Обычно это реализуется путем добавления дополнительных регистров, которые отображают свою память в более крупный. Процессоры, которые могут выполнять одну инструкцию для нескольких данных, называются векторными процессорами.
Процессор часто содержит несколько типов регистров, которые можно классифицировать в соответствии с их содержанием или инструкциями, которые работают. на них:
Аппаратные регистры аналогичны, но происходят вне ЦП.
В некоторых архитектурах (например, 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 | 16 | 16/32 | Регистры FP представляют собой 128-битные регистры XMM, позже расширенные до 256-битных регистров YMM с помощью AVX / AVX2 и 512-битных ZMM0 -ZMM31 регистры с AVX-512. |
Xeon Phi | 16 | 32 | Включая 32 256/512-битных регистра ZMM с AVX-512. |
Fairchild F8 | один аккумулятор, 64 регистра блокнота, один регистр косвенного блокнота (ISAR) | н / д | Инструкции могут напрямую ссылаться на первые 16 регистров блокнота и иметь доступ ко всем блокнотная запись косвенно регистрируется через ISAR |
Geode GX | 1 данные, 1 адрес | 8 | Geode 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 | 0 | 6 стек + 4 SIMD | 16-битный 32-битный стековый процессор адресного пространства от тайваньской компании Sunplus Technology, его можно найти на линии V.Smile Vtech для образовательных целей и игровая консоль Mattel HyperScan и XaviXPORT. в нем действительно отсутствует регистр общего назначения или внутренний регистр для именования / переименования, но его модуль с плавающей запятой имеет 80-битный 6-каскадный стек и четыре 128-битных регистра VLIW SIMD на сопроцессоре вершинного шейдера. |
VM Labs Nuon | 0 | 1 | 32-битный стековый процессор, разработанный лабораториями VM для специализированных мультимедийных целей. Его можно найти в собственной линейке консолей Nuon для DVD-плееров и в семейной развлекательной системе Game Wave от ZaPit games. На дизайн сильно повлияла технология Intel MMX, он содержал 128-байтовый унифицированный стековый кеш для векторных и скалярных инструкций. унифицированный кэш можно разделить на 8 128-битных векторных регистров или 32 32-битных скалярных регистра SIMD посредством переименования банка, в этой архитектуре целочисленный регистр не обнаружен. |
Nios II | 31 | 8 | Nios 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-бит | 1 | 6 | |
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 | 16 | 8 | 8 регистров 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 | 16 | 4 (при наличии FP) | Это относится к преемникам S / 360, от System / 370 до System / 390 ; FP был необязательным в System / 360 и всегда присутствовал в S / 370 и более поздних версиях. В процессорах с Vector Facility имеется 16 векторных регистров, содержащих машинно-зависимое количество 32-битных элементов. |
z / Architecture | 16 | 16 | 64-битная версия S / 360 и последующих; он увеличил количество регистров с плавающей запятой до 16. |
MMIX | 256 | 256 | Набор команд, разработанный Дональдом Кнутом в конце 1990-х. в педагогических целях. |
NS320xx | 8 | 8 (при наличии FP) | |
1 | 32 | сетевой процессор на базе 32/40-битной стековой машины с модифицированной инструкцией MIPS и 128-битным блоком с плавающей запятой. | |
Parallax Propeller | 0 | 2 | Восьмиядерный 8 / 16-битный контроллер стекового автомата с простой логикой внутри, имеет восемь счетчиков Cog (ядро) и каждый содержит три 8/16-битных специальных управляющих регистра с 32-битным x 512 стековым плунжером, однако он не несет никакого общего регистра для целочисленных целей. В отличие от большинства файлов теневого регистра в современных процессорах и многоядерных системах, все эти стековые RAM в Cog могут быть доступны на уровне команд, и все эти Cog могут при необходимости действовать как одно большое ядро общего назначения. Блок с плавающей запятой является внешним и содержит два 80-битных векторных регистра. |
Итан | 128 | 128 | И 64 1-битных регистра предикатов и 8 регистров ветвления. Регистры FP 82-битные. |
SPARC | 31 | 32 | Глобальный регистр 0 жестко привязан к 0. Использует окна регистров. |
IBM POWER | 32 | 32 | , а также 1 ссылку и 1 регистр счета. |
Power ISA | 32 | 32 | И 1 ссылка и 1 регистр счета. Процессоры, поддерживающие функцию Vector, также имеют 32 128-битных векторных регистра, |
Blackfin | 8 данных, 2 аккумулятора, 6 адресов | 0 | , а также указатель стека и указатель кадра. Дополнительные регистры используются для реализации циклов с нулевыми издержками и кольцевых буферов DAG (генераторов адресов данных). |
IBM Cell SPE | 128 | 128 GPR, которые могут содержать целые числа, адреса или значения с плавающей запятой | |
PDP-10 | 16 | Все могут использоваться в общем случае (целое число, число с плавающей запятой, указатель стека, переход, индексация и т. д.). Каждое 36-битное слово памяти (или регистра) также может обрабатываться как полуслово, которое можно рассматривать как (18-битный) адрес. В определенных инструкциях используются другие толкования слов. В исходных процессорах PDP-10 эти 16 GPR также соответствовали основным (т.е. ядро ) ячейкам памяти 0-15; аппаратная опция, называемая «быстрой памятью», реализовала регистры как отдельные ИС, а ссылки на ячейки памяти 0-15 относятся к регистрам ИС. Более поздние модели реализовали регистры как «быструю память» и продолжали делать ячейки памяти 0-15 ссылаться на них. Команды перемещения принимают (регистр, память) операнды: MOVE 1,2 - регистр-регистр, а MOVE 1,1000 - преобразование памяти в регистр. | |
PDP-11 | 8 | 0 | R7 фактически является программным счетчиком. Любой регистр может быть указателем стека, но R6 используется для аппаратных прерываний и ловушек. |
VAX | 16 | GPR также используются для значений с плавающей запятой. Три регистра имеют специальное использование: R12 (указатель аргумента), R13 (указатель кадра) и R14 (указатель стека), а R15 относится к счетчику программы. | |
Alpha | 31 | 31 | Регистры R31 (целое число) и F31 (с плавающей запятой) жестко привязаны к нулю. |
6502 | 1 данные, 2 индекса | 0 | Регистр содержимого 6502 A (накопитель) для основного хранилища данных и адреса памяти (8-битные данные / 16-битный адрес), X, Y - косвенные и прямые индексы регистры (соответственно) и регистр SP являются только конкретным индексом. |
W65C816S | 1 | 0 | 65c816 является 16-битным преемником 6502. X, Y, D (регистр прямой страницы) - это регистры состояния, а регистр SP - только конкретный индекс. основной аккумулятор расширен до 16 бит (C), в то время как оставлен 8 бит (A) для совместимости, а основной регистр теперь может адресовать до 24 бит (16-битная инструкция данных / 24-битный адрес памяти). |
65k | 1 | 0 | Прямой преемник 6502, 65002, только регистр содержимого A (накопитель) для основного хранилища данных и расширения данных до 32-битных и 64-битных команд, поддержка 48-битного виртуального адреса в программном режиме, X, Y по-прежнему являются регистрами условий и остаются 8-битными, а регистр SP - конкретным индексом, но увеличивается до 16-битной ширины. |
MeP | 4 | 8 | Медиа-встроенный процессор был 32-битным процессором, разработанным toshiba, модифицированным набором инструкций 8080 с только регистрами A, B, C, D, доступными во всех режимах (8/16/32 бит) и несовместимым с x86, однако он содержит 80-битный модуль с плавающей запятой, совместимый с x87. |
микроконтроллер PIC | 1 | 0 | |
микроконтроллер AVR | 32 | 0 | |
ARM 32-бит (ARM / A32, Thumb-2 / T32) | 14 | варьируется (до 32) | r15 - это программа счетчик и не может использоваться в качестве георадара; r13 - указатель стека; r8-r13 могут быть отключены для других (сгруппированы) переключателем режима процессора. Старые версии имели 26-битную адресацию и использовали старшие биты программного счетчика (r15) для флагов состояния, что делало этот регистр 32-битным. |
ARM 32-битный (Thumb) | 8 | 16 | Версия 1 of Thumb, которая поддерживает доступ только к регистрам с r0 по r7 |
ARM 64-бит (A64) | 31 | 32 | Регистр r31 является указатель стека или зашит в 0, в зависимости от контекста. |
MIPS | 31 | 32 | Целочисленный регистр 0 жестко привязан к 0. |
RISC-V | 31 | 32 | Целочисленный регистр 0 жестко привязан к 0. Вариант RV32E, предназначенный для систем с очень ограниченными ресурсами, имеет 15 целочисленных регистров. |
Epiphany | 64 (на ядро) | Каждая инструкция определяет, интерпретируются ли регистры как целые числа или как числа с плавающей запятой одинарной точности. Архитектура масштабируется до 4096 ядер с доступными в настоящее время реализациями с 16 и 64 ядрами. |
Количество регистров, доступных на процессоре, и операции, которые могут быть выполнены с использованием этих регистров, оказывают значительное влияние на эффективность кода, сгенерированного оптимизирующими компиляторами. Число Стрелера дерева выражений дает минимальное количество регистров, необходимых для оценки этого дерева выражений.