Якщо ви ознайомилися з набором інструкцій процесора, існує кілька способів їх групування. Наприклад, всі 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.
Таким чином, ви можете "грати" з картою інструкцій, заповнюючи отвори для інакше непотрібних чи -нечутливих інструкцій, щоб забезпечити більший набір інструкцій для програміста. Але в кінцевому підсумку, набір інструкцій визначає набір регістрів.