Nếu bạn có một cái nhìn về tập lệnh của bộ xử lý, có một số cách để nhóm chúng. Ví dụ: tất cả các ADD
hướng dẫn có thể được nhóm lại với nhau và tất cả các XOR
hướng dẫn.
Trong mỗi nhóm của cùng một hướng dẫn, có thể có các phiên bản hoạt động trên bộ nhớ hoặc trên các thanh ghi. Chính nhóm phụ này xác định hiệu quả số lượng thanh ghi mà bộ xử lý có.
Như một ví dụ giả thuyết 8 bit, giả sử các $Ax
hướng dẫn có thể là ADD
hướng dẫn và $Cx
có thể là XOR
hướng dẫn. Với thiết kế này, chỉ còn bốn bit để xác định toán hạng!
- Một có thể chỉ có bốn thanh ghi mục đích chung và sử dụng hai bit để xác định một và hai bit để xác định thanh ghi kia.
- Hoặc, người ta có thể sử dụng bit đầu tiên để phân biệt các biến thể "đặc biệt" và 3 bit còn lại để xác định tám thanh ghi nào hoạt động với bộ tích lũy (
$x0
có thể là chính bộ tích lũy).
- Hoặc, người ta có thể có nhiều hơn số lượng thanh ghi này - nhưng sau đó giới hạn các thanh ghi nào có thể truy cập được theo hướng dẫn nào.
Tất nhiên, chúng ta đã qua các tập lệnh 8 bit. Tuy nhiên, logic này đã giúp xác định các bộ đăng ký trong quá khứ - nó sẽ tiếp tục làm như vậy trong tương lai.
EDIT (theo yêu cầu)
Nói top bốn bit là dành cho các hướng dẫn: ADD
, SUB
, XOR
, MOV
, CMP
vv Có 16 khả năng đây. Sau đó, đối với những hướng dẫn trong đó đăng ký để đăng ký có ý nghĩa (ví dụ ADD Rx,Ry
), bạn cần chỉ định Rx
và Ry
. Nói hai bit tiếp theo là cho x
, và hai bit cuối cùng là cho y
. Như vậy:
ADD R1, R2 => 'ADD' + 'R1' + 'R2' => $A0 + $04 + $02
Chỉ với hai bit để xác định một thanh ghi như thế này, bạn chỉ có đủ chỗ cho tổng số bốn thanh ghi!
Bên cạnh, bạn sẽ lưu ý rằng một số kết hợp đăng ký không có ý nghĩa. Ví dụ: MOV Rx, Rx
(không làm gì) và SUB Rx, Rx
(luôn luôn tạo ra 0
). Đây có thể trở thành hướng dẫn trường hợp đặc biệt:
SUB Rx, Rx
có thể trở thành NOT Rx
- một lệnh toán hạng đơn.
MOV Rx, Rx
có thể trở thành một MOV
lệnh lấy byte thứ hai làm giá trị ngay lập tức, được hiểu là MOV Rx, #$yy
.
Theo cách này, bạn có thể "chơi" với bản đồ hướng dẫn, điền vào các lỗ cho các hướng dẫn vô dụng hoặc vô nghĩa để cung cấp một tập lệnh lớn hơn cho lập trình viên. Nhưng cuối cùng, tập lệnh sẽ định nghĩa tập đăng ký.