Khái niệm tiến trình thực hiện lệnh máy:
Một phần mềm khi chạy thực chất là một chuỗi liên tiếp các dòng mã lệnh máy nhị phân nằm trong bộ nhớ RAM.
Để chạy được chương trình, CPU phải lần lượt lấy từng câu lệnh về, tìm hiểu xem lệnh đó yêu cầu làm gì, sau đó thực hiện lệnh và lưu kết quả.
Toàn bộ quá trình xử lý trọn vẹn một câu lệnh đơn lẻ được gọi là Chu trình lệnh (Instruction Cycle) hay chu trình Nạp – Thực thi (Fetch-Execute Cycle).
Chu trình này diễn ra tuần hoàn, lặp đi lặp lại hàng triệu đến hàng tỷ lần mỗi giây chừng nào máy tính còn hoạt động.
Sơ đồ 4 giai đoạn chuẩn của một chu trình lệnh:
2.2.1.1. Giai đoạn tìm nạp lệnh (Instruction Fetch – IF)
Mục đích của giai đoạn:
Đưa được dòng mã lệnh nhị phân cần chạy tiếp theo từ bộ nhớ chính (RAM) nạp vào bên trong CPU.
Chuẩn bị sẵn địa chỉ của lệnh kế tiếp sau đó để không làm gián đoạn chuỗi chạy chương trình.
Trình tự các bước thực hiện:
Bước 1: CPU lấy địa chỉ đang được giữ trong thanh ghi đếm chương trình (Program Counter – PC) chuyển sang thanh ghi địa chỉ bộ nhớ (MAR).
Bước 2: Tín hiệu địa chỉ từ MAR được đẩy ra tuyến Bus địa chỉ (Address Bus) để trỏ đến đúng ô nhớ chứa lệnh trong RAM.
Bước 3: Khối điều khiển (CU) phát tín hiệu điều khiển “Đọc bộ nhớ” (Memory Read) trên tuyến Bus điều khiển.
Bước 4: Nội dung ô nhớ (từ mã lệnh) được xuất ra tuyến Bus dữ liệu (Data Bus), chạy vào thanh ghi đệm dữ liệu (MDR).
Bước 5: Từ thanh ghi MDR, mã lệnh được chuyển thẳng vào thanh ghi lệnh (Instruction Register – IR) và khóa cố định tại đây.
Bước 6: Giá trị của thanh ghi PC tự động cộng thêm độ dài của từ lệnh (ví dụ tăng thêm 1 hoặc các byte tương ứng) để trỏ sẵn tới ô nhớ của lệnh tiếp theo.
Ví dụ trực quan:
Giả sử thanh ghi
PCđang giữ con số0200(địa chỉ ô nhớ0200trong RAM).CPU gửi tín hiệu ra bus địa chỉ đòi đọc dữ liệu tại ô
0200.Ô
0200gửi về một chuỗi nhị phân (chẳng hạn mã của lệnh cộngADD 05).Chuỗi mã này được cất ngay ngắn vào thanh ghi lệnh
IR.Thanh ghi
PCtự động nhảy lên thành0201để sẵn sàng cho lệnh sau.
2.2.1.2. Giai đoạn giải mã lệnh (Instruction Decode – ID)
Mục đích của giai đoạn:
“Đọc hiểu” ý nghĩa của câu lệnh vừa đem về nằm trong thanh ghi IR.
Xác định chính xác CPU phải làm phép tính gì và dữ liệu cần cho phép tính đó đang nằm ở đâu.
Trình tự các bước thực hiện:
Bước 1: Mạch giải mã lệnh (Instruction Decoder) bên trong Khối điều khiển (CU) tiếp nhận chuỗi bit từ thanh ghi IR.
Bước 2: Bóc tách trường mã thao tác (Opcode): Mạch điện nhận diện mã thao tác để biết rõ đây là lệnh loại nào (ví dụ: lệnh số học cộng/trừ, lệnh sao chép dữ liệu, lệnh so sánh hay lệnh nhảy).
Bước 3: Bóc tách trường toán hạng (Operand/Address): Xác định các thông số đi kèm:
Dữ liệu là một hằng số có sẵn ngay trong câu lệnh (định vị tức thời).
Hay dữ liệu đang nằm trong một thanh ghi nội bộ nào đó (định vị thanh ghi).
Hay dữ liệu đang nằm tại một địa chỉ ô nhớ ngoài RAM (định vị trực tiếp/gián tiếp).
Bước 4: Mạch định thời phát tín hiệu chuẩn bị các đường dây liên kết trong CPU để sẵn sàng cho bước thực thi.
Ví dụ trực quan:
Với mã lệnh
ADD R1, R2nằm trong thanh ghi IR:Khối giải mã nhận diện phần đầu là mã
ADD: Chuẩn bị kích hoạt khối cộng bên trong ALU.Khối giải mã nhận diện phần đuôi là
R1vàR2: Chuẩn bị mở cổng cho dữ liệu từ hai thanh ghi này đi vào hai ngõ đầu vào của ALU.
2.2.1.3. Giai đoạn thực thi thao tác (Execute – EX)
Mục đích của giai đoạn:
Trực tiếp thực hiện hành động nghiệp vụ mà lệnh yêu cầu.
Đây là giai đoạn các mạch điện tử trong Datapath và ALU hoạt động mạnh nhất.
Trình tự các trường hợp thực hiện:
Trường hợp 1 – Các phép toán số học và logic (ADD, SUB, AND, OR…):
Dữ liệu từ các thanh ghi nguồn được đẩy vào hai đầu vào của bộ ALU.
Khối CU kích hoạt tín hiệu điều khiển yêu cầu ALU làm đúng phép tính đã định.
Bộ cộng hoặc mạch logic bên trong ALU cho ra dãy bit kết quả tạm thời.
Trạng thái tính toán (bằng 0, tràn số, mang dấu âm, có nhớ) được cập nhật thẳng vào các cờ trong thanh ghi trạng thái (Flags/PSW).
Trường hợp 2 – Các lệnh nhảy và rẽ nhánh (JUMP, BRANCH):
CPU tiến hành kiểm tra điều kiện (ví dụ: kiểm tra xem cờ Zero có đang bằng 1 hay không).
Nếu thỏa mãn điều kiện, CPU sẽ lấy địa chỉ đích của nhánh nhảy ghi đè thẳng vào thanh ghi đếm chương trình
PC.Khi đó, chu trình tuần tự bị bẻ gãy, CPU chuyển hướng sang thực thi vùng lệnh mới.
Trường hợp 3 – Các lệnh tính toán địa chỉ bộ nhớ:
Nếu câu lệnh yêu cầu truy cập bộ nhớ phức tạp (ví dụ: dùng thanh ghi cơ sở cộng độ dời), khối ALU hoặc bộ cộng địa chỉ sẽ tính toán ra địa chỉ ô nhớ thực tế cần truy cập.
2.2.1.4. Giai đoạn truy cập bộ nhớ và lưu kết quả (Memory / Write Back – WB)
Mục đích của giai đoạn:
Khép lại toàn bộ vòng đời của một câu lệnh bằng việc cất giữ thành quả xử lý vào đúng nơi quy định.
Cung cấp dữ liệu sẵn sàng cho các câu lệnh kế tiếp sử dụng.
Trình tự hai công việc chính:
Truy cập bộ nhớ dữ liệu (Memory Access – nếu câu lệnh có yêu cầu):
Đọc dữ liệu (Load): Nếu lệnh cần lấy dữ liệu từ một ô RAM vào, địa chỉ tính được từ giai đoạn EX sẽ đưa ra bus địa chỉ, đọc giá trị từ RAM nạp vào thanh ghi đệm dữ liệu (MDR).
Ghi dữ liệu (Store): Nếu lệnh yêu cầu cất một con số ra bộ nhớ RAM, địa chỉ ô nhớ được đưa ra bus địa chỉ, con số cần cất được đưa ra bus dữ liệu và CU phát tín hiệu “Ghi bộ nhớ” (Memory Write).
Ghi trả kết quả về thanh ghi đích (Write Back – WB):
Kết quả cuối cùng sinh ra từ khối ALU hoặc dữ liệu vừa đọc được từ RAM lên sẽ được chuyển qua tuyến bus nội bộ và ghi cố định vào thanh ghi đích (như thanh ghi tích lũy ACC hoặc một thanh ghi đa năng).
Ngay khi dữ liệu được ghi chép thành công vào thanh ghi đích, chu trình của câu lệnh hiện tại chính thức kết thúc.
Khối điều khiển CPU lập tức chuyển sang nhịp tìm nạp lệnh mới (bắt đầu lại giai đoạn IF dựa trên giá trị địa chỉ đang có sẵn trong thanh ghi
PC).
BẢNG TỔNG KẾT VÒNG ĐỜI 4 GIAI ĐOẠN CỦA LỆNH MÁY
| Tên giai đoạn | Ký hiệu | Bộ phận đảm nhiệm chính | Công việc cụ thể |
| Tìm nạp lệnh (Instruction Fetch) | IF | PC, MAR, Bus hệ thống, RAM, MDR, IR | Lấy mã lệnh từ ô nhớ RAM về cất vào thanh ghi IR; tự động tăng giá trị thanh ghi PC. |
| Giải mã lệnh (Instruction Decode) | ID | Bộ giải mã lệnh (Instruction Decoder), CU | Phân tích mã thao tác (Opcode) và xác định vị trí các toán hạng cần dùng. |
| Thực thi thao tác (Execute) | EX | Bộ tính toán số học & logic (ALU), CU, Flags | Thực hiện phép cộng trừ, so sánh logic, tính địa chỉ hoặc kiểm tra điều kiện rẽ nhánh. |
| Truy cập & Ghi kết quả (Memory / Write Back) | MEM / WB | ALU, Thanh ghi đệm MDR, RAM, Registers (ACC, GPR) | Đọc/ghi dữ liệu ra vào RAM (nếu có) và cất kết quả cuối cùng vào thanh ghi đích. |