Jump to content

Ортогональный набор команд

В компьютерной технике ортогональный набор команд — это архитектура набора команд , в которой все типы команд могут использовать все режимы адресации . Он « ортогонален » в том смысле, что тип инструкции и режим адресации изменяются независимо. Ортогональный набор команд не накладывает ограничений, требующих, чтобы определенная инструкция использовала определенный регистр. [1] поэтому функциональность инструкций незначительно перекрывается. [2]

Ортогональность считалась основной целью разработчиков процессоров в 1970-х годах, и VAX-11 часто использовался в качестве эталона для этой концепции. Однако появление философии проектирования RISC в 1980-х годах значительно изменило тенденцию против большей ортогональности.

Современные процессоры часто моделируют ортогональность на этапе предварительной обработки перед выполнением реальных задач в RISC-подобном ядре. Эта «моделируемая ортогональность» в целом является более широкой концепцией, охватывающей понятия разделения и полноты в библиотеках функций , как и в математической концепции : набор ортогональных функций легко использовать в качестве основы для расширенных функций, гарантируя, что части не будут повлияет на другое, если мы изменим одну часть.

Основные понятия [ править ]

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

Одна инструкция, один операнд [ править ]

В ранних компьютерах архитектура набора команд (ISA) часто использовала один регистр, и в этом случае он назывался аккумулятором . Инструкции включали адрес операнда. Например, ADD address Инструкция заставит ЦП извлечь число из памяти, найденное по этому адресу, а затем добавить его к значению, уже находящемуся в аккумуляторе. Этот очень простой пример ISA имеет «одноадресный формат», поскольку каждая инструкция включает адрес данных. [4]

Одноадресные машины имеют тот недостаток, что даже простые действия, такие как сложение, требуют нескольких инструкций, каждая из которых занимает ограниченный объем памяти. [с] и требует времени для прочтения. Рассмотрим простую задачу сложения двух чисел: 5 + 4. В этом случае программе придется загрузить значение 5 в аккумулятор с помощью LOAD address инструкцию, используйте ADD address инструкция, указывающая на адрес 4, и, наконец, SAVE address чтобы сохранить результат, 9, обратно в другую ячейку памяти. [4]

Одна инструкция, несколько операндов [ править ]

Дальнейшие улучшения можно получить, указав адрес обоих операндов в одной инструкции, например: ADD address 1, address 2. Такие ISA «двухадресного формата» очень распространены. Эту концепцию можно далее расширить до «трехадресного формата», где SAVE также складывается в развернутый ADD address 1, address 2, address of result. [4]

Зачастую базовое компьютерное слово намного больше, чем необходимо для хранения только инструкции и адреса, и в большинстве систем остаются оставшиеся биты, которые можно использовать для хранения константы вместо адреса. Инструкции можно улучшить, если они позволяют заменять любой из операндов константой. Например, ADD address 1, constant 1 исключает один цикл памяти, и ADD constant 1, constant 2 другой. [4]

Несколько данных [ править ]

Дальнейшая сложность возникает, если принять во внимание общие закономерности доступа к памяти. Одна очень распространенная закономерность заключается в том, что одна операция может применяться к большому объему аналогичных данных. Например, можно сложить 1000 чисел. В простом двухадресном формате инструкций: [д] изменить адрес нет возможности, поэтому 1000 дополнений приходится писать на машинном языке . ISA решают эту проблему с помощью концепции косвенной адресации , при которой адрес следующей точки данных не является константой, а сам хранится в памяти. Это означает, что программист может изменить адрес, выполнив сложение в этой ячейке памяти. ISA также часто включают возможность смещения адреса от исходного местоположения путем добавления значения, хранящегося в одном из его регистров, в некоторых случаях в специальном индексном регистре . Другие выполняют это добавление автоматически как часть инструкций, которые его используют. [4]

Разнообразие режимов адресации приводит к обилию слегка различающихся инструкций. Учитывая одноадресную ISA, даже для одной инструкции, ADD, теперь у нас есть много возможных «режимов адресации»:

  • Немедленно (постоянно): ADD.C constant 1 — добавляет постоянное значение к результату в аккумуляторе
  • Прямой адрес: ADD.A address 1 — добавить значение, хранящееся по адресу 1
  • Память косвенная: ADD.M address 1 — прочитать значение по адресу 1, использовать это значение как другой адрес и добавить это значение

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

  • Зарегистрируйтесь напрямую: ADD.R register 1 — добавить значение, хранящееся по адресу, хранящемуся в первом регистре
  • Водоизмещение: ADD.D constant 1 — добавить константу в адресный регистр, затем добавить значение, найденное в памяти в полученном месте
  • Индекс: ADD.I register 1 — добавить значение из регистра 1 в регистр адреса, чтобы создать новый адрес, а затем добавить значение в этом месте в аккумулятор.
  • Автоиндекс: ADD.AI register 1 — как и в случае с индексом, но автоматически увеличивает адрес

Ортогональность [ править ]

Ортогональность — это принцип, согласно которому каждая инструкция должна иметь возможность использовать любой поддерживаемый режим адресации. В этом примере, если версия прямой адресации ADD доступен, все остальные тоже должны быть. программы Причина такого дизайна не эстетическая, цель — уменьшить общий размер объектного кода . Предоставляя различные режимы адресации, ISA позволяет программисту выбрать тот, который точно соответствует потребностям его программы в данный момент, и тем самым снижает необходимость использования нескольких инструкций для достижения одной и той же цели. Это означает, что общее количество инструкций уменьшается, что позволяет экономить память и повышать производительность. Ортогональность часто описывалась как высокая «битовая эффективность». [5]

Сохранение битов спецификатора режима адресации отдельно от битов операции кода операции создает ортогональный набор команд.

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

В примере ISA, описанном выше, ADD.C Инструкция, использующая прямое кодирование, уже содержит данные, необходимые для выполнения инструкции, и дальнейшая обработка не требуется, декодер просто отправляет значение в арифметико-логическое устройство (АЛУ). Однако, если ADD.A используется инструкция, необходимо прочитать адрес, прочитать значение в этой ячейке памяти, а затем АЛУ может продолжить работу. Эта серия событий займет гораздо больше времени и потребует дополнительных внутренних действий. [5]

В результате время, необходимое для выполнения различных вариантов инструкции, может сильно различаться, что усложняет общую конструкцию ЦП. Следовательно, ортогональность представляет собой компромисс при проектировании; Разработчик компьютера может предложить программисту больше режимов адресации, чтобы улучшить плотность кода за счет усложнения самого ЦП. [5]

Когда память была маленькой и дорогой, особенно в эпоху барабанной или основной памяти , ортогональность была крайне желательна. Однако сложность часто превышала то, чего можно было достичь с помощью нынешних технологий. По этой причине большинство машин 1960-х годов предлагали лишь частичную ортогональность, насколько могли себе позволить конструкторы. Именно в 1970-х годах внедрение крупномасштабной интеграции значительно снизило сложность компьютерных проектов, и начали появляться полностью ортогональные конструкции. К 1980-м годам такие конструкции можно было реализовать на однокристальном процессоре. [5]

В конце 1970-х годов, с появлением первых мощных полностью ортогональных проектов, цель расширилась и превратилась в компьютерную архитектуру на языке высокого уровня , или сокращенно HLLCA. Точно так же, как ортогональность была необходима для улучшения битовой плотности машинного языка, цель HLLCA состояла в том, чтобы улучшить битовую плотность языков высокого уровня, таких как АЛГОЛ 68 . Эти языки обычно использовали запись активации , тип сложного стека , в котором хранились временные значения, которые ISA обычно не поддерживали напрямую и которые приходилось реализовывать с использованием множества отдельных инструкций из базовой ISA. Добавление поддержки этих структур позволит более непосредственно транслировать программу в ISA. [5]

на практике Ортогональность

PDP-11 [ править ]

PDP-11 был по существу ортогональным (за исключением инструкций с плавающей запятой). [6] Большинство целочисленных инструкций могут работать как с 1-байтовыми, так и с 2-байтовыми значениями и могут получать доступ к данным, хранящимся в регистрах, хранящимся как часть инструкции, хранящимся в памяти или хранящимся в памяти и на которые указывают адреса в регистрах или памяти. Даже на ПК и стека указатель могут влиять обычные инструкции, использующие все обычные режимы данных. «Немедленный» режим (жестко запрограммированные числа внутри инструкции, такие как ADD #4, R1 (R1 = R1 + 4) был реализован как режим «косвенный регистр, автоинкремент» и указание программного счетчика (R7) в качестве регистра для использования ссылки. для косвенности и автоинкремента (закодировано как ADD (R7)+,R1 .word 4.) [7]

PDP-11 использовал 3-битные поля для режимов адресации (0–7), поэтому существовало (в электронном виде) 8 режимов адресации. Дополнительное 3-битное поле задавало регистры (R0–R5, SP, PC). Операнды немедленного и абсолютного адреса, применяющие два режима автоинкремента к счетчику программ (R7), обеспечили в общей сложности 10 концептуальных режимов адресации. Большинство инструкций с двумя операндами поддерживают все режимы адресации для обоих параметров. [7]

VAX-11 [ править ]

VAX -11 расширил ортогональность PDP-11 на все типы данных, включая числа с плавающей запятой. [5] Инструкции, такие как «ADD», были разделены на варианты, зависящие от размера данных, такие как ADDB, ADDW, ADDL, ADDP, ADDF для добавления байта, слова, длинного слова, упакованного BCD и плавающей запятой одинарной точности соответственно. Как и в PDP-11, указатель стека и счетчик программ находились в файле общего регистра (R14 и R15). [8]

Общая форма инструкции VAX-11 будет такой:

opcode [ operand ] [ operand ]  ...

Каждый компонент представляет собой один байт , код операции — значение в диапазоне 0–255, а каждый операнд состоит из двух полубайтов , старшие 4 бита определяют режим адресации, а нижние 4 бита (обычно) определяют номер регистра (R0–R15). ). [8]

В отличие от 3-битных полей PDP-11, 4-битные суббайты VAX-11 обеспечивают 16 режимов адресации (0–15). Однако режимы адресации 0–3 были «короткими немедленными» для немедленных данных размером 6 бит или меньше (2 младших бита режима адресации были двумя старшими битами немедленных данных, когда они добавлялись к остальным 4 битам). в этом байте адресации данных). Поскольку режимы адресации 0–3 были идентичны, получилось 13 (электронных) режимов адресации, но, как и в PDP-11, использование указателя стека (R14) и счетчика программ (R15) создало в общей сложности более 15 концептуальных режимов адресации. (при этом ассемблерная программа переводит исходный код в необходимый режим адресации на основе указателя стека или счетчика программ). [8]

MC68000 и подобные [ править ]

Разработчики Motorola попытались сделать язык ассемблера ортогональным, в то время как базовый машинный язык был несколько менее ортогональным. В отличие от PDP-11, MC68000 (68k) использовал отдельные регистры для хранения данных и адресов данных в памяти. ISA была ортогональной в той степени, что адреса могли использоваться только в этих регистрах, но не было ограничений на то, какой из регистров мог использоваться различными инструкциями. Аналогично, регистры данных также были ортогональны для всех инструкций. В отличие от PDP-11, 68000 поддерживал только один общий режим адресации для двухпараметрических инструкций. Другим параметром всегда был регистр, за исключением MOV. Инструкции MOV поддерживали все режимы адресации для обоих параметров. [9]

Напротив, серия NS320xx изначально разрабатывалась как однокристальная реализация VAX-11 ISA. Хотя это пришлось изменить из-за юридических проблем, полученная система сохранила большую часть общей философии дизайна VAX-11 и осталась полностью ортогональной. [10] Это включало исключение отдельных регистров данных и адресов, обнаруженных в 68k. [11]

Модель 8080 и последующие модели [ править ]

8-битный микропроцессор Intel 8080 (а также 8085 и 8051) по сути представлял собой слегка расширенную конструкцию на основе аккумулятора и, следовательно, неортогонален. Программист на языке ассемблера или автор компилятора должен был помнить, какие операции возможны в каждом регистре: большинство 8-битных операций можно было выполнить только с 8-битным аккумулятором (А-регистр), тогда как 16-битные операции могли выполняться только с 8-битным аккумулятором (А-регистр). выполнялся только с 16-битным указателем/аккумулятором (пара HL-регистр), тогда как простые операции, такие как приращение, были возможны со всеми семью 8-битными регистрами. Во многом это было связано с желанием сохранить длину всех кодов операций в один байт.

Позже в двоично -совместимый Z80 были добавлены префикс-коды, чтобы избежать этого ограничения в 1 байт и обеспечить более мощный набор команд. Та же основная идея была использована для Intel 8086 , хотя, чтобы обеспечить более радикальные расширения, здесь не предпринимались попытки обеспечить двоичную совместимость с 8080. В то время он сохранял некоторую степень неортогональности ради высокой плотности кода. 32-битное расширение этой архитектуры, представленное в 80386 , было несколько более ортогональным, несмотря на сохранение всех инструкций 8086 и их расширенных аналогов. Однако используемая стратегия кодирования все еще показывает много следов от 8008 и 8080 (и Z80). Например, однобайтовые кодировки остаются для некоторых частых операций, таких как извлечение и извлечение регистров и констант; а основной аккумулятор, регистр EAX , использует более короткие кодировки, чем другие регистры, для определенных типов операций. Подобные наблюдения иногда используются для оптимизации кода как в компиляторах, так и в рукописном коде.

RISC[editРИСК

Ряд исследований 1970-х годов продемонстрировали, что гибкость, обеспечиваемая ортогональными режимами, редко или никогда не использовалась в реальных задачах. В частности, сотрудники IBM изучили следы кода, работающего на System/370 , и продемонстрировали, что в реальных программах используется лишь часть доступных режимов. Подобные исследования, часто посвященные VAX, продемонстрировали ту же закономерность. В некоторых случаях было показано, что сложность инструкций означает, что их выполнение занимает больше времени, чем последовательность более мелких инструкций, каноническим примером этого является VAX. INDEX инструкция. [12]

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

Наконец, статья Эндрю Таненбаума продемонстрировала, что 97% всех констант в программе имеют значения от 0 до 10, причем 0 соответствует от 20 до 30% от общего числа. Кроме того, от 30 до 40% всех значений в программе являются константами, а простые переменные (в отличие от массивов и т. д.) — еще от 35 до 40%. [13] Если процессор использует командное слово большего размера, например 32-битное, два номера регистров и константа могут быть закодированы в одной инструкции, если сама инструкция не использует слишком много битов.

Эти наблюдения привели к отказу от ортогонального проектирования как основной цели проектирования процессоров и к появлению философии RISC в 1980-х годах. RISC-процессоры обычно имеют только два режима адресации: прямой (постоянный) и регистровый. Все остальные режимы, встречающиеся в старых процессорах, обрабатываются явно с использованием инструкций загрузки и сохранения, перемещающих данные в регистры и из них. Могут быть доступны только несколько режимов адресации , и эти режимы могут различаться в зависимости от того, ссылается ли команда на данные или предполагает передачу управления .

Примечания [ править ]

  1. ^ См . оцифровку .
  2. ^ адрес — это простые двоичные числа, которые можно рассматривать как данные.
  3. ^ Даже в современных компьютерах производительность максимизируется за счет хранения данных в кеше — ограниченном ресурсе.
  4. ^ при условии, что адрес не может быть использован

Ссылки [ править ]

  1. ^ Налл, Линда; Лобур, Юлия (2010). Основы компьютерной организации и архитектуры . Издательство Джонс и Бартлетт. стр. 287–288. ISBN  978-1449600068 .
  2. ^ Тарик, Джамиль (1995), «RISC против CISC: Почему меньше значит больше» , IEEE Potentials (август/сентябрь) , получено 7 мая 2019 г.
  3. ^ «Основы компьютерной организации и проектирования» (PDF) . Лаборатория вычислительных сенсомоторных систем.
  4. ^ Jump up to: Перейти обратно: а б с д и Таллсен, Дин. «Архитектура набора инструкций» (PDF) . UCSD.
  5. ^ Jump up to: Перейти обратно: а б с д и ж г Хеннесси, Джон; Паттерсон, Дэвид (29 мая 2002 г.). Компьютерная архитектура: количественный подход . п. 151. ИСБН  9780080502526 .
  6. ^ «Знакомство с PDP-11» . Университет Сиднея .
  7. ^ Jump up to: Перейти обратно: а б «Справочник по инструкциям PDP-11» (PDF) . Университет Торонто .
  8. ^ Jump up to: Перейти обратно: а б с «Другой подход к архитектуре набора команд — VAX» (PDF) .
  9. ^ Веронис, Эндрю (6 декабря 2012 г.). Микропроцессор 68000 . п. 54. ИСБН  9781468466478 .
  10. ^ Тилсон, Майкл (октябрь 1983 г.). «Перенос Unix на новые машины» . БАЙТ . п. 266 . Проверено 31 января 2015 г.
  11. ^ «NS32532» . Датормузей .
  12. ^ Паттерсон, Вашингтон ; Дитцель, Д.Р. (1980). «Дело о компьютере с сокращенным набором команд». Новости компьютерной архитектуры ACM SIGARCH . 8 (6): 25–33. CiteSeerX   10.1.1.68.9623 . дои : 10.1145/641914.641917 . S2CID   12034303 .
  13. ^ Таненбаум, Эндрю (1978). «Применение структурного программирования для архитектуры машин» . Коммуникации АКМ . 21 (3): 237–246. дои : 10.1145/359361.359454 . HDL : 1871/2610 . S2CID   3261560 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d71330b705f30495f22e33cba864f6f4__1717102020
URL1:https://arc.ask3.ru/arc/aa/d7/f4/d71330b705f30495f22e33cba864f6f4.html
Заголовок, (Title) документа по адресу, URL1:
Orthogonal instruction set - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)