Индексный регистр
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2009 г. ) |
Индексный регистр компьютера в ЦП — это регистр процессора (или назначенная ячейка памяти). [1] используется для указания адресов операндов во время выполнения программы. Это полезно для перемещения по строкам и массивам . Его также можно использовать для хранения итераций цикла и счетчиков. В некоторых архитектурах он используется для чтения/записи блоков памяти. В зависимости от архитектуры это может быть специальный индексный регистр или регистр общего назначения. [2] Некоторые наборы команд позволяют использовать более одного индексного регистра; в этом случае дополнительные поля инструкций могут указывать, какие индексные регистры использовать. [3]
Обычно содержимое индексного регистра добавляется (в некоторых случаях вычитается) к непосредственному адресу (который может быть частью самой инструкции или храниться в другом регистре) для формирования «эффективного» адреса фактических данных (операнда). . Специальные инструкции обычно предоставляются для проверки индексного регистра и, если проверка не удалась, индексный регистр немедленно увеличивается на константу и переходит, обычно до начала цикла. В то время как обычно процессоры, которые позволяют команде указывать несколько индексных регистров, складывают содержимое вместе, у IBM была линейка компьютеров, в которых содержимое было объединено. [4]
Индексные регистры оказались полезными для выполнения операций с векторами / массивами , а также в коммерческой обработке данных для навигации от поля к полю внутри записей. В обоих случаях индексные регистры существенно сократили объем используемой памяти и увеличили скорость выполнения.
История
[ редактировать ]В ранних компьютерах без какой-либо формы косвенной адресации операции с массивами приходилось выполнять путем изменения адреса инструкции, что требовало нескольких дополнительных шагов программы и занимало больше компьютерной памяти. [5] ограниченный ресурс в компьютерных установках ранней эпохи (а также в первых микрокомпьютерах два десятилетия спустя).
Индексные регистры, широко известные как B-линии в ранних британских компьютерах, как B-регистры на некоторых машинах и X-регистры. [а] в других случаях они были впервые использованы в британском компьютере Manchester Mark 1 технологии в 1949 году. В целом индексные регистры стали стандартной частью компьютеров во время второго поколения , примерно в 1954–1966 годах. Большинство [б] они были у машин IBM 700/7000 серии мэйнфреймов , начиная с IBM 704 в 1954 году, хотя они были необязательными на некоторых меньших машинах, таких как IBM 650 и IBM 1401 .
Ранние «маленькие машины» с индексными регистрами включают AN/USQ-17 , выпущенный примерно в 1960 году, и 9 серии компьютеры реального времени от Scientific Data Systems , выпущенные в начале 1960-х годов.
1962 года UNIVAC 1107 имеет 15 X-регистров, четыре из которых также были A-регистрами.
1964 года GE-635 имеет 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 , работают таким же образом.
1969 года Data General Nova и его преемник Eclipse , а также DEC PDP-11 1970 Миникомпьютеры года также предоставляли регистры общего назначения (называемые «аккумуляторами» в Nova и Eclipse), а не отдельные аккумуляторы и индексные регистры, как это делали их Eclipse MV и VAX. 32-битных суперминикомпьютеров Преемники . В PDP-11 и VAX любой регистр мог использоваться при вычислении адреса памяти операнда; в Nova, Eclipse и Eclipse MV можно было использовать только регистры 2 и 3. [8] [9] [10]
1971 года CDC STAR-100 имеет файл регистров, состоящий из 256 64-битных регистров, 9 из которых зарезервированы. В отличие от большинства компьютеров, инструкции STAR-100 имеют только поля регистров и поля операндов, поэтому регистры служат скорее регистрами-указателями, чем традиционными индексными регистрами.
1972 года В то время как Intel 8008 допускал косвенную адресацию через пары регистров, первым микропроцессором с настоящим индексным регистром, по-видимому, был 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] 1979 года Intel 8088 и 16-битные преемники Intel 80186 , Intel 80188 и Intel 80286 работают одинаково. В 1985 году i386 , 32-битный преемник этих процессоров, представил 32-битную версию архитектуры x86 IA-32 , расширив восемь 16-битных регистров до 32 бит, с добавлением буквы «E» в начале. имя регистрации; в IA-32 адрес операнда в памяти представляет собой сумму одного из этих восьми регистров, одного из семи из этих регистров (здесь указатель стека не допускается в качестве второго регистра), умноженного на 1, 2, 4 или 8. , и смещение. [13] : 3-11–3-12, 3-22–3-23 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-байтовых слов:
Clear_accumulator Load_index 400,index2 //load 4*array size into index register 2 (index2) loop_start : Add_word_to_accumulator array_start,index2 //Add to AC the word at the address (array_start + index2) Branch_and_decrement_if_index_not_zero loop_start,4,index2 //loop decrementing by 4 until index register is zero
См. также
[ редактировать ]Примечания
[ редактировать ]- ^ Термин X-регистры также использовался для аккумуляторов, например, CDC 6600 .
- ^ У моделей 702, 705 и 7080 не было индексных регистров.
Ссылки
[ редактировать ]- ^ «Инструкции: указательные слова» (PDF) . IBM 7070-7074 Принципы работы (PDF) . ИБМ. 1962. с. 11. ГА22-7003-6.
- ^ «Что такое индексный регистр? (с рисунком)» . EasyTechJunkie . Проверено 24 июля 2022 г.
- ^ Справочное руководство IBM 709, форма A22-6501-0, 1958, стр. 12
- ^ Принципы работы IBM 7094 (PDF) . Пятое издание. ИБМ. 21 октября 1966 г. А22-6703-4.
- ^ Справочное руководство IBM 1401, форма A24-1403-4, 1960, стр. 77
- ^ Справочник по программируемому процессору данных-6 (PDF) . Корпорация цифрового оборудования . Август 1964. стр. 20–22.
- ^ Принципы работы IBM System/360 (PDF) (Восьмое изд.). ИБМ . Сентябрь 1968. стр. 8, 12–14. А22-6821-7.
- ^ Справочное руководство программиста, компьютеры Nova Line (PDF) . Общие данные . Январь 1976 г. стр. I-1, II-7.
- ^ Справочное руководство программиста, компьютеры Eclipse Line (PDF) . Общие данные . Март 1975 г., стр. 1–1, 2–6.
- ^ Принципы работы 32-битных систем ECLIPSE (PDF) . Общие данные . Август 1984 г. стр. 1–2.
- ^ «Регистры — сборка 6502» . www.6502.buss.hk. Проверено 24 июля 2022 г.
- ^ «Руководство пользователя семейства 8086» (PDF) . Корпорация Интел. Октябрь 1979 г., стр. 2–6, 2–68. Архивировано (PDF) из оригинала 4 апреля 2018 г. Проверено 28 марта 2018 г.
- ^ Jump up to: а б Руководство разработчика программного обеспечения для архитектур Intel® 64 и IA-32, том 1: Базовая архитектура . Корпорация Интел. Март 2018. Глава 3. Архивировано из оригинала 26 января 2012 года . Проверено 19 марта 2014 г.
- ^ Руководство программиста по архитектуре AMD64, том 1: Прикладное программирование (PDF) . Передовые микроустройства . Октябрь 2020. стр. 3, 16.
- ^ Справочное руководство по архитектуре ARM . Рука . 2005. стр. А2-6, А3-21.
- ^ Справочное руководство по архитектуре Arm Armv8, для профиля архитектуры Armv8-A . Рука . 2022. стр. C1-227, C3-252.