Tập lệnh vi xử lý 8085/8088
- Mã gợi nhớ giúp cho người sử dụng biết hoạt động của lệnh. Mã gợi nhớ thường là
các chữ tiếng anh viết tắt như : MOV là lệnh chuyển, ADD là lệnh cộng, AND là lệnh
và luận lý, JMP là lệnh nhảy . . .
- Toán hạng đích giữ kết quả (nếu có yêu cầu) sau khi thi hành lệnh. Toán hạng đích
có thể là thanh ghi hay bộ nhớ.
- Toán hạng nguồn có thể là thanh ghi, bộ nhớ hay một số tức thời.
- Toán hạng thanh ghi là các thanh ghi của vi xử lý 86 gồm các thanh ghi tổng quát (8
bit lẫn 16 bit) và các thanh ghi đoạn đã biết
OF DF IF SF ZF AF PF CF Đại học Bách khoa tp.HCM Biên soạn : Nguyễn Xuân Minh TẬP LỆNH 8086/8088 Tổ chức và cấu trúc máy tính Tr.45 - Dạng lệnh trở về có toán hạng immed8 dùng cho các chương trình con có sử dụng thông số trong chồng. Khi đó, toán hạng nguồn immed8 sẽ được cộng vào thanh ghi SP để chỉnh lại vị trí đỉnh chồng sau khi gọi chương trình con, tránh thất thoát bộ nhớ dùng cho chồng. 6.4 Lệnh nhảy có điều kiện : - Dạng lệnh : Jcond shortlabel - Giải thích : Nếu thỏa điều kiện thì nhảy tương đối IP ← địa chỉ lệnh kế + độ dời (mở rộng dấu 16 bit) ngược lại không làm gì cả (qua lệnh kế). - Tác động cờ : - Lệnh nhảy có điều kiện dùng trạng thái các cờ để làm điều kiện. - Sau đây là bảng mã lệnh nhảy có điều kiện cùng với điều kiện nhảy. Mã lệnh Giải thích Điều kiện JE/JZ Nhảy nếu bằng/không ZF = 1 JL/JNGE Nhảy nếu nhỏ hơn/không lớn hơn hoặc bằng (SF xor OF) = 1 JLE/JNG Nhảy nếu nhỏ hơn hoặc bằng /không lớn hơn ((SF xor OF) or ZF) = 1 JB/JNAE/JC Nhảy nếu dưới /không trên hoặc bằng/nhớ CF = 1 JBE/JNA Nhảy nếu dưới hoặc bằng /không trên (CF or ZF) = 1 JP/JPE Nhảy nếu kiểm tra / kiểm tra chẳn PF = 1 JO Nhảy nếu tràn OF = 1 JS Nhảy nếu dấu SF = 1 JNE/JNZ Nhảy nếu không bằng/khác không ZF = 0 JNL/JGE Nhảy nếu không nhỏ hơn/lớn hơn hoặc bằng (SF xor OF) = 0 JNLE/JG Nhảy nếu không nhỏ hơn hoặc bằng /lớn hơn ((SF xor OF) or ZF) = 0 JNB/JAE/JNC Nhảy nếu không dưới /trên hoặc bằng/không nhớ CF = 0 JNBE/JA Nhảy nếu không dưới hoặc bằng /trên (CF or ZF) = 0 JNP/JPO Nhảy nếu không kiểm tra / kiểm tra lẻ PF = 0 JNO Nhảy nếu không tràn OF = 0 JNS Nhảy nếu không dấu SF = 0 - Ví dụ : MOV CX,3 ; thực hiện một vòng lặp làm 3 lần. MOV AX,0 Nhan: ADD AX,12 DEC CX JNZ Nhan ; nhảy đến lệnh tại vị trí “Nhan” nếu CX ≠ 0. MOV [3000h],AX 6.5 Lệnh LOOP : ♣ Dạng lệnh 1 : LOOP shortlabel - Giải thích : giảm CX, lặp vòng (nhảy) nếu CX ≠ 0 IP ← địa chỉ lệnh kế + dộ dời (mở rộng dấu 16 bit) - Tác động cờ : - Lập vòng không điều kiện. CX giữ số lần lặp. Rất tiện dụng trong việc tạo ra các vòng lặp. Chẳng hạn như ví dụ trong phần lệnh nhảy có điều kiện có thể viết lại gọn hơn như sau : MOV CX,3 MOV AX,0 Nhan: ADD AX,12 OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF Biên soạn : Nguyễn Xuân Minh Đại học Bách khoa tp.HCM Tr.46 Tổ chức và cấu trúc máy tính TẬP LỆNH 8086/8088 LOOP Nhan MOV [3000h],AX - Một trong những ứng dụng phổ biến của lệnh lặp vòng là tạo ra các vòng làm trễ. - Ví dụ : MOV CX,10 Nhan: LOOP Nhan ; vòng lặp làm 10 lần lệnh LOOP MOV CX,0 Nhan: LOOP Nhan ; vòng lặp làm 65536 lần lệnh LOOP ♣ Dạng lệnh 2 : LOOPE/LOOPZ shortlabel - Giải thích : giảm CX, lặp vòng (nhảy) nếu CX ≠ 0 và ZF = 1 IP ← địa chỉ lệnh kế + dộ dời (mở rộng dấu 16 bit) - Tác động cờ : - Lập vòng nếu bằng / nếu không. Hai điều kiện CX ≠ 0 và ZF = 1 phải thỏa đồng thời thì lệnh mới lặp vòng. Nếu không, không làm gì cả (qua lệnh kế). - Đôi khi người ta xét các điều kiện để không lặp còn gọi là điều kiện thoát khỏi vòng lặp : CX = 0 hay ZF = 0. Có thể xem đó là các nguyên nhân gây ra kết thúc vòng lặp. ♣ Dạng lệnh 3 : LOOPNE/LOOPNZ shortlabel - Giải thích : giảm CX, lặp vòng (nhảy) nếu CX ≠ 0 và ZF = 0 IP ← địa chỉ lệnh kế + dộ dời (mở rộng dấu 16 bit) - Tác động cờ : - Lâp vÎng näu khéng bÙng / näu kh¾c khéng. Hai ½iåu kièn CX ≠ 0 và ZF = 0 phải thỏa đồng thời thì lệnh mới lặp vòng. Nếu không, không làm gì cả (qua lệnh kế). - Đôi khi người ta xét các điều kiện để không lặp còn gọi là điều kiện thoát khỏi vòng lặp : CX = 0 hay ZF = 1. Có thể xem đó là các nguyên nhân gây ra kết thúc vòng lặp. 6.6 Lệnh JCXZ : - Dạng lệnh : JCXZ shortlabel - Giải thích : Nếu CX = 0 thì IP ← địa chỉ lệnh kế + dộ dời (mở rộng dấu 16 bit) - Tác động cờ : - Nhảy nếu CX=0. Thường dùng sau LOOPE, LOOPNE, REPE, REPNE để xác định nguyên nhân kết thúc vòng lặp. - Ví dụ : REPE CMPSB ; so sánh 2 chuỗi JCXZ nhan ( đoạn chương trình xử lý cho trường hợp chuỗi khác nhau) nhan: ( đoạn chương trình xử lý cho trường hợp chuỗi giống nhau) 6.7 Lệnh INT : - Dạng lệnh : INT immed8 OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF Đại học Bách khoa tp.HCM Biên soạn : Nguyễn Xuân Minh TẬP LỆNH 8086/8088 Tổ chức và cấu trúc máy tính Tr.47 INT 3 - Giải thích : PUSHF PUSH CS PUSH IP CS ← [(số ngắt * 4)+3, (số ngắt * 4)+2] IP ← [(số ngắt * 4)+1, (số ngắt * 4)] - Tác động cờ : - Ngắt quãng mềm. Thực chất của lệnh ngắt quãng là gọi đến một chương trình con đặc biệt gọi là chương trình phục vụ ngắt quãng. - Cách thực hiện lệnh ngắt quãng chính là cách gọi xa gián tiếp qua bộ nhớ 32 bit. - Số ngắt 1 byte immed8 cung cấp trong lệnh chính là số thứ tự của chương trình con phục vụ ngắt quãng. Nhờ vậy nên mặc dù lệnh ngắt quãng là lệnh gọi xa nhưng lại rất ngắn. - Bảng nhảy trong trường hợp này được gọi là bảng vector ngắt quãng. Vị trí của vector ngắt quãng được xác định bằng cách lấy số ngắt nhân 4. Kết quả này có thể xem là địa chỉ vật lý cũng được hoặc là địa chỉ offset lấy theo segment 0000 cũng được. - Điểm khác biệt giữa lệnh ngắt quãng và lệnh gọi xa là thao tác cất thanh ghi trạng thái (cờ) vào chồng PUSHF. Chính vì thế nên chương trình con phục vụ ngắt quãng phải được kết thúc bằng một lệnh trở về khác là IRET. - Các chương trình con phục vụ ngắt quãng thường được dùng cho các chương trình hệ thống (hệ điều hành, chương trình giao tiếp với các thiết bị, các chương trình con sử dụng thường xuyên, ...) hơn là dùng cho chương trình của người sử dụng. - Số ngắt cũng theo qui ước của hệ thống như sau : 00h ÷ 07h : ngắt hệ thống. 08h ÷ 0Fh, 70h ÷ 77h : ngắt cứng. Còn lại : ngắt mềm. - Một số ngắt thông dụng : INT 10h : màn hình. INT 13h : đĩa. INT 14h : thông tin liên lạc. INT 16h : bàn phím. INT 17h : máy in INT 21h : các phục vụ của MS-DOS. INT 20h : kết thúc chương trình, trở về DOS. - Mỗi chương trình con phục vụ ngắt quãng có thể thực hiện nhiều chức năng bên trong nghĩa là các phục vụ được chia nhỏ ra nữa. Ví dụ ngắt phục vụ màn hình có chức năng chọn chế độ màn hình, chức năng định vị điểm nháy (cursor), chức năng xuất ký tự ra màn hình, chức năng đồ họa, . . . - Thông số của chương trình phục vụ ngắt quãng thường được truyền thông qua các thanh ghi đầu vào (input) và k?t qu? thi hành chương trình con sẽ giữ trong các thanh ghi đầu ra (output). - Ví dụ : dùng ngắt 17h, chức năng 0 để xuất ký tự ra máy in. Input : AH = số chức năng (trong trường hợp này là 0). AL = ký tự cần in (mã ASCII). DX = số thứ tự máy in (0=LPT1, 1=LPT2, . . .) Output : AL = trạng thái Bit Ý nghĩa (nếu = 1) OF DF IF SF ZF AF PF CF 0 Biên soạn : Nguyễn Xuân Minh Đại học Bách khoa tp.HCM Tr.48 Tổ chức và cấu trúc máy tính TẬP LỆNH 8086/8088 0 Quá thời gian đợi máy in. 1,2 Không dùng. 3 Lỗi xuất nhập. 4 Máy in đang được chọn. 5 Hết giấy. 6 Máy in đã nhận ký tự. 7 Máy in không bận. - Như vậy để in ký tự 'A' ra máy in ta viết đoạn chương trình sau : MOV AH,0 ; nạp số chức năng. MOV AL,041h ; mã ASCII của ký tự 'A'. MOV DX,0 ; nạp số thứ tự máy in LPT1. INT 17h ; gọi ngắt 17h để in. MOV [3000h],AL ; cất trạng thái máy in. 6.8 Lệnh INTO : - Dạng lệnh : INTO - Giải thích : PUSHF PUSH CS PUSH IP - Tác động cờ : - Ngắt quãng nếu tràn (OF = 1). 6.9 Lệnh IRET : - Dạng lệnh : IRET - Giải thích : POP IP POP CS POPF - Tác động cờ : - Trở về từ chương trình phục vụ ngắt quãng. 7. Điều khiển bộ xử lý : 7.1 Lệnh CLC : - Dạng lệnh : CLC - Giải thích : CF ← 0 - Tác động cờ : - Xóa cờ nhớ về 0. 7.2 Lệnh STC : - Dạng lệnh : STC - Giải thích : CF ← 1 - Tác động cờ : - Lập cờ nhớ lên 1. 7.3 Lệnh CMC : - Dạng lệnh : CMC - Giải thích : CF ← bù 1 của CF - Tác động cờ : OF DF IF SF ZF AF PF CF 0 OF DF IF SF ZF AF PF CF 1 OF DF IF SF ZF AF PF CF × OF DF IF SF ZF AF PF CF × × OF DF IF SF ZF AF PF CF × × × × × × × × Đại học Bách khoa tp.HCM Biên soạn : Nguyễn Xuân Minh TẬP LỆNH 8086/8088 Tổ chức và cấu trúc máy tính Tr.49 - Lấy bù cờ nhớ. 7.4 Lệnh NOP : - Dạng lệnh : NOP - Giải thích : không làm gì cả - Tác động cờ : - Không làm gì cả. Dùng để tạo ra các khoảng làm trễ ngắn. 7.5 Lệnh CLD : - Dạng lệnh : CLD - Giải thích : DF ← 0 - Tác động cờ : - Xóa cờ định hướng về 0. Xử lý tăng địa chỉ trong các lệnh xử lý chuỗi. 7.6 Lệnh STD : - Dạng lệnh : STD - Giải thích : DF ← 1 - Tác động cờ : - Lập cờ định hướng lên 1. Xử lý giảm địa chỉ trong các lệnh xử lý chuỗi. 7.7 Lệnh CLI : - Dạng lệnh : CLI - Giải thích : IF ← 0 - Tác động cờ : - Xóa cờ ngắt quãng về 0. Cấm ngắt quãng cứng. 7.8 Lệnh STI : - Dạng lệnh : STI - Giải thích : IF ← 1 - Tác động cờ : - Lập cờ ngắt quãng lên 1. Cho phép ngắt quãng cứng. 7.9 Lệnh HLT : - Dạng lệnh : HLT - Giải thích : CPU vào trạng thái dừng. - Tác động cờ : - Dừng CPU, chờ một ngắt quãng cứng xảy ra (INTR hay NMI). 7.10 Lệnh WAIT : - Dạng lệnh : WAIT - Giải thích : CPU vào trạng thái đợi. - Tác động cờ : OF DF IF SF ZF AF PF CF 0 OF DF IF SF ZF AF PF CF 0 OF DF IF SF ZF AF PF CF 1 OF DF IF SF ZF AF PF CF 0 OF DF IF SF ZF AF PF CF 1 OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF Biên soạn : Nguyễn Xuân Minh Đại học Bách khoa tp.HCM Tr.50 Tổ chức và cấu trúc máy tính TẬP LỆNH 8086/8088 - CPU vào trạng thái đợi cho đến khi ngỏ TEST tác động. 7.11 Tiếp đầu lệnh LOCK : - Dạng lệnh : LOCK lệnh - Giải thích : Khóa các tuyến trong khi thi hành lệnh theo sau. - Tác động cờ : - Khóa các tuyến khi thi hành lệnh theo sau. Không cho phép các vi xử lý khác yêu cầu tuyến (chẳng hạn DMA). 7.12 Lệnh ESC : - Dạng lệnh : ESC immed,reg ESC immed,mem - Giải thích : đưa lệnh ra tuyến dữ liệu. - Tác động cờ : - Phát ra một lệnh cho vi mạch đồng xử lý 8087. - Ví dụ : ESC 6,AL ESC 4,[2000h] OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF
File đính kèm:
- tap_lenh_vi_xu_ly_80858088.pdf