Регистр процессора — это быстродоступное место, доступное процессору компьютера . [1] Регистры обычно состоят из небольшого количества быстрого хранилища , хотя некоторые регистры имеют определенные аппаратные функции и могут быть только для чтения или только для записи. В архитектуре компьютера регистры обычно адресуются механизмами, отличными от основной памяти , но в некоторых случаях им может быть назначен адрес памяти , например, DEC PDP-10 , ICT 1900. [ 2]
Почти все компьютеры, независимо от того, имеют ли они архитектуру загрузки/хранения или нет, загружают элементы данных из большей памяти в регистры, где они используются для арифметических операций , побитовых операций и других операций, и обрабатываются или проверяются машинными инструкциями . Обработанные элементы затем часто сохраняются обратно в основную память, либо той же инструкцией, либо последующей. Современные процессоры используют либо статическую , либо динамическую оперативную память в качестве основной памяти, причем к последней обычно осуществляется доступ через один или несколько уровней кэша .
Регистры процессора обычно находятся наверху иерархии памяти и обеспечивают самый быстрый способ доступа к данным. Этот термин обычно относится только к группе регистров, которые напрямую кодируются как часть инструкции, как определено набором инструкций . Однако современные высокопроизводительные процессоры часто имеют дубликаты этих «архитектурных регистров» для повышения производительности посредством переименования регистров , что позволяет выполнять параллельные и спекулятивные команды . Современная архитектура x86 приобрела эти методы около 1995 года с выпуском Pentium Pro , Cyrix 6x86 , Nx586 и AMD K5 .
Когда компьютерная программа обращается к одним и тем же данным повторно, это называется локальностью ссылок . Хранение часто используемых значений в регистрах может иметь решающее значение для производительности программы. Распределение регистров выполняется либо компилятором на этапе генерации кода , либо вручную программистом на языке ассемблера .
Регистры обычно измеряются по количеству бит , которые они могут содержать, например, « 8-битный регистр», « 32-битный регистр», « 64-битный регистр» или даже больше. В некоторых наборах инструкций регистры могут работать в различных режимах, разбивая свою память хранения на меньшие части (например, 32-битную на четыре 8-битных), в которые можно загружать и обрабатывать несколько данных (вектор или одномерный массив данных) одновременно. Обычно это реализуется путем добавления дополнительных регистров, которые отображают свою память в больший регистр. Процессоры, которые имеют возможность выполнять отдельные инструкции для нескольких данных, называются векторными процессорами .
Процессор часто содержит несколько видов регистров, которые можно классифицировать в соответствии с типами значений, которые они могут хранить, или инструкциями, которые с ними работают:
Аппаратные регистры аналогичны, но находятся вне ЦП.
В некоторых архитектурах (таких как SPARC и MIPS ) первый или последний регистр в файле регистров целых чисел является псевдорегистром, поскольку он жестко настроен на то, чтобы всегда возвращать ноль при чтении (в основном для упрощения режимов индексации), и его нельзя перезаписать. В Alpha это также делается для файла регистров с плавающей точкой. В результате этого регистровые файлы обычно цитируются как имеющие на один регистр больше, чем их фактическое количество, пригодное для использования; например, цитируются 32 регистра, когда только 31 из них соответствует приведенному выше определению регистра.
В следующей таблице показано количество регистров в нескольких основных архитектурах ЦП. Обратите внимание, что в процессорах, совместимых с x86 , указатель стека ( ESP
) считается целочисленным регистром, хотя существует ограниченное количество инструкций, которые могут использоваться для работы с его содержимым. Аналогичные оговорки применимы к большинству архитектур.
Хотя все перечисленные ниже архитектуры различны, почти все они находятся в базовой компоновке, известной как архитектура фон Неймана , впервые предложенная венгерско-американским математиком Джоном фон Нейманом . Также следует отметить, что количество регистров на графических процессорах намного больше, чем на центральных процессорах.
Архитектура | Регистры георадаров/данных+адресов | Регистры ФП | Примечания |
---|---|---|---|
AT&T Хоббит | 00 0 | стопка из 7 | Все инструкции по манипулированию данными работают исключительно в регистрах, и перед обработкой данные необходимо переместить в регистр. |
Крей-1 [3] | 8 скалярных данных, 8 адресов | 8 скалярных, 8 векторных (64 элемента) | Регистры скалярных данных могут быть целочисленными или с плавающей точкой; также 64 скалярных сверхкритических регистра T и 64 адресных сверхкритических регистра B. |
4004 [4] | 1 аккумулятор, 16 других | 00 0 | |
8008 [5] | 1 аккумулятор, 6 других | 00 0 | Регистр A — это аккумулятор, в котором выполняется вся арифметика; регистры H и L могут использоваться в комбинации как адресный регистр; все регистры могут использоваться как операнды в инструкциях загрузки/сохранения/перемещения/увеличения/уменьшения и как другой операнд в арифметических инструкциях. Не имеется доступного блока с плавающей точкой (FPU). |
8080 [6] | 1 аккумулятор, 1 указатель стека, 6 других | 00 0 | Регистр A — это аккумулятор, в котором выполняется вся арифметика; пары регистров B+C, D+E и H+L могут использоваться в качестве адресных регистров в некоторых инструкциях; все регистры могут использоваться в качестве операндов в инструкциях загрузки/сохранения/перемещения/увеличения/уменьшения и в качестве другого операнда в арифметических инструкциях. Некоторые инструкции используют только H+L; другая инструкция меняет местами H+L и D+E. Процессоры с плавающей точкой, предназначенные для 8080, — Intel 8231, AMD Am9511 и Intel 8232. Они также легко использовались с Z80 и аналогичными процессорами. |
iAPX432 | 00 0 | стопка из 6 | Машина для укладки штабеля |
16-бит x86 [7] | 00 8 | стопка из 8 (если присутствует ФП) | Процессоры 8086/8088 , 80186/80188 и 80286 , если они оснащены сопроцессором 8087 , 80187 или 80287 для операций с плавающей точкой, поддерживают 80-битный стек регистров глубиной 8 с некоторыми инструкциями, способными использовать регистры относительно вершины стека в качестве операндов; без сопроцессора регистры с плавающей точкой не поддерживаются. |
ИА-32 [8] | 00 8 | стопка из 8 (если присутствует FP), 8 (если присутствует SSE/MMX) | Процессор 80386 требует 80387 для операций с плавающей точкой, более поздние процессоры имели встроенную плавающую точку, причем оба имели 80-битный широкий, 8-глубокий стек регистров с некоторыми инструкциями, способными использовать регистры относительно вершины стека в качестве операндов. Pentium III и более поздние имели SSE с дополнительными 128-битными регистрами XMM. |
x86-64 [8] [9] | 0 16 | 16 или 32 (если доступен AVX-512) | Регистры FP представляют собой 128-битные регистры XMM, позже расширенные до 256-битных регистров YMM с AVX/AVX2 и 512-битных регистров ZMM0–ZMM31 с AVX-512 . [10] |
Фэрчайлд F8 [11] | 1 аккумулятор, 64 регистра сверхоперативной памяти, 1 косвенный регистр сверхоперативной памяти (ISAR) | — | Инструкции могут напрямую ссылаться на первые 16 регистров блокнота и могут обращаться ко всем регистрам блокнота косвенно через ISAR [12] |
Геод GX | 1 данные, 1 адрес | 00 8 | Geode 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-памяти SRAM для целочисленных операций. [ требуется ссылка ] |
Sunplus μ'nSP (SPG200) | 8 (sp, r1-r4, bp, sr, pc) | 00 0 | 16-битный процессор от тайваньской компании Sunplus Technology, который можно найти в линейке образовательных игровых консолей V.Smile компании VTech, а также в других консолях, таких как Wireless 60 и различных подключаемых телевизионных играх Jakks Pacific. |
VM Labs Nuon | 00 0 | 00 1 | 32-битный процессор стековой машины, разработанный VM Labs и специализированный для мультимедиа. Его можно найти в собственной линейке консолей компании Nuon DVD-плеера и Game Wave Family Entertainment System от ZaPit games. На дизайн сильно повлияла технология Intel MMX; он содержал 128-байтовый унифицированный стековый кэш для векторных и скалярных инструкций. Единый кэш можно разделить на восемь 128-битных векторных регистров или тридцать два 32-битных скалярных регистра SIMD посредством переименования банков; в этой архитектуре нет целочисленного регистра. |
Ниос II [13] [14] | 0 31 | 00 8 | Nios II основан на наборе инструкций MIPS IV [ требуется ссылка ] и имеет 31 32-битный GPR, при этом регистр 0 жестко связан с нулем, и восемь 64-битных регистров с плавающей точкой [ требуется ссылка ] |
Моторола 6800 [15] | 2 данных, 1 индекс, 1 стек | 00 0 | |
Моторола 68k [16] | 8 данных (d0–d7), 8 адресов (a0–a7) | 00 8 (если присутствует ФП) | Адресный регистр 8 (a7) — указатель стека. 68000, 68010, 68012, 68020 и 68030 требуют FPU для операций с плавающей точкой; 68040 имел встроенный FPU. Регистры FP являются 80-битными. |
Ш 16-бит | 00 16 | 00 6 | |
Двигатель эмоций | 3(ВУ0)+ 32(ВУ1) | 32 SIMD (интегрирован в UV1) + 2 × 32 Vector (выделенный векторный сопроцессор, расположенный рядом с его GPU) | Основное ядро Emotion Engine (VU0) представляет собой сильно модифицированное ядро DSP общего назначения, предназначенное для общих фоновых задач, и содержит один 64-битный аккумулятор, два общих регистра данных и один 32-битный счетчик программ. Модифицированное исполняемое ядро MIPS III (VU1) предназначено для управления данными игры и протоколами и содержит тридцать два 32-битных регистра общего назначения для целочисленных вычислений и тридцать два 128-битных регистра SIMD для хранения инструкций SIMD, потокового значения данных и некоторого целочисленного значения вычислений, а также один регистр аккумулятора для подключения общих вычислений с плавающей точкой к векторному файлу регистров на сопроцессоре. Сопроцессор построен с помощью 32-записного 128-битного векторного регистрового файла (может хранить только векторные значения, которые передаются из аккумулятора в ЦП), и не встроено ни одного целочисленного регистра. Как векторный сопроцессор (VPU 0/1), так и весь основной процессорный модуль Emotion Engine (VU0 + VU1 + VPU0 + VPU1) построены на основе модифицированного набора инструкций MIPS. Аккумулятор в этом случае не является универсальным, а управляющим статусом. |
CUDA [17] | настраиваемый, до 255 на поток | Более ранние поколения допускали до 127/63 регистров на поток ( Tesla / Fermi ). Чем больше регистров настроено на поток, тем меньше потоков может работать одновременно. Регистры имеют ширину 32 бита; поэтому для чисел с плавающей точкой двойной точности и 64-битных указателей требуются два регистра. Кроме того, он имеет до 8 предикатных регистров на поток. [18] | |
Серия CDC 6000 [19] | 0 16 | 00 8 | 8 регистров «A», 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 не были связаны таким образом). |
Система/360 , [20] Система/370 , [21] Система/390 , z/Архитектура [22] | 0 16 | 4 (при наличии ФП); 16 в моделях G5 и более поздних S/390 и z/Architecture | FP был необязательным в System/360 и всегда присутствовал в S/370 и более поздних версиях. В процессорах с Vector Facility имеется 16 векторных регистров, содержащих машинно-зависимое число 32-битных элементов. [23] Некоторым регистрам назначается фиксированное назначение с помощью соглашений о вызовах ; например, регистр 14 используется для адресов возврата подпрограмм, а для ELF ABI регистр 15 используется как указатель стека. Процессор S/390 G5 увеличил количество регистров с плавающей точкой до 16. [24] |
ММИКС [25] | 256 | 256 | Набор инструкций, разработанный Дональдом Кнутом в конце 1990-х годов для педагогических целей. |
NS320xx [26] | 00 8 | 00 8 (если присутствует ФП) | |
Xelerated X10 | 00 1 | 0 32 | 32/40-битный сетевой процессор на базе стековой машины с модифицированным набором инструкций MIPS и 128-битным блоком с плавающей точкой. [ необходима ссылка ] |
Параллаксный пропеллер | 00 0 | 00 2 | Восьмиядерный 8/16-битный контроллер стековой машины с простой логической схемой внутри, имеет 8 счетчиков (ядер) cog, каждый из которых содержит три 8/16-битных специальных регистра управления с 32-битной x 512 стековой оперативной памятью. Однако он не содержит никаких общих регистров для целочисленных целей. В отличие от большинства файлов теневых регистров в современных процессорах и многоядерных системах, ко всей стековой оперативной памяти в cog можно получить доступ на уровне инструкций, что позволяет всем этим cog действовать как единое ядро общего назначения при необходимости. Блок с плавающей точкой является внешним и содержит два 80-битных векторных регистра. |
Итаниум [27] | 128 | 128 | И 64 1-битных предикатных регистра и 8 ветвящихся регистров. Регистры FP — 82-битные. |
СПАРК [28] | 0 31 | 0 32 | Глобальный регистр 0 жестко привязан к 0. Использует окна регистров . |
IBM СИЛА | 0 32 | 0 32 | Также включены регистр связи, регистр счетчика и регистр умножения частного (MQ). |
PowerPC / Power ISA [29] | 0 32 | 0 32 | Также включены регистр связи и регистр счета. Процессоры, поддерживающие векторную функцию, также имеют 32 128-битных векторных регистра. |
Черный плавник [30] | 8 данных, 2 аккумулятора, 6 адресов | 00 0 | Также включены указатель стека и указатель кадра. Дополнительные регистры используются для реализации циклов с нулевыми накладными расходами и циклических буферных DAG (генераторов адресов данных). |
IBM Cell SPE | 128 | 128 регистров общего назначения, которые могут содержать целые числа, адреса или значения с плавающей точкой [31] | |
ПДП-10 | 0 16 | Все регистры могут использоваться в общем случае (целое число, число с плавающей точкой, указатель стека, переход, индексация и т. д.). Каждое 36-битное слово памяти (или регистра) также может обрабатываться как полуслово, которое можно считать (18-битным) адресом. Другие интерпретации слов используются определенными инструкциями. В оригинальных процессорах PDP-10 эти 16 GPR также соответствовали основным (т. е. основным ) ячейкам памяти 0–15; аппаратная опция, называемая «быстрой памятью», реализовала регистры как отдельные микросхемы, а ссылки на ячейки памяти 0–15 ссылались на регистры микросхем. Более поздние модели реализовали регистры как «быструю память» и продолжали ссылаться на них ячейками памяти 0–15. Инструкции перемещения принимают операнды (регистр, память)MOVE 1,2 : is register-register и MOVE 1,1000 is memory-to-register. | |
ПДП-11 | 00 7 | 00 6 (если присутствует FPP) | R7 — это счетчик программ. Любой регистр может быть указателем стека, но R6 используется для аппаратных прерываний и ловушек. |
ВАКС [32] | 0 16 | Регистры общего назначения также используются для значений с плавающей точкой. Три из регистров имеют специальное применение: R12 (указатель аргумента), R13 (указатель кадра) и R14 (указатель стека), а R15 относится к счетчику программ. | |
Альфа [33] | 0 31 | 0 31 | Регистры R31 (целочисленный) и F31 (с плавающей точкой) жестко привязаны к нулю. |
6502 | 1 данные, 2 индекса | 00 0 | Содержимое регистра A (аккумулятор) процессора 6502 предназначено для хранения данных и адреса памяти (8-битные данные/16-битный адрес), X и Y являются косвенными и прямыми индексными регистрами (соответственно), а регистры SP предназначены только для специальных индексов. |
W65C816S | 00 1 | 00 0 | 65c816 — 16-битный преемник 6502. X, Y и D (регистр прямой страницы) — это регистры условий, а регистр SP — только конкретный индекс. Главный аккумулятор расширен до 16 бит (C) [34] , при этом сохранен 8 бит (A) для совместимости, а главные регистры теперь могут адресовать до 24 бит (16-битная инструкция данных/24-битный адрес памяти). |
Депутат Европарламента | 00 4 | 00 8 | Media-embedded процессор был 32-битным процессором, разработанным Toshiba с модифицированным набором инструкций 8080. Только регистры A, B, C и D доступны во всех режимах (8/16/32-бит). Он несовместим с x86; однако он содержит 80-битный блок с плавающей точкой, совместимый с x87. |
PIC-микроконтроллер | 00 1 | 00 0 | |
AVR-микроконтроллер | 0 32 | 00 0 | |
ARM 32-бит (ARM/A32, Thumb-2/T32) | 0 14 | Варьируется (до 32) | r15 — это счетчик программ, и не может использоваться как регистр общего назначения; r13 — указатель стека; r8–r13 могут быть переключены на другие (банкированные) при переключении режима процессора. Более старые версии имели 26-битную адресацию, [35] и использовали верхние биты счетчика программ (r15) для флагов состояния, делая этот регистр 32-битным. |
ARM 32-бит (большой палец) | 00 8 | 0 16 | Версия 1 Thumb, которая поддерживала доступ только к регистрам r0–r7 [36] |
ARM 64-бит (A64) [37] | 0 31 | 0 32 | Регистр r31 является указателем стека или жестко привязан к 0, в зависимости от контекста. |
МИПС [38] | 0 31 | 0 32 | Целочисленный регистр 0 жестко привязан к 0. |
RISC-V [39] | 0 31 | 0 32 | Целочисленный регистр 0 жестко подключен к 0. Вариант RV32E, предназначенный для систем с очень ограниченными ресурсами, имеет 15 целочисленных регистров. |
Богоявление | 64 (на ядро) [40] | Каждая инструкция контролирует, интерпретируются ли регистры как целые числа или числа с плавающей точкой одинарной точности. Архитектура масштабируется до 4096 ядер, в настоящее время доступны реализации с 16 и 64 ядрами. |
Количество регистров, доступных на процессоре, и операции, которые могут быть выполнены с использованием этих регистров, оказывают значительное влияние на эффективность кода, сгенерированного оптимизирующими компиляторами . Число Стрэлера дерева выражений дает минимальное количество регистров, необходимых для оценки этого дерева выражений.