Chương IV Chương trình và thực hiện chương trình
2. Lệnh và thực thi lệnh
2.1. Kiến trúc của lệnh
Đơn vị xử lý trung tâm của máy tính có khả năng thực hiện được một
tập hữu hạn các lệnh. Mỗi lệnh được lưu trữ trong bộ nhớ máy tính dưới
dạng một dãy số nhị phân. Các lệnh thường được phân theo các nhóm chức
năng như nhóm lệnh số học-logic, nhóm lệnh điều khiển rẽ nhánh, nhóm lệnh vào-ra dữ liệu, v.v.
Cấu trúc của lệnh thường gồm hai phần:
(1) Mã lệnh (tác vụ CPU cần thực hiện: sao chép dữ liệu, phép cộng, phép trừ, v.v.) và
(2) Toán hạng hoặc là Địa chỉ của toán hạng.
Mặc dù mã lệnh và toán hạng là những mã tự nhị phân, song ta thường không dùng các chúng trong để viết chương trình vì thói quen nhận biết các mã tự. Để thuận lợi, lệnh thường được viết dưới dạng mã ngữ đặc tả gợi nhớ (Mnemonics) mô tả thao tác cần thực hiện và địa chỉ lưu trữ toán hạng sử dụng trong thao tác. Sau đó phần mã ngữ sẽ được dịch sang dạng mã tự nhị phân.
Ví dụ sau đây minh họa một lệnh có độ dài 8 bit, 2 bit mã lệnh và 6 bit địa chỉ. Trong dạng mã ngữ, mã lệnh MOV, có nghĩa là di chuyển (sao chép) dữ liệu. Ở phần thứ hai là địa chỉ, nơi chứa dữ liệu cần sao chép và vị trí sao chép. Ở dưới lệnh được chuyển sang dạng nhị phân.
MOV r1,r2 Sao chép dữ liệu là nội dung thanh ghi r2 sang thanh ghi r1, thanh ghi r1 gọi là đích (Destination) đến của dữ liệu , thanh ghi r2 là nguồn (Source) chứa dữ liệu (trong hình dưới, các bit mã địa chỉ thanh ghi r1 được ký hiệu là D, các bit mã địa chỉ thanh ghi r2 được ký hiệu là S.
ML ML D D D S S S Mã lệnh Đ/c thanh ghi đích Đ/c thanh ghi nguồn 0 1 0 1 0 0 0 1
SUB M Lệnh trừ, nội dung thanh ghi gộp (ACC - Accummulator) được trừ đi nội dung của ô nhớ có địa chỉ là nội dung thanh ghi 16 bit (địa chỉ vật lý của ô nhớ chứa nội dung toán hạng trừ). ML ML D D D S S S Mã lệnh Đ/c thanh ghi đích Đ/c thanh ghi nguồn 1 0 0 1 1 1 1 0
Trong dạng mã ngữ, mã lệnh là SUB, nghĩa là thực hiện phép trừ. Phần thứ hai, 011 là phần địa chỉ của toán hạng đích, 110 là địa chỉ của toán hạng nguồn. Chuyển sang dạng nhị phân, phần mã lệnh SUB dạng mã ngữ tương ứng với 10 dạng nhị phân và phần địa chỉ 011 nhị phân, tức là 3 thập phân là địa chỉ của thanh ghi gộp. 110B là địa chỉ của thanh ghi 16 bit chứa địa chỉ của ô nhớ toán hạng thứ hai, tương ứng với 6 trong hệ thập phân. Cần nhấn mạnh rằng phần thứ hai của lệnh chỉ cho biết địa chỉ của các toán hạng chứ không phải bản thân toán hạng. Số 3 hay số 6 chỉ nói rằng cần tìm các toán hạng ở địa chỉ nào.
Toán hạng ở địa chỉ 3 được trừ số nào? Nó được trừ đi nội dung đã có sẵn ở thiết bị lưu trữ, trong một ô nhớ, mà địa chỉ ô nhớ được xác định là nội dung thanh ghi 16 bit có địa chỉ là 6.
Như vậy thanh ghi gộp là thiết bị không thể thiếu của CPU và nó được dùng để lưu (tạm thời) kết quả xử lý.
2.1. Tập lệnh cơ bản của máy tính
Các lệnh cơ bản trong máy tính có thể chia ra thành các nhóm nhỏ sau:
Tổ chức các Bit trong ô nhớ lệnh SUB M
Nguyễn Trung Đồng – Tel 0983 410 866
1. Nhóm các lệnh di chuyển dữ liệu (Data Movement) cho phép sao chép (Copy) dữ liệu từ nơi này sang nơi khác, từ thanh ghi sang thanh ghi, từ ô nhớ sang thanh ghi hay ngược lại.
2. Nhóm các lệnh thực hiện phép toán:
Các phép toán một ngôi: lệnh chỉ làm việc trên một toán hạng, tạo ra một kết quả, thông thường, đó là các phép toán logic
Các phép toán hai ngôi: lệnh làm việc với hai toán hạng tạo
ra kết quả, ví dụ các phép toán số học, các phép toán AND, OR, XOR v.v…
3. Nhóm các lệnh so sánh và điều khiển rẽ nhánh không điều kiện
và có điều kiện: lệnh điều khiển rẽ nhánh chương trình theo tuần tự thực hiện thuật giải, hoặc tuỳ theo kết quả phép toán hoặc tuỳ theo tuần tự chương trình.
4. Nhóm các lệnh gọi chương trình con: chương trình con là một
nhóm các lệnh thực hiện một nhiệm vụ nào đó và có thể gọi ra từ một số nơi trong chương trình chính. Khi thực hiện xong, điều khiển phải trở về thực hiện lệnh tiếp sau lệnh gọi chương trình con, thông thường, địa chỉ trở về được cất trong vùng nhớ ngăn xếp (Stack).
5. Nhóm các lệnh vòng lặp: Khi cần thực hiện 1 nhóm lệnh trong
chương trình một số lần, có thể sử dụng lệnh vòng lặp. Thông thường số vòng lặp liên quan đến một thanh đếm, số vòng lặp có thể là cố dịnh, hoặc kết thúc khi thoả mãn một điều kiện nào đó.
6. Nhóm các lệnh Vào/Ra (I/O): lệnh dược sử dụng để nhập dữ liệu cho máy tính hoặc hiển thị kết quả xử lý dữ liệu, có các phương pháp Vào/Ra thường sử dụng là:
Vào/Ra theo định trình
Vào/Ra điều khiển bởi cơ chế ngắt
Vào/Ra theo truy cập trực tiếp bộ nhớ
Mỗi kiến trúc máy tính có một tập lệnh cơ bản riêng. Đây là các lệnh mà máy tính có thể hiểu và thực hiện được. Sau đây chúng ta minh họa một số lệnh trong tập lệnh cơ bản của một máy tính đơn giản.
Lệnh LOAD: Lệnh dùng để nạp nội dung của một ô nhớ tại một địa
chỉ xác định vào thanh ghi gộp. Ví dụ ở đây minh họa lệnh LOAD xxxx thực hiện thao tác nạp nội dung ở địa chỉ xxxx vào thanh ghi gộp.
Lệnh STORE: Lệnh dùng để nạp nội dung thanh ghi gộp vào một ô
nhớ có địa chỉ xác định trong bộ nhớ hay vào một thanh ghi.
Lệnh ADD: Lệnh cộng nội dung thanh ghi gộp với nội dung một ô
nhớ, kết quả đặt tại thanh ghi gộp.
Lệnh SUB: Lệnh trừ nội dung của thanh ghi gộp một đại lượng là nội
dung của một thanh ghi khác, hay nội dung ô nhớ tại một địa chỉ xác định trong bộ nhớ .
Lệnh AND: Lệnh thực hiện phép VÀ logic hai dữ liệu, một ở thanh ghi
gộp, một ở một thanh ghi khác hoặc nội dung một ô nhớ có địa chỉ xác định trong bộ nhớ.
Lệnh OR: Lệnh thực hiện phép HOẶC logic hai dữ liệu, một ở thanh
ghi gộp, một ở một thanh ghi khác hoặc nội dung một ô nhớ có địa chỉ xác định trong bộ nhớ.
Lệnh IN: Lệnh lấy dữ liệu từ một thiết bị ngoại vi đưa vào thanh ghi
gộp.
Lệnh OUT: Lệnh đưa nội dung thanh ghi gộp ra một thiết bị ngoại vi. Lệnh JUMP: Lệnh điều khiển CPU thực hiện lệnh được lưu tại một ô
nhớ có địa chỉ xác định trong bộ nhớ.
Lệnh CALL: Lệnh gọi một chương trình con từ một vị trí nhất định
trong chương trình chính.
Tất cả các lệnh đều được viết dưới dạng mã gợi nhớ (hợp ngữ).
Trong máy tính lệnh và dữ liệu đều được lưu trữ dưới dạng một dữ
liệu nhị phân. Vì vậy chúng thường được lưu ở các khu vực tách biệt trong
bộ nhớ. Máy tính xử lý lệnh trước khi truy xuất dữ liệu từ bộ nhớ.