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 ADDhướng dẫn có thể được nhóm lại với nhau và tất cả các XORhướ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 $Axhướng dẫn có thể là ADDhướng dẫn và $Cxcó thể là XORhướ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 (
$x0có 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, CMPvv 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 Rxvà 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, Rxcó thể trở thành NOT Rx- một lệnh toán hạng đơn.
MOV Rx, Rxcó thể trở thành một MOVlệ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ý.