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


13

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

Яка максимальна кількість опкодів для питання, відповідь - це варіант c, але я думаю, що це варіант d, тому що кожна адреса вказує кожне місце пам'яті, є 16 адресних рядків, що означає 2 ^ 16 адрес, тобто 2 ^ 16 місць пам'яті.

Отже, якщо кожне місце розташування містить один опкод, загалом 2 ^ 16 локацій містять 2 ^ 16 кодових кодів і це максимальна кількість опкодів, але відповідь дається як c, що дорівнює 2 ^ 12. Як це можливо?


7
Питання полягає в тому, скільки РАЗЛІЧних опкодів в ISA, а не скільки інструкцій можуть скласти найбільшу можливу програму.
Брайан Драммонд

5
@BrianDrummond - з такою інтерпретацією, однак, питання має сенс лише якщо ви робите припущення про те, як працює ISA, які не є універсальними. Наприклад, Z80 має 8-бітну шину даних, але десь у районі 800 різних дійсних опкодів - оскільки вона використовує префіксні байти для розширення та зміни доступних операцій.
Жуль

15
Питання, викладене в книзі, не має сенсу. Немає властивої прямої відповідності між розміром шини та розміром опкоду. JVM заснований на 32-бітній моделі даних, але має 8-бітові опкоди.
chrylis -на страйк-

10
Це питання є невідповідним, якщо ми не маємо багато інформації, ніж те, що вказано в питанні. Нам доведеться зробити багато припущень щодо характеристик процесу, щоб отримати відповідь - припущення, які не відповідають дійсності більшості процесорів реального світу!
Девід Шварц

14
Питання - фігня. Якщо необхідно, інструкція коду може охоплювати кілька слів пам'яті. Немає властивої межі.
Гарячі лизання

Відповіді:


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-бітний режим ARM.

Шина мультиплексування шин

У питаннях зазначено "рядки даних" та "лінії адрес", однак як внутрішня шина даних, так і внутрішня шина адреси можуть бути ширшими, ніж кількість фактичних ліній шини.

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

Це часто робиться для зменшення витрат та / або розміру фізичної площі.

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

Ні паралельної шини

Як продовження попереднього пункту, процесору навіть не потрібно виставляти паралельну шину.

Процесор може легко відкрити лише послідовну шину, таку як I2C, SPI тощо.

Виробляти такий виділений процесор, мабуть, не дуже рентабельно, але багато мікроконтролерів з низькою кількістю контактів (які включають як процесор, так і пам'ять) зроблені таким чином, щоб зберегти ці дорогоцінні штифти для чогось більш корисного. Наприклад, мікросхема atmel ATTINY4 / 5/6/10 має всього 6 контактів, два для живлення, один для скидання, три загального призначення. Інструкції надсилаються через власний 3-рядковий інтерфейс послідовно.

Залежно від вашого визначення мікроконтролера, його можна вважати мікропроцесором або запрограмувати на його дія (тобто моделювати виділений процесор із послідовною шиною або шинами).

У цьому питанні чітко зазначено, що якась шина даних є ІС, але не про те, що вона є паралельною шиною. Теоретично 12-лінійна шина даних може складатися з однієї послідовної лінії передачі даних та 11 допоміжних / земляних / ліній статусу , хоча це, мабуть, не буде дуже розумною ідеєю.

Виділений автобус з інструкціями

Насправді процесору навіть не потрібно приймати інструкції на тих же шинах, що і дані.

Це може бути легким випадком, коли ALU були дискретні мікросхеми, а не частина мікропроцесора, але це не є економічно вигідним зараз більшу частину часу.

Але ніщо не заважає вам реалізувати процесор із виділеними рядками лише за інструкціями. Такий процесор може бути корисним, коли необхідно виконати одну операцію на масиві даних (SIMD).

Оскільки ширина шини інструкції є абсолютно довільною, такий максимально можливий кількість коду.


4
Як точку інтересу, x86-64 має від 1000 до 6000 опкодів, залежно від того, кого ви запитуєте ( 1 , 2 , 3 ).
LMS

Ніколи не намагався їх навіть порахувати, але з усіма варіаціями це має сенс.
Джек Вайт

13

Максимальну кількість опкодів дійсно можна продумати двома способами:

  • Максимально можлива кількість унікальних опкодів.

Це може бути зібрано з ширини інструкції, а не ширини шини даних. Зазвичай опкод вписується в єдиний доступ до пам'яті, і тоді відповідь - 2 ^ 12. Але процесор міг реалізувати багатокольоровий процес декодування коду, щоб розширити кількість можливих опкодів понад 2 ^ 12.

  • Максимальна кількість інструкцій (що містять опкоди), з якими процесор може безпосередньо адресувати.

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


2
Питання не таке неоднозначне. Якби це було сприйнято як ваш другий пункт, воно було б сформульоване як "максимальна кількість інструкцій, які можна зберігати / адресувати / ...". Слово "опкод" дає зрозуміти, що йдеться про набір інструкцій, а не про адресний діапазон.
дим втратив віру в SE

11
+1 за те, що згадують, що багатословні оп-коди цілком можливі, тому питання не дуже вдале.
Спехро Пефхані

2
Рідні англійські мови часто мають упередження, які ускладнюють їх просто розуміння голого значення слів, які вони використовують. Коли міжнародні англійські спікери читають чи чують це, вони можуть не набути другого (призначеного) значення. Це ж стосується, коли студент засвоює новий вираз - якщо формулювання неоднозначні, це неправильно зрозуміти. Тому я б здогадався, що студент дізнався, що кожна інструкція містить в собі частину коду. Так, я б сказав, що це правда. Дійсно, формулювання питання 01. неоднозначне.
HKOB

4
@SpehroPefhany Так, питання, безперечно, неоднозначне без подальшого контексту. Якщо ОП вчили, що незалежно від тривалості інструкції, код коду буде отриманий у першому доступі до пам'яті, то відповідь - це (с), інакше це невідчутно. Справа в тому, чи дав ОП достатній контекст у своєму питанні EE.SE, чи його вчитель (и) дав щось як належне і сформулював неоднозначне запитання?
Лоренцо Донаті - Codidact.org

1
@SpehroPefhany Правда :) Але англійці - можливо, їх легке роздратування - також є частиною міжнародного англійського світу ( bbc.com/capital/story/… )
HKOB

4

Ви праві заплутані в цьому питанні - це дуже погано написано.

Однак я підозрюю, що метою цього питання є визначити розмір інструкційного слова для машини. Враховуючи дуже неповні дані, вони повинні відповідати ширині шини даних ; ширина адресної шини визначає максимальний розмір основної пам'яті.

На практиці поле "опкод" в інструкціях даної машини часто значно менше, ніж сама інструкція, проте інструкція може бути ширшою, ніж шина даних.

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


"решта ідентифікують джерела та регістри призначення та режим адресації. Усі вони повинні вважатися операндами, а не кодами" ... ну, це трохи питання. Для архітектури RISC це абсолютно вірно, але в багатьох випадках архітектури CISC визначаються настільки спеціально, що, ймовірно, має сенс вважати кожну комбінацію окремим кодом. Z80 - це конкретний випадок - хоча в багатьох його інструкціях є один або два виділення регістру, закодовані в бітах опкоду, режими адресації є повністю спеціальними, а префікси змінюють інтерпретацію ...
Jules

... як режим адресації, так і реєстрація у багатьох випадках, що робить інтерпретацію регістрів з бітових полів трохи менше, ніж просту. Більшість документації та асемблерів, здається, працюють над розумінням того, що кожна комбінація інструкцій і регістрів є окремим опкодом, і лише безпосередні значення та значення непрямого зміщення адреси - це фактично операнди. Такого світогляду поділяє його попередник Intel 8080, де стандартний формат мови складання мав регістри, керовані інструкцією, закодованою як частина мнемонічного, а не подані як аргументи.
Жуль

Правда - Z80 типовий для 8-бітових мікрокодованих процесорів таким чином. 6502 мав більш логічне відображення коду, що дозволило оптимізувати схему декодування. Але я конкретно говорив про 68K, який має в своїх інструкціях дуже чіткі поля адресного режиму та регістру призначення. Якщо відняти ці, поле опкоду все ще може бути ширшим, ніж шина даних 68008.
Хроматикс

1

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

Отже, відповідь на розміщене запитання - 574 оп-коди, оскільки PDP-8 мав 284 оп-коду, а Ед лише наполовину божевільний.


2
Не впевнений, чому потік - це така ж відповідь, як і будь-яка, з огляду на те, що питання по суті безглуздо. :)
Жуль

Я підозрюю, що скоромовка є тому, що 284 * 2 = 568, а не 574.
Марк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.