Thanh ghi

Trong kiến trúc máy tính, một thanh ghi (registers) là một bộ nhớ dung lượng nhỏ và rất nhanh được sử dụng để tăng tốc độ xử lý của các chương trình máy tính bằng cách cung cấp các truy cập trực tiếp đến các giá trị cần dùng. Hầu hết, nhưng không phải tất cả, các máy tính hiện đại hoạt động theo nguyên lý chuyển dữ liệu từ bộ nhớ chính vào các thanh ghi, tính toán trên chúng, sau đó chuyển kết quả vào bộ nhớ chính.

Các thanh ghi xử lý là phần đầu tiên của phân cấp bộ nhớ, và cung cấp nhanh nhất vào hệ thống để xử lý dữ liệu. Thuật ngữ này thường được dùng để nói đến một tập các thanh ghi có thể được chỉ trực tiếp cho việc nhập hay xuất các câu lệnh, xem thêm ở tập lệnh. Chúng được gọi là "kiến trúc thanh ghi". Ví dụ,

Đưa các biến số thường dùng vào thanh ghi là một hoạt động then chốt làm tăng hiệu ứng của chương trình. Việc này có tên là register allocation và thường được thực hiện bởi một trình biên dịch trong giai đoạn phát sinh mã hoá.

## Kích cỡ
Thanh ghi thường được đo bằng các bit nó có thể chứa, ví dụ, một thanh ghi "8-bit" hay thanh ghi "32-bit". Các thanh ghi hiện nay thường được xem như file thanh ghi - register file, nhưng chúng cũng được dùng riêng rẽ các *[[flip-flop]]*, tốc độ cao core memory, thin film memory, và các cách khác trong nhiều máy móc.

## Phân loại
Có một số phân lớp các thanh ghi tùy theo nội dung:
* **Thanh ghi khả hiện** - Có hai loại. Thanh ghi dữ liệu và thanh ghi địa chỉ.
* **Thanh ghi dữ liệu** được dùng để lưu số nguyên (xem thanh ghi số thực dưới đây). Trong một số bộ CPU hiện nay và trước đây, có một thanh ghi đặc biệt là thanh ghi tích lũy tích lũy, được dùng cho nhiều tính toán.
* **Thanh ghi địa chỉ** chứa địa chỉ bộ nhớ và được dùng để truy cập bộ nhớ. Trong một số CPU, có một thanh ghi địa chỉ đặc biệt thanh ghi chỉ mục, dù chúng thường được dùng để sửa đổi địa chỉ hơn là chứa địa chỉ.
* Thanh ghi điều kiện chứa giá trị thực thường dùng để quyết định hoật động thực thi lệnh
* Thanh ghi đa năng (GPRs) có thể chứa cả dữ liệu lẫn địa chỉ., là kết hợp giữa thanh ghi dữ liệu và thanh ghi địa chỉ
* Thanh ghi dấu phẩy động (FPRs) dùng để chứa các kiểu số
* Thanh ghi hằng số chứa các giá trị đọc được (Ví dụ: 0, 1, pi,...).
* Thanh ghi định hướng chứa dữ liệu cho việc xử lý định hướng đối tượng, thực hiện bởi lệnh SIMD (lệnh đơn, bội dữ kiện)
* Thanh ghi chuyên biệt chứa trạng thái chương trình; thường bao gồm con trỏ chỉ lệnh, con trỏ ngăn xếp, và thanh ghi trạng thái.
* Thanh ghi chỉ lệnh chứa lệnh tạm huỷ
* Thanh ghi chỉ mục dùng cho sửa đổi địa chỉ tác tử trong quá trình thực hiện 1 chương trình
* Trong một số cấu trúc, thanh ghi kiểu mẫu (còn được gọi là thanh ghi thiết bị riêng biệt) chứa dữ liệu và thiết lập liên quan đến bộ xử lý. Vì các thanh ghi này được thiết kế gắn liền với bộ xử lý đặc trưng nên chúng không thể giữ nguyên chuẩn qua các thế hệ của bộ xử lý.
* Thanh ghi điều khiển và trạng thái – Có ba loại: chương trình phản hồi, thanh ghi chỉ lệnh, chương trình trạng thái từ.
* Thanh ghi liên quan đến tìm nạp thông tin từ bộ nhớ truy cập ngẫu nhiên (RAM), 1 tập hợp lưu giữ các thanh ghi được định vị trên các chip riêng biệt từ CPU (không giống đa số các loại trên, đây thông thường là những thanh ghi không có cấu trúc): 
** Thanh ghi bộ nhớ trung gian
** Thanh ghi bộ nhớ địa chỉ
** Thanh ghi bộ nhớ kiểu miền

Thanh ghi ổ cứng cũng tương tự nhưng ở ngoài CPU

## Ví dụ
Bảng dưới đây hiển thị số lượng thanh ghi của vài bộ vi xử lý chính hiện nay:

## Tham khảo