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?

Tám bit trong RAM trở thành một phép cộng thế nào?

  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 5 và 3 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.

Xung nhịp của CPU được tạo ra thế nào?

Nguồn bài viết (2)

  1. This Day in History: June 30 (First Draft of a Report on the EDVAC) · Computer History Museum
  2. CPU Speed: What Is CPU Clock Speed? · Intel