Kiến trúc máy tính – Bài 2: CPU thực hiện phép tính 5 + 3 như thế nào?
- 19-10-2026
- Toanngo92
- 0 Comments
Thay vì học thuộc tên thanh ghi, hãy theo dõi một phép cộng từ lúc lấy lệnh đến khi lưu kết quả. Qua ví dụ 5 + 3, bạn sẽ hiểu vai trò của ALU, thanh ghi, đơn vị điều khiển và chu kỳ lệnh.
Dành cho người mới: đọc ví dụ trước, sau đó đối chiếu với sơ đồ và thuật ngữ. Các mô hình đơn giản trong bài dùng để học nguyên lý, không mô tả đầy đủ mọi CPU hay hệ điều hành.

Mục lục
Một CPU minh họa rất nhỏ
Ta giả sử một máy học tập có thanh ghi tích lũy ACC, bộ đếm chương trình PC và thanh ghi lệnh IR. ACC giữ giá trị đang tính; PC giữ địa chỉ dùng để lấy lệnh tiếp theo trong mô hình; IR giữ lệnh vừa lấy để giải mã. ALU làm phép cộng, trừ và các phép logic. CU phát tín hiệu để các bước diễn ra theo đúng thứ tự.
ACC, LOAD, ADD và STORE dưới đây thuộc mô hình minh họa, không phải mã lệnh x86 hoặc ARM có thể chạy nguyên văn. Địa chỉ và giá trị cũng chỉ dùng cho ví dụ.
Chương trình cộng hai số
Ô dữ liệu 100 chứa 5
Ô dữ liệu 101 chứa 3
Ô dữ liệu 102 dùng lưu kết quả
Địa chỉ lệnh 0: LOAD 100
Địa chỉ lệnh 1: ADD 101
Địa chỉ lệnh 2: STORE 102
Địa chỉ lệnh 3: HALTLOAD 100 nghĩa là đọc nội dung ô 100 vào ACC, không phải đặt số 100 vào ACC. ADD 101 cộng nội dung ô 101 với ACC. STORE 102 ghi giá trị ACC xuống ô 102. HALT kết thúc mô phỏng; trong hệ thống thật việc dừng chương trình và trạng thái CPU còn phụ thuộc hệ điều hành và tập lệnh.
Theo dõi giá trị thay đổi từng bước
| Bước | Lệnh | ACC sau thực hiện | Ô 102 | PC sau bước |
|---|---|---|---|---|
| Ban đầu | Chưa thực hiện | 0 | Chưa dùng | 0 |
| 1 | LOAD 100 | 5 | Chưa dùng | 1 |
| 2 | ADD 101 | 8 | Chưa dùng | 2 |
| 3 | STORE 102 | 8 | 8 | 3 |
| 4 | HALT | 8 | 8 | Dừng mô phỏng |
Bảng giúp phân biệt dữ liệu đang ở thanh ghi và dữ liệu đã được ghi vào bộ nhớ. Sau ADD, ta có 8 trong ACC; đến STORE, kết quả mới được ghi vào ô 102. Đọc lại ô 100 vẫn được 5 vì chương trình chưa sửa ô đó.
Ở đây PC tăng 1 vì ta quy ước mỗi lệnh chiếm một ô lệnh. CPU thật tăng địa chỉ theo độ dài lệnh; lệnh nhảy, gọi hàm hoặc ngoại lệ có thể làm thay đổi luồng thực hiện. Không được áp dụng PC + 1 cho mọi kiến trúc.
Chu kỳ lấy lệnh – giải mã – thực thi
- Lấy lệnh: dùng địa chỉ lệnh để đọc mã lệnh vào CPU.
- Giải mã: nhận ra cần nạp, cộng, lưu hay thay đổi luồng chương trình.
- Lấy toán hạng: xác định giá trị đầu vào nằm ở đâu.
- Thực thi và ghi kết quả: thực hiện phép toán hoặc thao tác dữ liệu cần thiết.
Trong mô hình thanh ghi truyền thống, MAR giữ địa chỉ truy cập bộ nhớ; MDR, đôi khi gọi MBR, giữ dữ liệu trao đổi. Bạn có thể xem chúng là hai nhãn “đọc ở đâu?” và “đọc được gì?”. Chúng giúp mô tả nguyên lý, không có nghĩa ứng dụng thông thường được quyền đọc, ghi trực tiếp các thanh ghi nội bộ này.
Một lệnh máy có thể cần nhiều bước nhỏ. Mỗi bước không nhất thiết bằng một chu kỳ xung nhịp, và một lệnh cũng không nhất thiết hoàn thành trong một nhịp. CPU hiện đại có thể chồng lấp các giai đoạn của nhiều lệnh.
Toán hạng nằm ở đâu?
| Cách minh họa | Ý nghĩa | Giá trị nhận được |
|---|---|---|
| Hằng trực tiếp: #5 | Dùng chính số viết trong lệnh. | 5 |
| Thanh ghi: R1 | Dùng giá trị đang ở R1. | Nếu R1 = 5 thì được 5. |
| Bộ nhớ: [100] | Dùng nội dung ô nhớ có địa chỉ 100. | Nếu ô 100 chứa 5 thì được 5. |
| Gián tiếp: [R1] | Dùng R1 làm địa chỉ để đọc bộ nhớ. | Nếu R1 = 100, đọc nội dung ô 100. |
Ký hiệu trên chỉ phục vụ so sánh. Sai lầm phổ biến là nhầm địa chỉ với giá trị: một ô nhớ có địa chỉ 100 hoàn toàn có thể chứa 5, chứ không phải 100. Địa chỉ cơ sở cộng độ dời giúp truy cập các phần tử của mảng; cách mã hóa cụ thể phụ thuộc tập lệnh.
ALU, cờ trạng thái và luồng điều khiển
Ngoài cộng và trừ, ALU thường tham gia các phép AND, OR, XOR, dịch và so sánh. Kết quả có thể làm thay đổi cờ trạng thái. Ví dụ Zero cho biết kết quả bằng 0 trong mô hình đang học; cờ Carry liên quan phép toán không dấu, còn Overflow liên quan tràn số có dấu. Hai cờ này không đồng nghĩa.
Với số có dấu 8 bit, 127 + 1 vượt phạm vi −128 đến 127. Chuỗi bit kết quả trong phép cộng 8 bit là 10000000; nếu diễn giải bù 2 thì là −128. Đây là ví dụ vì sao phải quan tâm độ rộng và kiểu số, không phải phép cộng toán học 127 + 1 bằng −128.
Các lệnh nhảy có điều kiện sử dụng kết quả so sánh hoặc trạng thái để chọn nhánh. Điều kiện if và vòng lặp trong chương trình cấp cao cuối cùng cần cơ chế điều khiển luồng tương ứng, dù cách dịch cụ thể có thể khác nhau.
RISC, CISC và điều người mới cần nhớ
RISC và CISC là các hướng thiết kế tập lệnh. Không thể kết luận CPU nào nhanh hơn hoặc tiết kiệm điện hơn chỉ bằng hai nhãn này. Hiệu năng còn phụ thuộc cách triển khai, bộ nhớ, phần mềm và loại công việc.
Tự kiểm tra: nếu đổi ô 101 từ 3 thành 7, ACC sau ADD và ô 102 sau STORE sẽ bằng bao nhiêu? Nếu bỏ STORE, ô 102 có tự nhận kết quả không? Bạn chỉ cần theo bảng, không cần cài công cụ mô phỏng.
Những điều cần nhớ
- Thanh ghi giữ dữ liệu CPU đang sử dụng trực tiếp; ALU thực hiện phép toán; CU tổ chức các bước.
- Phải phân biệt địa chỉ và nội dung tại địa chỉ đó.
- Chu kỳ lệnh là mô hình học nguyên lý; CPU hiện đại có cách triển khai phức tạp hơn.

