Mục lục bài họcĐang ở d04-b2
← A-Level Computer Science
0/30 bài đã học xong
Chương 4 · Hardware and Processor Fundamentals · Bài 2/3 của chương · bài 11/30 của A-Level Computer Science

The fetch-decode-execute cycle and interrupts

Chu trình nạp – giải mã – thực hiện và cơ chế ngắt
← Mục lục bài học
Lý thuyết · English

The cycle, in register transfer terms

Learn it as a sequence of register transfers, because that is how it is marked:

$\text{MAR} \leftarrow [\text{PC}]$ — copy the next address into MAR
$\text{PC} \leftarrow [\text{PC}] + 1$ — increment ready for the following instruction
$\text{MDR} \leftarrow [[\text{MAR}]]$ — fetch the contents of that memory location
$\text{CIR} \leftarrow [\text{MDR}]$ — move the instruction into the CIR
then decode the opcode in the control unit, and execute.

Why PC is incremented so early

Incrementing before execution means a jump instruction can simply overwrite the PC during execute, and the cycle continues correctly from the new address. Explaining this is a standard three-mark answer.

Interrupts

An interrupt is a signal from hardware or software requesting the processor's attention — a key press, a completed disk transfer, a division by zero. At the end of the current cycle the processor checks the interrupt register. If an interrupt is present and has higher priority than the current task, the processor pushes the contents of the registers (the process state) onto the stack, loads the address of the appropriate interrupt service routine, runs it, then pops the saved state back and resumes.

Two details that earn marks

First, the check happens at the end of a cycle, not mid-instruction — otherwise the machine state would be inconsistent. Second, saving to a stack is what allows nested interrupts: a higher-priority interrupt can interrupt an interrupt, and the last-in-first-out order restores everything correctly.

Giải thích tiếng Việt

Chu trình, viết dưới dạng chuyển thanh ghi

Hãy học nó như một chuỗi phép chuyển giữa các thanh ghi, vì biểu điểm chấm đúng theo cách đó:

$\text{MAR} \leftarrow [\text{PC}]$ — chép địa chỉ lệnh kế tiếp vào MAR
$\text{PC} \leftarrow [\text{PC}] + 1$ — tăng lên sẵn cho lệnh sau đó
$\text{MDR} \leftarrow [[\text{MAR}]]$ — nạp nội dung của ô nhớ đó
$\text{CIR} \leftarrow [\text{MDR}]$ — chuyển lệnh vào CIR
rồi giải mã mã lệnh trong khối điều khiển, và thực hiện.

Vì sao PC được tăng sớm như vậy

Tăng PC trước khi thực hiện nghĩa là một lệnh nhảy chỉ cần ghi đè lên PC trong pha thực hiện, và chu trình tiếp tục đúng từ địa chỉ mới. Giải thích được điều này là một câu ba điểm quen thuộc.

Ngắt

Ngắt là tín hiệu từ phần cứng hoặc phần mềm yêu cầu bộ xử lý chú ý — một phím được nhấn, một lượt truyền đĩa hoàn tất, một phép chia cho $0$. Vào cuối chu trình hiện tại, bộ xử lý kiểm tra thanh ghi ngắt. Nếu có ngắt và ngắt đó ưu tiên cao hơn tác vụ đang chạy, bộ xử lý đẩy nội dung các thanh ghi (trạng thái tiến trình) vào ngăn xếp, nạp địa chỉ của trình phục vụ ngắt tương ứng, chạy nó, rồi lấy trạng thái đã lưu ra và tiếp tục.

Hai chi tiết ăn điểm

Thứ nhất, việc kiểm tra xảy ra ở CUỐI một chu trình chứ không phải giữa chừng một lệnh — nếu không, trạng thái máy sẽ không nhất quán. Thứ hai, lưu vào ngăn xếp chính là thứ cho phép ngắt lồng nhau: một ngắt ưu tiên cao hơn có thể ngắt một ngắt đang chạy, và thứ tự vào sau ra trước khôi phục lại mọi thứ đúng trật tự.

Ví dụ — truy vết chu trình và một lệnh nhảy

Bộ nhớ chứa: địa chỉ $100$: LDD 200; $101$: ADD 201; $102$: JMP 100. Ô $200$ chứa $7$, ô $201$ chứa $5$. PC bắt đầu bằng $100$, ACC bằng $0$.

Truy vết ba chu trình đầu tiên, nêu giá trị PC, CIR và ACC sau mỗi chu trình.

Giải.

Chu trình 1.

$\text{MAR}\leftarrow100$; $\text{PC}\leftarrow101$; $\text{MDR}\leftarrow$ LDD 200; $\text{CIR}\leftarrow$ LDD 200.

Giải mã: nạp trực tiếp nội dung ô $200$ vào ACC ⇒ $\text{ACC}=7$.

Sau chu trình: $\text{PC}=101$, $\text{CIR}=$LDD 200, $\text{ACC}=7$.

Chu trình 2.

$\text{MAR}\leftarrow101$; $\text{PC}\leftarrow102$; $\text{CIR}\leftarrow$ADD 201.

Thực hiện: $\text{ACC}=7+5=12$.

Sau chu trình: $\text{PC}=102$, $\text{ACC}=12$.

Chu trình 3 — chỗ quan trọng.

$\text{MAR}\leftarrow102$; $\text{PC}\leftarrow103$ (vẫn tăng như thường lệ!); $\text{CIR}\leftarrow$JMP 100.

Thực hiện: lệnh nhảy ghi đè PC ⇒ $\text{PC}=100$.

Sau chu trình: $\text{PC}=100$, $\text{ACC}=12$.

Điều cần rút ra. PC vẫn được tăng lên $103$ ở pha nạp rồi mới bị ghi đè thành $100$ ở pha thực hiện. Chính vì việc tăng PC diễn ra SỚM và độc lập mà khối điều khiển không cần biết trước lệnh này có phải lệnh nhảy hay không — nó cứ nạp, tăng, rồi để pha thực hiện quyết định. Chu trình tiếp theo sẽ chạy lại từ $100$, tạo thành vòng lặp vô hạn cộng dồn $5$ vào ACC.

Bẫy hay mất điểm — Viết PC được tăng SAU khi thực hiện lệnh. Nếu vậy thì mọi lệnh nhảy sẽ bị PC ghi đè ngược lại và không lệnh nhảy nào hoạt động được. Thứ tự đúng là: chép PC vào MAR, tăng PC, rồi mới nạp và thực hiện.
Phải nhớ — Học chu trình dưới dạng bốn phép chuyển thanh ghi, giải thích được vì sao PC tăng sớm, và với ngắt thì nhớ hai chi tiết: kiểm tra ở cuối chu trình, và lưu trạng thái vào ngăn xếp để ngắt lồng nhau vẫn khôi phục đúng.

Đọc xong rồi — làm thử ngay

Bài tập của chương Hardware and Processor Fundamentals gồm 14 câu trắc nghiệm và 3 đề tự luận. Đáp án hiện ngay khi chọn, miễn phí.

Làm bài tập chương →