Menu
CoddyTech

Cách lệnh hoạt động

Thuộc phần Kiến thức nền tảng trong hành trình Assembly của Coddy. Bài học 4 trên 45.

Bạn biết CPU thực thi từng lệnh một. Nhưng CPU biết chạy lệnh tiếp theo bằng cách nào? Các lệnh được lưu ở đâu? Và một lệnh thực sự trông như thế nào?

Chỉ dẫn là những con số.

Đây là một sự thật cơ bản về máy tính. Mọi thứ đều là số. Dữ liệu bạn làm việc cùng (như số 42) là một con số. Địa chỉ nơi dữ liệu được lưu trữ (như 1000) là một con số. Và bản thân các chỉ thị (như mov, add, cmp) cũng là những con số.

Khi bạn viết code assembly như mov rax, 5, trình hợp dịch chuyển văn bản dễ đọc này thành một con số mà CPU hiểu được. Con số này được gọi là mã lệnh.

Các chỉ dẫn được lưu ở đâu?

Các chỉ thị được lưu trong bộ nhớ, giống như dữ liệu. Không có vùng nhớ riêng cho chỉ thị. Cùng một vùng nhớ lưu cả hai loại:

  • Dữ liệu (số, ký tự, mảng)
  • Chỉ thị (chính chương trình)

Bản thân các byte không cho biết chúng là lệnh hay dữ liệu. CPU xem bất cứ thứ gì ở địa chỉ bộ nhớ mà Bộ đếm chương trình trỏ đến là lệnh tiếp theo. Trên hệ thống hiện đại, hệ điều hành đánh dấu vùng bộ nhớ chứa các lệnh của chương trình là có thể thực thi, còn CPU từ chối chạy các byte trong vùng bộ nhớ không được đánh dấu như vậy, chẳng hạn như dữ liệu của chương trình. Bạn đã tìm hiểu sơ qua về PC trong Bài học 0.1. Giờ là lúc hiểu chính xác cách nó hoạt động.

Bộ đếm chương trình (còn gọi là con trỏ lệnh) là một thanh ghi đặc biệt bên trong CPU. Nhiệm vụ duy nhất của nó là lưu địa chỉ bộ nhớ của lệnh tiếp theo cần thực thi.

Chu trình nạp và thực thi:

CPU lặp lại ba bước này mãi mãi:

BướcĐiều gì xảy ra
1. FETCHĐọc câu lệnh tại địa chỉ trong PC
2. EXECUTEThực hiện câu lệnh đó
3. ADVANCEChuyển PC đến câu lệnh tiếp theo

Ví dụ đơn giản:

Nếu PC = 1000, CPU sẽ:

  • Lấy câu lệnh tại địa chỉ 1000
  • Thực thi câu lệnh đó
  • Chuyển PC đến địa chỉ tiếp theo (1000 + kích thước câu lệnh)

Sau đó, nó lặp lại với giá trị PC mới.

Lệnh có dạng như sau:

Mỗi lệnh gồm hai phần:

PhầnTác dụngVí dụ
OpcodeCần làm gìmov, add, cmp
Toán hạngThực hiện thao tác với gìrax, 5, [result]

Một số lệnh có một toán hạng (như inc rax để cộng thêm 1). Một số lệnh có hai toán hạng (như mov rax, 5). Một số lệnh có ba toán hạng (như add rax, rbx, rcx trong một số kiến trúc).

Tự làm thử

Bài học này không có thử thách code.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Playground Assembly