stringtranslate.com

Индексный регистр

Отображение индексного регистра на мэйнфрейме IBM 7094 начала 1960-х годов.

Индексный регистр в ЦП компьютера — это регистр процессора (или назначенная ячейка памяти) [1] , используемый для указания адресов операндов во время выполнения программы. Это полезно для перемещения по строкам и массивам . Его также можно использовать для хранения итераций цикла и счетчиков. В некоторых архитектурах он используется для чтения/записи блоков памяти. В зависимости от архитектуры это может быть специальный индексный регистр или регистр общего назначения. [2] Некоторые наборы команд позволяют использовать более одного индексного регистра; в этом случае дополнительные поля инструкций могут указывать, какие индексные регистры использовать. [3]

Как правило, содержимое индексного регистра добавляется (в некоторых случаях вычитается) к непосредственному адресу (который может быть частью самой инструкции или храниться в другом регистре) для формирования «эффективного» адреса фактических данных (операнда). . Специальные инструкции обычно предоставляются для проверки индексного регистра и, если проверка не удалась, индексный регистр немедленно увеличивается на константу и переходит, обычно до начала цикла. В то время как обычно процессоры, которые позволяют команде указывать несколько индексных регистров, складывают содержимое вместе, у IBM была линейка компьютеров, в которых содержимое было объединено. [4]

Индексные регистры оказались полезными для выполнения операций с векторами / массивами , а также в коммерческой обработке данных для навигации от поля к полю внутри записей. В обоих случаях индексные регистры существенно сократили объем используемой памяти и увеличили скорость выполнения.

История

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

Индексные регистры, широко известные как B-линии в ранних британских компьютерах, как B-регистры на некоторых машинах и X-регистры [a] на других, впервые были использованы в британском компьютере Manchester Mark 1 в 1949 году. Регистры стали стандартной частью компьютеров во время второго поколения технологии , примерно в 1954–1966 годах. Они были установлены на большинстве [b] машин серии мэйнфреймов IBM 700/7000 , начиная с IBM 704 в 1954 году, хотя на некоторых машинах меньшего размера, таких как IBM 650 и IBM 1401, они были необязательными .

Ранние «маленькие машины» с индексными регистрами включают AN/USQ-17 , выпущенный примерно в 1960 году, и компьютеры реального времени серии 9 от Scientific Data Systems , выпущенные в начале 1960-х годов.

UNIVAC 1107 1962 года имеет 15 X-регистров, четыре из которых также были A-регистрами.

GE-635 1964 года имеет 8 специальных X-регистров; однако он также позволяет индексировать по счетчику команд или по половине регистра A или Q.

Digital Equipment Corporation (DEC) PDP-6 , представленная в 1964 году, и IBM System/360 , анонсированная в 1964 году, не включают выделенные индексные регистры; вместо этого у них есть регистры общего назначения (называемые в PDP-6 «аккумуляторами»), которые могут содержать либо числовые значения, либо адреса. Адрес памяти операнда в PDP-6 представляет собой сумму содержимого регистра общего назначения и 18-битного смещения, а в System/360 — сумму содержимого двух регистров общего назначения. и 12-битное смещение. [6] [7] Совместимая линейка PDP-10, преемников PDP-6, а также IBM System/370 и более поздних совместимых преемников System/360, включая текущую z/Architecture , работают таким же образом.

Миникомпьютеры Data General Nova 1969 года и преемник Eclipse , а также DEC PDP-11 1970 года также предоставляли регистры общего назначения (называемые «аккумуляторами» в Nova и Eclipse), а не отдельные аккумуляторы и индексные регистры, как это делали их Eclipse MV и VAX . Преемники 32-битных суперминикомпьютеров . В PDP-11 и VAX любой регистр мог использоваться при вычислении адреса памяти операнда; в Nova, Eclipse и Eclipse MV можно было использовать только регистры 2 и 3. [8] [9] [10]

CDC STAR-100 1971 года имеет файл регистров, состоящий из 256 64-битных регистров, 9 из которых зарезервированы. В отличие от большинства компьютеров, инструкции STAR-100 имеют только поля регистров и поля операндов, поэтому регистры служат скорее регистрами-указателями, чем традиционными индексными регистрами.

Хотя Intel 8080 допускал косвенную адресацию через пары регистров, первым микропроцессором с настоящим индексным регистром, по-видимому, был Motorola 6800 1974 года .

В 1975 году 8-битный процессор MOS Technology 6502 имел два индексных регистра «X» и «Y». [11]

В 1978 году Intel 8086 , первый процессор x86 , имел восемь 16-битных регистров, называемых «общего назначения», каждый из которых можно было использовать как регистры целочисленных данных в большинстве операций; четыре из них: «SI» (индекс источника), «DI» (индекс назначения), «BX» (база) и «BP» (базовый указатель), также могут использоваться при вычислении адреса памяти операнда, который представляет собой сумму одного из этих регистров и смещения, или сумму одного из «BX» или «BP», одного из «SI» или «DI» и смещения. [12] Intel 8088 1979 года и 16 -битные процессоры Intel 80186 , Intel 80188 и Intel 80286 работают одинаково. -битовые регистры становятся 32-битными, с добавлением «E» в начало имени регистра; в IA-32 адрес операнда в памяти представляет собой сумму одного из этих восьми регистров, одного из семи из этих регистров (стек указатель здесь не допускается в качестве второго регистра), умноженный на 1, 2, 4 или 8, и смещение. [13] : 3-11–3-12, 3-22–3-23  The Advanced Micro Devices Opteron , первая модель, выпущенная в 2003 году, представила x86-64 , 64-битную версию набора команд x86; в x86-64 регистры общего назначения были расширены до 64 бит и добавлены восемь дополнительных регистров общего назначения; адрес памяти операнда представляет собой сумму двух из этих 16 регистров и смещения. [14] [13] : 3–12, 3–24 

Все наборы команд вычислений с сокращенным набором команд (RISC), представленные в 1980-х и 1990-х годах, предоставляют регистры общего назначения, которые могут содержать либо числовые значения, либо значения адреса. В большинстве этих наборов команд имеется 32 регистра общего назначения (в некоторых из этих наборов команд значение одного из этих регистров жестко привязано к нулю), которые можно использовать для вычисления адреса операнда; у них не было специальных индексных регистров. В 32-битной версии архитектуры ARM , впервые разработанной в 1985 году, имеется 16 регистров, обозначенных как «регистры общего назначения», но только 13 из них могут использоваться для всех целей, причем регистр R15 содержит программный счетчик . Адрес памяти инструкции загрузки или сохранения представляет собой сумму любого из 16 регистров и либо смещения, либо другого регистра, за исключением R15 (возможно, сдвинутого влево для масштабирования). [15] В 64-битной версии архитектуры ARM имеется 31 64-битный регистр общего назначения, а также указатель стека и нулевой регистр; адрес памяти инструкции загрузки или сохранения представляет собой сумму любого из 31 регистра и либо смещения, либо другого регистра. [16]

Примеры

Вот простой пример использования индексного регистра в псевдокоде языка ассемблера, который суммирует массив из 100 записей 4-байтовых слов:

 Очистить_аккумулятор Load_index 400,index2 //загружаем 4*размер массива в индексный регистр 2 (индекс2)loop_start : Add_word_to_accumulator array_start,index2 //Добавляем в AC слово по адресу (array_start + index2) Branch_and_decrement_if_index_not_zero loop_start,4,index2 //цикл уменьшается на 4, пока индексный регистр не станет нулевым

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

Примечания

  1. ^ Термин X-регистры также использовался для аккумуляторов, например, на CDC 6600 .
  2. ^ У 702, 705 и 7080 не было индексных регистров.

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

  1. ^ «Инструкции: указательные слова» (PDF) . IBM 7070-7074 Принципы работы (PDF) . ИБМ. 1962. с. 11. ГА22-7003-6.
  2. ^ «Что такое индексный регистр? (с изображением)» . EasyTechJunkie . Проверено 24 июля 2022 г.
  3. ^ Справочное руководство IBM 709, форма A22-6501-0, 1958, стр. 12
  4. ^ Принципы работы IBM 7094 (PDF) . Пятое издание. ИБМ. 21 октября 1966 г. А22-6703-4.
  5. ^ Справочное руководство IBM 1401, форма A24-1403-4, 1960, стр. 77
  6. ^ Справочник по программируемому процессору данных-6 (PDF) . Корпорация цифрового оборудования . Август 1964. стр. 20–22.
  7. ^ Принципы работы IBM System/360 (PDF) (Восьмое изд.). ИБМ . Сентябрь 1968. стр. 8, 12–14. А22-6821-7.
  8. ^ Справочное руководство программиста, Nova Line Computers (PDF) . Общие данные . Январь 1976 г. стр. I-1, II-7.
  9. ^ Справочное руководство программиста, Компьютеры Eclipse Line (PDF) . Общие данные . Март 1975 г., стр. 1–1, 2–6.
  10. ^ Принципы работы 32-битных систем ECLIPSE (PDF) . Общие данные . Август 1984 г. стр. 1–2.
  11. ^ "Регистры - Сборка 6502" . www.6502.buss.hk. _ Проверено 24 июля 2022 г.
  12. ^ «Руководство пользователя семейства 8086» (PDF) . Корпорация Интел. Октябрь 1979 г., стр. 2–6, 2–68. Архивировано (PDF) из оригинала 4 апреля 2018 г. Проверено 28 марта 2018 г.
  13. ^ ab Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 1: Базовая архитектура. Корпорация Интел. Март 2018. Глава 3. Архивировано из оригинала 26 января 2012 года . Проверено 19 марта 2014 г.
  14. ^ Руководство программиста по архитектуре AMD64, том 1: Прикладное программирование (PDF) . Передовые микроустройства . Октябрь 2020. стр. 3, 16.
  15. ^ Справочное руководство по архитектуре ARM. Рука . 2005. стр. А2-6, А3-21.
  16. ^ Справочное руководство по архитектуре Arm Armv8, для профиля архитектуры Armv8-A. Рука . 2022. стр. C1-227, C3-252.