1. Giới thiệu chung về tập lệnh
Mỗi bộ xử lý có một tập lệnh xác định (mang tính kế thừa trong cùng một dòng họ).
Tập lệnh thường có hàng chục đến hàng trăm lệnh.
Mỗi lệnh là một chuỗi số nhị phân mà bộ xử lý hiểu đƣợc để thực hiện một thao tác xác định.
Các lệnh đƣợc mô tả bằng các kí hiệu gợi nhớ các lệnh hợp ngữ.
270
Khuôn dạng của một lệnh máy
Mã thao tác (Operation Code - Opcode): mã hóa cho thao tác mà CPU phải thực hiện.
Tham chiếu toán hạng: mã hóa cho toán hạng
hoặc nơi chứa toán hạng mà thao tác sẽ tác động.
Toán hạng nguồn (Source Operand): dữ liệu vào của thao tác (CPU sẽ đọc)
Toán hạng đích (Destination Operand): dữ liệu ra của thao tác (CPU sẽ ghi)
Mã thao tác Tham chiếu toán hạng
Số lƣợng toán hạng trong lệnh
Ba toán hạng:
2 toán hạng nguồn, 1 toán hạng đích
VD: c = a + b
Từ lệnh dài vì phải mã hóa địa chỉ cho cả 3 toán hạng
Thường được sử dụng trên các bộ xử lý tiên tiến
Hai toán hạng:
1 toán hạng là toán hạng nguồn, toán hạng còn lại vừa là nguồn vừa là đích.
VD: a = a + b
Giá trị cũ của 1 toán hạng nguồn sẽ bị ghi đè bằng KQ
272
Số lƣợng toán hạng trong lệnh (tiếp)
Một toán hạng:
Chỉ có 1 toán hạng đƣợc chỉ ra trong lệnh
Toán hạng còn lại được ngầm định, thường là thanh ghi (VD: thanh chứa – Accumulator)
Thường được sử dụng trên các bộ xử lý thế hệ cũ
Không có toán hạng:
Các toán hạng đều đƣợc ngầm định
Sử dụng Stack
VD: lệnh c = a + b
push a push b add
pop c
Không thông dụng
2. Các kiểu thao tác điển hình
Chuyển dữ liệu
Xử lý số học với số nguyên
Xử lý logic
Điều khiển vào-ra
Chuyển điều khiển (rẽ nhánh)
Điều khiển hệ thống
274
Các lệnh chuyển dữ liệu
MOVE LOAD STORE
EXCHANGE CLEAR
SET PUSH POP
Copy dữ liệu từ nguồn đến đích
Copy dữ liệu từ bộ nhớ đến bộ xử lý Copy dữ liệu từ bộ xử lý đến bộ nhớ Tráo đổi nội dung của nguồn và đích Chuyển các bit 0 vào toán hạng đích Chuyển các bit 1 vào toán hạng đích
Copy dữ liệu từ nguồn đến đỉnh ngăn xếp Copy dữ liệu từ đỉnh ngăn xếp đến đích
Các lệnh số học
ADD
SUBTRACT MULTIPLY DIVIDE
ABSOLUTE NEGATE
INCREMENT DECREMENT COMPARE
Tính tổng hai toán hạng Tính hiệu hai toán hạng Tính tích hai toán hạng Tính thương hai toán hạng
Thay toán hạng bằng trị tuyệt đối của nó Đổi dấu toán hạng (lấy bù 2)
Cộng 1 vào toán hạng Trừ toán hạng đi 1
So sánh hai toán hạng để lập cờ
276
Các lệnh logic
AND OR XOR NOT TEST SHIFT ROTATE CONVERT
Thực hiện phép AND hai toán hạng Thực hiện phép OR hai toán hạng Thực hiện phép XOR hai toán hạng Đảo bit của toán hạng (lấy bù 1)
Thực hiện phép AND hai toán hạng để lập cờ Dịch trái (phải) toán hạng
Quay trái (phải) toán hạng
Chuyển đổi dữ liệu từ dạng này sang dạng khác
VD các lệnh AND, OR, XOR, NOT
Giả sử có hai thanh ghi chứa dữ liệu nhƣ sau:
(R1) = 1010 1010 (R2) = 0000 1111
Khi đó ta có:
(R1) AND (R2) = 0000 1010
Phép toán AND có thể đƣợc dùng để xoá một số bit và giữ nguyên các bit còn lại của toán hạng.
(R1) OR (R2) = 1010 1111
Phép toán OR có thể đƣợc dùng để thiết lập một số bit và giữ nguyên các bit còn lại của toán hạng.
(R1) XOR (R2) = 1010 0101
Phép toán XOR có thể đƣợc dùng để đảo một số bit và giữ nguyên các bit còn lại của toán hạng.
278
Các lệnh SHIFT và ROTATE
0
0
0 Dịch trái logic
Dịch phải logic
Dịch phải số học Dịch trái số học
Quay trái logic
Quay phải logic
Các lệnh vào-ra chuyên dụng
IN Copy dữ liệu từ một cổng xác định đến đích OUT Copy dữ liệu từ nguồn đến một cổng xác định
280
Các lệnh chuyển điều khiển
JUMP (BRANCH) Nhảy (rẽ nhánh) không điều kiện; nạp vào PC một địa chỉ xác định
JUMP CONDITIONAL Kiểm tra điều kiện xác định, hoặc nạp vào PC một địa chỉ xác định hoặc không không làm gì cả
CALL Cất nội dung PC vào ngăn xếp, nạp vào PC địa chỉ xác định để nhảy đến thực hiện chương trình con RETURN Khôi phục nội dung PC từ đỉnh ngăn xếp để trở về
chương trình chính
Lệnh rẽ nhánh không điều kiện
Chuyển tới thực hiện lệnh ở vị trí có địa chỉ là XXX:
PC ← XXX
lệnh lệnh
lệnh
lệnh_kế_tiếp
lệnh_rẽ_nhánh XXX lệnh
XXX
. . .
282
Lệnh rẽ nhánh có điều kiện
Kiểm tra điều kiện trong lệnh:
Nếu điều kiện đúng chuyển tới thực hiện lệnh ở vị trí có địa chỉ XXX
PC XXX
Nếu điều kiện sai chuyển sang thực hiện lệnh_kế_tiếp
Điều kiện thường được kiểm tra thông qua các cờ.
Có nhiều lệnh rẽ nhánh có điều kiện.
Minh họa lệnh rẽ nhánh có điều kiện
lệnh lệnh
lệnh
lệnh_kế_tiếp
lệnh_rẽ_nhánh_đk XXX lệnh
lệnh
XXX
. . .
284
Lệnh CALL và RETURN
Lệnh gọi chương trình con: lệnh CALL
Cất nội dung PC (chứa địa chỉ của lệnh_kế_tiếp) vào Stack
Nạp vào PC địa chỉ của lệnh đầu tiên của chương trình con đƣợc gọi
→ Bộ xử lý chuyển sang thực hiện chương trình con tương ứng
Lệnh trở về từ chương trình con: lệnh RETURN
Lấy địa chỉ của lệnh_kế_tiếp đƣợc cất ở Stack nạp trả lại cho PC
→ Bộ xử lý đƣợc điều khiển quay trở về thực hiện tiếp lệnh nằm sau lệnh CALL
Minh họa lệnh CALL và RETURN
lệnh lệnh
lệnh lệnh
lệnh đầu tiên của CTCon lệnh_kế_tiếp
CALL CTCon lệnh
lệnh
CTCon
. . .
286
Các lệnh điều khiển hệ thống
HALT WAIT
NO OPERATION (NOP) LOCK
UNLOCK
Dừng thực hiện chương trình
Dừng thực hiện chương trình, lặp kiểm tra điều kiện cho đến khi thoả mãn thì tiếp tục thực hiện
Không thực hiện gì cả
Cấm không cho xin chuyển nhượng bus Cho phép xin chuyển nhượng bus
3. Các phương pháp địa chỉ hóa toán hạng
Phương pháp địa chỉ hóa toán hạng là cách thức chỉ ra nơi chứa các toán hạng mà thao tác sẽ tác động.
Toán hạng có thể là:
Hằng số → cần cho biết giá trị của hằng số đó
Nội dung của một thanh ghi bên trong CPU → cần cho biết tên của thanh ghi
Nội dung của một ngăn nhớ → cần cho biết địa chỉ ngăn nhớ
288
Các chế độ địa chỉ thông dụng
Chế độ địa chỉ tức thì
Chế độ địa chỉ thanh ghi
Chế độ địa chỉ trực tiếp
Chế độ địa chỉ gián tiếp qua thanh ghi
Chế độ địa chỉ dịch chuyển
Chế độ địa chỉ tức thì
Immediate Addressing Mode
Toán hạng là một hằng số ở ngay trong lệnh
Ví dụ: