Максимальное количество кодов операций для микропроцессора

13

введите описание изображения здесь

Каково максимальное количество кодов операций для вопроса, ответ - вариант c, но я думаю, что это вариант d, потому что, каждый адрес определяет каждую ячейку памяти, есть 16 строк адреса, что означает 2 ^ 16 адресов, т.е. 2 ^ 16 ячеек памяти.

Таким образом, если каждое местоположение содержит один код операции, всего 2 ^ 16 местоположений содержат 2 ^ 16 кодов операций, и это максимальное количество кодов операций, но ответ дается как c, который равен 2 ^ 12. Как это возможно?

Chiduruppula Sharath Kumar
источник
7
Вопрос в том, сколько разных опкодов в ISA, а не сколько инструкций может составить максимально возможную программу.
Брайан Драммонд
5
@BrianDrummond - с такой интерпретацией, однако, вопрос имеет смысл, только если вы сделаете предположения о том, как работает ISA, и которые не являются универсальными. Например, Z80 имеет 8-битную шину данных, но где-то в районе 800 различных допустимых кодов операций - потому что он использует байты префикса для расширения и изменения доступных операций.
Жюль
15
Вопрос, сформулированный в книге, не имеет смысла. Нет никакого прямого соответствия между размером шины и размером кода операции. JVM основана на 32-битной модели данных, но имеет 8-битные коды операций.
Хрилис - на забастовку -
10
Этот вопрос бессвязен, если у нас нет много информации помимо того, что дано в вопросе. Нам пришлось бы сделать много предположений о характеристиках процесса, чтобы получить ответ - предположения, которые не верны для подавляющего большинства реальных процессоров!
Дэвид Шварц
14
Вопрос в чушь. При необходимости код операции инструкции может занимать несколько слов памяти. Там нет врожденного ограничения.
Hot Licks

Ответы:

31

Все варианты неверны . Максимальное количество (уникальных) кодов операций, которые может выполнить процессор, не ограничено шириной шины.


Обычно 12+-битный ЦП рассчитан на одну команду для каждого слова данных, чтобы он мог читать большинство инструкций за один раз. Таким образом, нормальный процессор должен быть спроектирован до предела 2 ^ 12 кодов операций.

Существующие архитектуры ЦП, которые имеют более 2 ^ 12 = 4096 кодов операций, очень редки просто потому, что вряд ли когда-нибудь понадобится столько - слишком много, чтобы учиться, слишком много, чтобы быть действительно полезным, слишком много потерянного дорогостоящего пространства кремния.

Обновление : как отмечалось в комментариях, все возможные варианты набора команд x86 могут фактически составлять более 6000 в зависимости от того, как вы рассчитываете! Это скорее исключение.

Однако для 4-битного процессора 2 ^ 4 = 16 инструкций очень часто недостаточно, поэтому у многих таких процессоров их больше.

Может быть несколько способов и причин, по которым ЦП может включать больше кодов операций, чем вписывается в шину данных, включая:

Распространение слов

Процессору не нужно читать команду в одном цикле данных - он может использовать несколько последовательных циклов. На самом деле большинство процессоров этого не делают - хотя его чаще используют для аргументов команд, а не для расширения пространства кода операции.

Пример: intel 4004 имеет только 4 строки, которые мультиплексируются как строки данных / адресов, 4-битное слово данных, но более 40 кодов операций в 8-битных инструкциях.

Префиксы и суффиксы

Процессор (CISC) может иметь столько префиксов и суффиксов команд, сколько ему нужно.

Они имеют префикс к реальной инструкции, чтобы изменить то, что она делает - немного или полностью.

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

Пример: процессоры Intel x86 на самом деле не имеют кодов операций 4M. Однако, если считать все префиксы частью кода операции, современные процессоры позволяют выполнять инструкции длиной до 15 байт - это МНОГО возможных кодов операций. Хотя многие просто будут делать то же самое - так что это зависит от определения того, что они являются «уникальными».

Режимы

Процессор может иметь несколько режимов работы, в которых он может иметь совершенно другой набор кодов операций.

Примеры: intel x86_64 имеет 32-битный (реальный / v86 / защищенный) и 64-битный режимы, которые имеют различные коды операций. Процессоры ARM могут иметь 32-битные ARM и 16-битные режимы большого пальца.

Мультиплексирование битов шины

Вопросы задают «линии данных» и «адресные линии», однако как внутренняя шина данных, так и внутренняя адресная шина могут быть шире, чем количество фактических шинных линий.

Данные мультиплексированной шины отправляются последовательно, то есть первая половина, затем вторая половина. Процессор сохраняет его в полноразмерных внутренних регистрах и работает с ними.

Это часто делается для того, чтобы снизить затраты и / или размер физической площади чипа.

Примерами являются Intel 4004, все, что находится на шине данных LPC, и NEC VR4300, процессор Nintendo64, который имел только 32-строчную шину данных.

Нет параллельной шины

Как продолжение предыдущего пункта, ЦП даже не нужно выставлять параллельную шину вообще.

Процессор может легко выставлять только последовательную шину, такую ​​как I2C, SPI и т. Д.

Возможно, создание такого выделенного ЦП не очень выгодно, но многие микроконтроллеры с низким числом выводов (которые включают в себя как ЦП, так и память) созданы таким образом, чтобы сохранить эти ценные выводы для чего-то более полезного. Например, чипы atmel ATTINY4 / 5/6/10 имеют всего 6 контактов, два для питания, один для сброса, три универсальных. Инструкции отправляются через собственный трехстрочный интерфейс последовательно.

В зависимости от вашего определения микроконтроллера, он может считаться микропроцессором или может быть запрограммирован на работу с ним (т.е. имитировать выделенный ЦП с последовательной шиной или шинами).

Этот вопрос ясно говорит о том, что какая-то шина данных ОБНАРУЖЕНА, но не параллельная шина. Теоретически, 12-строчная шина данных может состоять из одной последовательной строки данных и 11 вспомогательных линий / линий заземления / состояния , хотя это, вероятно, не очень разумная идея.

Специальный учебный автобус

На самом деле процессору даже не нужно принимать инструкции на тех же линиях шины, что и данные.

Это может легко иметь место, когда ALU представляют собой дискретные микросхемы, а не часть микропроцессора, но в большинстве случаев экономически неэффективны.

Но ничто не мешает вам реализовать процессор с выделенными линиями только для инструкций. Такой ЦП может быть полезен, когда необходимо выполнить одну операцию над массивом данных (SIMD).

Так как ширина шины инструкций полностью произвольна, максимально возможное количество кодов операций.

Джек Уайт
источник
4
Интересно, что x86-64 имеет от 1000 до 6000 кодов операций, в зависимости от того, кого вы спрашиваете ( 1 , 2 , 3 ).
LMS
Никогда не пытался их даже сосчитать, но со всеми вариациями это имеет смысл.
Джек Уайт,
13

О максимальном количестве кодов операций действительно можно подумать несколькими способами:

  • Максимально возможное количество уникальных кодов операций.

Это может быть получено из ширины инструкции, а не из ширины шины данных. Обычно код операции помещается в один доступ к памяти, и тогда ответ 2 ^ 12. Но процессор может реализовать процесс многократного декодирования кода операции, чтобы расширить число возможных кодов операции за пределы 2 ^ 12.

  • Максимальное количество инструкций (содержащих коды операций), которые процессор может адресовать напрямую.

Максимальное количество инструкций (содержащих коды операций), которые процессор может адресовать напрямую, ограничено шириной адресной шины (2 ^ 16). Однако косвенно процессор может быть способен адресовать больше памяти, например, код операции может облегчить обмен страницами или подобную операцию для получения инструкций из другого источника.

HKOB
источник
2
Вопрос не настолько двусмысленный. Если бы это предполагалось интерпретировать как ваш второй пункт, он был бы сформулирован как «максимальное количество инструкций, которые могут быть сохранены / адресованы / ...». Слово «код операции» ясно показывает, что речь идет о наборе команд, а не о диапазоне адресов.
Дим потерял веру в SE
11
+1 за упоминание о том, что многословные операционные коды вполне возможны, поэтому вопрос не очень хороший.
Спехро Пефхани
2
Носители английского языка часто имеют предвзятость, из-за которой им сложно понять только значение слов, которые они используют. Когда иностранные носители английского языка читают или слышат это, они могут не получить второго (предполагаемого) значения. То же самое относится и к тому, когда ученик выучивает новое выражение - если формулировки неоднозначны, их легко понять неправильно. Поэтому я предполагаю, что студент узнал, что каждая инструкция содержит часть кода операции. Да, я бы сказал, что это правда. Действительно, формулировка вопроса 01. неоднозначна.
HKOB
4
@SpehroPefhany Да, вопрос, несомненно, неоднозначен без дальнейшего контекста. Если OP учили, что при любой длине команды код операции будет извлечен при первом обращении к памяти, тогда ответом будет (c), в противном случае он не подлежит ответу. Суть в том, дал ли ОП достаточно контекста в своем вопросе EE.SE, или его учитель (и) дал что-то само собой разумеющееся и сформулировал неоднозначный вопрос?
Лоренцо Донати поддерживает Монику
1
@SpehroPefhany Правда :) Но англичане - возможно, к их легкому раздражению - также являются частью международного английского мира ( bbc.com/capital/story/… )
HKOB
4

Вы правы, что смущены этим вопросом - он очень плохо написан.

Однако я подозреваю, что целью этого вопроса является определение размера командного слова для машины. Учитывая предоставленные очень неполные данные, это должно соответствовать ширине шины данных ; Ширина адресной шины определяет максимальный размер основной памяти.

На практике поле «код операции» инструкций данного компьютера часто значительно меньше самой инструкции, но инструкция может быть шире, чем шина данных.

Старый Motorola 68008 является тому примером - это была недорогая версия 68000 с 8-битной шиной данных, но в ней использовались те же 16-битные слова инструкций, в которых обычно 7 бит определяют код операции (остаток идентифицировать регистры источника и назначения, а также режим адресации, все из которых должны рассматриваться как операнды , а не как код операции ). Если вы включите биты режима адресации в код операции, как это делают некоторые, это составит 10-разрядное поле кода операции. Фактические инструкции могут быть значительно длиннее в некоторых режимах адресации.

Chromatix
источник
«Остальные идентифицируют регистры источника и назначения, а также режим адресации, все из которых должны рассматриваться как операнды, а не как код операции»… ну, это немного вопрос. Для архитектуры RISC это, безусловно, верно, но во многих случаях архитектуры CISC определяются таким специальным образом, что, вероятно, имеет смысл считать каждую комбинацию отдельным кодом операции. Z80 является показательным примером - хотя многие из его инструкций имеют один или два выбора регистров, закодированных в битах кода операции, режимы адресации являются полностью специальными, и префиксы изменяют интерпретацию ...
Жюль
... и режим адресации, и регистр во многих случаях, что делает интерпретацию регистров из битовых полей чуть менее простой. Похоже, что большинство документации и ассемблеров работают с пониманием, что каждая комбинация команды и регистров является отдельным кодом операции, и только непосредственные значения и косвенные значения смещения адресов фактически являются операндами. Это мировоззрение разделяет его предшественник Intel 8080, в котором стандартный формат языка ассемблера имел регистры, управляемые инструкцией, закодированной как часть мнемоники, а не приведенной в качестве аргументов.
Жюль
Да, Z80 типичен для 8-битных микрокодированных процессоров. У 6502 было более логичное отображение кода операции, которое позволило оптимизировать схему декодирования. Но я специально говорил о 68K, в инструкциях которого есть очень разные поля адресации и регистра назначения. После их вычитания поле кода операции может быть шире, чем шина данных 68008.
Chromatix
1

Edson DeCastro разработал почти такой же компьютер, как PDP-8, с 15 адресами и 12 линиями данных.

Таким образом, ответ на заданный вопрос - 574 кода операции, потому что у PDP-8 было 284 кода операции, а Эд только наполовину сумасшедший.

Слартибартфаст
источник
2
Не уверен, почему понижение голоса - это такой же хороший ответ, как и любой, учитывая, что вопрос по сути бессмысленный. :)
Жюль
Я подозреваю, что отрицательный голос объясняется тем, что 284 * 2 = 568, а не 574.
Марк