08/10 Một lệnh được CPU thực thi như thế nào? Các chương

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?

  1. RAM 0010 0011 ô nhớ 01
  2. Thanh ghi lệnh (IR) 0010 0011 lệnh vừa lấy về
  3. Khối điều khiển 0010 = ADD 0011 = số 3
  4. ALU 5 + 3 = 8 ghi vào R0
Cùng tám bit 0010 0011 đi qua 4 chặng. Tới chặng cuối, ALU mới biết phải cộng.

Ở 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:

  1. tìm đúng lệnh,
  2. lấy nó ra,
  3. biết 0010 nghĩa là phép cộng,
  4. đưa 53 vào ALU,
  5. ghi kết quả 8 trở 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ơ đồ.

Theo dấu lệnh ADD 3 đi qua CPU
  1. 1 LẤY LỆNH Fetch
  2. 2 GIẢI MÃ Decode
  3. 3 THỰC THI Execute

BỘ NHỚ

00 LOAD 5 0001 0101
01 ADD 3 0010 0011
02 STORE 8 0011 1000
08 dữ liệu 0
Bộ đếm chương trình PC 01 địa chỉ lệnh sắp lấy
Thanh ghi lệnh IR mã thao táctoán hạng
Khối điều khiển Control Unit
Phép ALU
Đầu vào A
Đầu vào B
Ghi kết quả
Khối số học và logic ALU
Thanh ghi R0 5

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ì?