Jika Anda melihat kumpulan instruksi prosesor, ada beberapa cara untuk mengelompokkannya. Misalnya, semua ADD
instruksi dapat dikelompokkan bersama, dan semua XOR
instruksi.
Dalam setiap grup dari instruksi yang sama, mungkin ada versi yang beroperasi pada memori, atau pada register. Sub-pengelompokan inilah yang secara efektif menentukan jumlah register yang dimiliki prosesor.
Sebagai contoh hipotetis 8-bit, misalkan $Ax
instruksinya mungkin ADD
instruksinya, dan $Cx
mungkin XOR
instruksinya. Dengan desain ini, hanya ada empat bit yang tersisa untuk menentukan operan!
- Seseorang mungkin hanya memiliki empat register tujuan umum, dan menggunakan dua bit untuk mendefinisikan satu, dan dua bit untuk mendefinisikan yang lain.
- Atau, seseorang mungkin menggunakan bit pertama untuk membedakan varian "khusus", dan 3 bit lainnya untuk menentukan yang mana dari delapan register yang beroperasi dengan akumulator (
$x0
bisa juga akumulator itu sendiri).
- Atau, seseorang dapat memiliki lebih dari jumlah register ini - tetapi kemudian batasi register mana yang dapat diakses oleh instruksi mana.
Tentu saja, kita melewati set instruksi 8-bit. Tapi tetap saja, logika ini membantu mendefinisikan set register di masa lalu - itu akan terus melakukannya di masa depan.
EDIT (seperti yang diminta)
Mengatakan empat bit untuk instruksi: ADD
, SUB
, XOR
, MOV
, CMP
dll Ada 16 kemungkinan di sini. Kemudian, untuk instruksi-instruksi itu di mana register-to-register masuk akal (misalnya ADD Rx,Ry
), Anda perlu menentukan Rx
dan Ry
. Katakanlah dua bit berikutnya adalah untuk x
, dan dua bit terakhir adalah untuk y
. Jadi:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
Dengan hanya dua bit untuk mendefinisikan register seperti ini, Anda hanya memiliki ruang untuk total empat register!
Sebagai tambahan, Anda akan mencatat bahwa beberapa kombinasi register tidak masuk akal. Misalnya, MOV Rx, Rx
(tidak melakukan apa-apa) dan SUB Rx, Rx
(selalu menghasilkan 0
). Ini bisa menjadi instruksi kasus khusus:
SUB Rx, Rx
bisa menjadi NOT Rx
- instruksi operan tunggal.
MOV Rx, Rx
bisa menjadi MOV
instruksi yang menggunakan byte kedua sebagai nilai langsung, diartikan sebagai MOV Rx, #$yy
.
Dengan cara ini Anda dapat "bermain" dengan peta instruksi, mengisi lubang untuk instruksi yang tidak berguna atau tidak masuk akal untuk memberikan set instruksi yang lebih besar untuk programmer. Tetapi pada akhirnya, set instruksi mendefinisikan set register.