Một lệnh được CPU thực thi như thế nào?
0010 0011 chỉ là tám bit trong RAM. Làm sao CPU lấy nó ra, biết phải cộng 3, rồi thực hiện phép cộng?
- RAM 0010 0011 ô nhớ 01
- Thanh ghi lệnh (IR) 0010 0011 lệnh vừa lấy về
- Khối điều khiển 0010 = ADD 0011 = số 3
- ALU 5 + 3 = 8 ghi vào R0
Ở bài trước, ADD 3 đã trở thành:
0010 0011
và được đặt vào RAM.
Nhưng tám bit nằm trong RAM chưa làm được gì cả. CPU phải:
- tìm đúng lệnh,
- lấy nó ra,
- biết
0010nghĩa là phép cộng, - đưa
5và3vào ALU, - ghi kết quả
8trở lại.
Ta theo dõi đúng một lệnh ADD 3 để xem chuyện đó xảy ra thế nào.
Hai thanh ghi giúp CPU theo dõi lệnh
Giả sử lúc này:
R0 = 5
RAM[01] = ADD 3
= 0010 0011
CPU cần biết phải đọc ô 01. Nó giữ địa chỉ đó trong bộ đếm chương trình (Program Counter, PC):
PC = 01
CPU còn có một thanh ghi lệnh (Instruction Register, IR) để giữ lệnh đang được thực thi. Nhờ vậy, lệnh đang chạy được giữ ổn định trong CPU, trong khi PC có thể chuyển sang địa chỉ tiếp theo.
Ban đầu:
PC = 01
IR = —
R0 = 5
Bây giờ cho CPU chạy đúng một lệnh. Bấm lần lượt ba nút và đọc câu giải thích dưới sơ đồ.
- 1 LẤY LỆNH Fetch
- 2 GIẢI MÃ Decode
- 3 THỰC THI Execute
BỘ NHỚ
- Phép ALU
- —
- Đầu vào A
- —
- Đầu vào B
- —
- Ghi kết quả
- —
Ba bước vừa xảy ra
CPU vừa làm ba việc:
LẤY LỆNH
RAM[01] → IR
PC: 01 → 02
GIẢI MÃ
0010 → ADD
0011 → 3
THỰC THI
5 + 3 → 8
R0 = 8
Ba bước này thường được gọi bằng tên tiếng Anh:
Fetch → Decode → Execute.
Mọi lệnh đều đi qua đúng ba bước đó. Chạy xong một lệnh, CPU quay lại bước một với lệnh mà PC đang trỏ tới: STORE 8 ở ô 02.
Ba lệnh của phép 5 + 3 vì thế là ba vòng như vậy. Hết lệnh thì chương trình dừng.
CPU không hiểu lệnh như con người
Trong mô phỏng ta viết chữ ADD để dễ nhìn. Bên trong chip không có chữ ADD.
CPU không nhìn 0010 rồi hiểu khái niệm cộng. Nó chỉ có các mạch điện.
Một tổ hợp bit đi vào khối điều khiển sẽ làm một nhóm tín hiệu bật lên. Những tín hiệu đó mở đúng đường dữ liệu, chọn đúng chức năng của ALU và cho kết quả đi tới đúng nơi.
Ở những bài trước, ta đã đi qua:
transistor
↓
cổng logic
↓
ALU
Bây giờ ta thêm một lớp nữa:
mã máy
↓
khối điều khiển
↓
tín hiệu điều khiển
↓
ALU và các thanh ghi
Vì vậy một dãy bit có thể khiến phần cứng làm đúng một việc cụ thể.
Xem trạng thái CPU sau từng pha
PC luôn đi trước một ô: nó là địa chỉ của lệnh sắp lấy, còn IR mới là lệnh đang chạy.
| Pha | Lệnh đang chạy | PC | IR | R0 | Ô 08 |
|---|---|---|---|---|---|
| — | chưa chạy | 00 | — | 0 | 0 |
| Lấy lệnh | LOAD 5 | 01 | 0001 0101 |
0 | 0 |
| Giải mã | LOAD 5 | 01 | 0001 0101 |
0 | 0 |
| Thực thi | LOAD 5 | 01 | 0001 0101 |
5 | 0 |
| Lấy lệnh | ADD 3 | 02 | 0010 0011 |
5 | 0 |
| Giải mã | ADD 3 | 02 | 0010 0011 |
5 | 0 |
| Thực thi | ADD 3 | 02 | 0010 0011 |
8 | 0 |
| Lấy lệnh | STORE 8 | 03 | 0011 1000 |
8 | 0 |
| Giải mã | STORE 8 | 03 | 0011 1000 |
8 | 0 |
| Thực thi | STORE 8 | 03 | 0011 1000 |
8 | 8 |
Trong chip thật, không ai bấm nút
Trong mô phỏng, mỗi lần bạn bấm nút là ta cho CPU chuyển sang trạng thái tiếp theo.
Trong chip thật không có người bấm. Các thanh ghi và mạch được điều phối bởi một tín hiệu nhịp gọi là xung nhịp (clock).
TinyCPU cố tình chia mọi thứ thành ba bước tách bạch để ta dễ nhìn. CPU hiện đại có thể chồng các bước đó lên nhau và chia nhỏ chúng phức tạp hơn nhiều.
Vậy xung nhịp được tạo ra thế nào, và GHz thực sự có nghĩa gì?