Якщо ви ознайомилися з набором інструкцій процесора, існує кілька способів їх групування. Наприклад, всі ADD
інструкції можуть бути згруповані разом, і всі XOR
інструкції.
У межах кожної групи однієї інструкції можуть бути версії, які працюють на пам'яті або на регістрах. Саме ця підгрупа ефективно визначає кількість регістрів, які має процесор.
Як 8-розрядний гіпотетичний приклад, скажімо, що $Ax
інструкції можуть бути ADD
інструкціями, а $Cx
можуть бути XOR
інструкціями. У цій конструкції для визначення операндів залишилося лише чотири біти!
- Один може мати лише чотири регістри загального призначення та використовувати два біти для визначення одного, а два біти - для визначення іншого.
- Або можна використати перший біт для розрізнення "спеціальних" варіантів, а інші 3 біти, щоб визначити, який з восьми регістрів працювати з акумулятором (
$x0
може бути самим акумулятором).
- Або може бути більше, ніж ця кількість реєстрів - але тоді обмежте, які регістри доступні, якими вказівками.
Звичайно, ми минули 8-бітові набори інструкцій. Але все-таки ця логіка допомогла визначити набори реєстрів у минулому - вона буде продовжувати це робити і в майбутньому.
EDIT (за запитом)
Скажімо , у верхній чотири біта для команди: ADD
, SUB
, XOR
, MOV
, і CMP
т.д. Є 16 можливостей тут. Тоді, для тих інструкцій, де зареєструватися має сенс (наприклад ADD Rx,Ry
), потрібно вказати Rx
і Ry
. Скажіть, що наступні два біти призначені для x
, а останні два - для y
. Таким чином:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
Маючи лише два біти для визначення такого регістра, у вас є лише місце для загальної кількості чотирьох регістрів!
У бік відзначимо, що деякі комбінації регістрів не мають сенсу. Наприклад, MOV Rx, Rx
(нічого не робить) і SUB Rx, Rx
(завжди виробляє 0
). Вони можуть стати вказівками щодо особливих випадків:
SUB Rx, Rx
міг стати NOT Rx
- однооперандна інструкція.
MOV Rx, Rx
може стати MOV
інструкцією, яка приймає другий байт як безпосереднє значення, інтерпретується як MOV Rx, #$yy
.
Таким чином, ви можете "грати" з картою інструкцій, заповнюючи отвори для інакше непотрібних чи -нечутливих інструкцій, щоб забезпечити більший набір інструкцій для програміста. Але в кінцевому підсумку, набір інструкцій визначає набір регістрів.