Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
330,71 KB
Nội dung
4.8 Lệnh RCR : - Dạng lệnh : RCR reg,1 RCR mem,1 RCR reg,CL RCR mem,CL - Giải thích : thđ ← (thđ) quay phải qua cờ nhớ 1 hay nhiều bit. - Tác động cờ : - Quay phải qua cờ nhớ. Dạng có thanh ghi CL dùng để quay nhiều bit. - Ví dụ : RCR CH,1 MOV CL,2 RCR BYTE PTR [1800h],CL ; quay phải qua cờ nhớ 2 bit. 4.9 Lệnh AND : - Dạng lệnh : AND reg,reg AND reg,immed AND mem,reg AND mem,immed AND reg,mem AND accum,immed - Giải thích : thđ ← thđ AND thn. - Tác động cờ : - Và luận lý. Xóa cờ nhớ về 0. - Ví dụ : AND CH,AH AND [SI],DX AND BYTE PTR [1000h],10000000b AND AX,0FFF0h 4.10 Lệnh TEST : - Dạng lệnh : TEST reg,reg TEST reg,immed TEST mem,reg TEST mem,immed TEST reg,mem TEST accum,immed - Giải thích : thđ AND thn. - Tác động cờ : - Và luận lý hai toán hạng nhưng không giữ lại kết quả mà chỉ lập các cờ. Xóa cờ nhớ và cờ tràn về 0. Thường dùng để kiểm tra bit. Lúc đó toán hạng nguồn là một mặt nạ bit cần thiết. - Ví dụ : TEST DX,1 ; kiểm tra bit 0 TEST BYTE PTR [2000h],10000000b ; kiểm tra bit 7 4.11 Lệnh OR : - Dạng lệnh : OR reg,reg OR reg,immed OR mem,reg OR mem,immed OR reg,mem OR accum,immed - Giải thích : thđ ← thđ OR thn. - Tác động cờ : - Hay luận lý. Xóa cờ nhớ về 0. - Ví dụ : OR DL,CH OF DF IF SF ZF AF PF CF × × × ? × × OF DF IF SF ZF AF PF CF × × × ? × 0 OF DF IF SF ZF AF PF CF 0 × × ? × 0 OF DF IF SF ZF AF PF CF × × × ? × 0 OR BP,[2000h] OR WORD PTR [1000h],000Fh 4.12 Lệnh XOR : - Dạng lệnh : XOR reg,reg XOR reg,immed XOR mem,reg XOR mem,immed XOR reg,mem XOR accum,immed - Giải thích : thđ ← thđ XOR thn. - Tác động cờ : - Hay ngoại luận lý. Xóa cờ nhớ về 0. - Ví dụ : XOR DL,80h ; đảo bit 7 XOR [2000h],AL ; [2000h] ← [2000h] XOR AL 5. Xử lý chuỗi : 5.1 Tiếp đầu lệnh REP : ♣ D ạng 1 : REP lệnh xử lý chuỗi - Giải thích : giảm CX, lặp lại lệnh theo sau Nếu CX ≠ 0 - Tác động cờ : - Lặp lại không điều kiện. Thanh ghi CX giữ số lần lặp. Thường dùng với lệnh chép chuỗi MOVS. - Ví dụ : MOV CX,10 REP MOVSB ; thực hiện lệnh MOVSB 10 lần. ♣ D ạng 2 : REPE / REPZ lệnh xử lý chuỗi - Giải thích : giảm CX, lặp lại lệnh theo sau Nếu CX ≠ 0 và ZF = 1 - Tác động cờ : - Lặp lại 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 theo sau mới được lặp lại. Nếu không, làm qua lệnh kế. Thường dùng với lệnh so sánh chuỗi CMPS để tìm chuỗi con trong chuỗi lớn. - Ví dụ : MOV CX,10 REPE CMPSB ; thực hiện lệnh CMPSB nếu chưa đủ 10 ; lần và hai chuỗi vẫn còn bằng nhau. ♣ D ạng 3 : REPNE / REPNZ lệnh xử lý chuỗi - Giải thích : giảm CX, lặp lại lệnh theo sau Nếu CX ≠ 0 và ZF = 0 - Tác động cờ : - Lặp lại 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 theo sau mới được lặp lại. Nếu không, làm qua lệnh kế. Thường dùng với lệnh quét chuỗi SCAS để dò tìm ký tự tong chuỗi. - Ví dụ : MOV CX,20 REPNE SCASB ; thực hiện lệnh CMPSB nếu chưa đủ 20 ; lần và chưa tìm ra ký tự trong chuỗi. OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF × × × ? × 0 5.2 Lệnh MOVS : - Dạng lệnh : MOVSB MOVSW - Giải thích : ♣ MOVSB : [ES:DI] ← [DS:SI] Nếu DF=0 thì : SI ← SI + 1, DI ← DI + 1 ngược lại thì : SI ← SI - 1, DI ← DI - 1 ♣ MOVSW : [ES:DI+1,ES:DI] ← [DS:SI+1,DS:SI] Nếu DF=0 thì : SI ← SI + 2, DI ← DI + 2 ngược lại thì : SI ← SI - 2, DI ← DI - 2 - Tác động cờ : - Chép byte hay word từ nguồn sang chuỗi đích. Cặp thanh ghi DS:SI giữ địa chỉ chuỗi nguồn. Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích. Các địa chỉ chuỗi nguồn trong thanh ghi SI và địa chỉ chuỗi đích trong thanh ghi DI được tự động tăng hay giảm sau mỗi lần chép. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa chỉ. - Lệnh này thường dùng kết hợp với tiếp đầu lệnh REP để thực hiện việc chép một chuỗi hay dãy. Lúc đó thanh ghi CX giữ chiều dài chuỗi nguồn. - Ví dụ 1 chép byte : chép 80h byte từ địa chỉ 3000:1000 sang địa chỉ 4800:C200 MOV AX,3000h MOV DS,AX MOV SI,1000h ; địa chỉ chuỗi nguồn. MOV AX,4800h MOV ES,AX MOV DI,0C200h ; địa chỉ chuỗi đích. MOV CX,80h ; số lần chép. CLD ; xóa cờ DF, xử lý tăng địa chỉ. REP MOVSB - Ví dụ 2 chép word : yêu cầu như ví dụ 1 MOV AX,3000h MOV DS,AX MOV SI,1000h ; địa chỉ chuỗi nguồn. MOV AX,4800h MOV ES,AX MOV DI,0C200h ; địa chỉ chuỗi đích. MOV CX,40h ; số lần chép. CLD ; xóa cờ DF, xử lý tăng địa chỉ. REP MOVSW 5.3 Lệnh CMPS : - Dạng lệnh : CMPSB CMPSW - Giải thích : ♣ CMPSB : [DS:SI] - [ES:DI] OF DF IF SF ZF AF PF CF Nếu DF=0 thì : SI ← SI + 1, DI ← DI + 1 ngược lại thì : SI ← SI - 1, DI ← DI - 1 ♣ CMPSW : [DS:SI+1,DS:SI] - [ES:DI+1,ES:DI] Nếu DF=0 thì : SI ← SI + 2, DI ← DI + 2 ngược lại thì : SI ← SI - 2, DI ← DI - 2 - Tác động cờ : - So sánh byte hay word của chuỗi nguồn với chuỗi đích. Cặp thanh ghi DS:SI giữ địa chỉ chuỗi nguồn. Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích. Các thanh ghi giữ địa chỉ offset SI, DI được tự động tăng hay giảm sau mỗi lần so sánh. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa chỉ. - Lệnh này thường dùng kết hợp với tiếp đầu lệnh REPE để thực hiện việc so sánh hai chuỗi hay hai dãy với nhau để tìm kiếm một chuỗi con trong một chuỗi lớn. Lúc đó thanh ghi CX giữ chiều dài chuỗi. - Có thể có hai nguyên nhân làm ngừng lệnh so sánh chuỗi : hoặc hai chuỗi có byte hay word khác nhau (ZF = 0), hoặc hai chuỗi giống nhau (ZF = 1). - Ví dụ : REPE CMPSB 5.4 Lệnh SCAS : - Dạng lệnh : SCASB SCASW - Giải thích : ♣ SCASB : AL - [ES:DI] Nếu DF=0 thì : DI ← DI + 1 ngược lại thì : DI ← DI - 1 ♣ SCASW : AX - [ES:DI+1,ES:DI] Nếu DF=0 thì : DI ← DI + 2 ngược lại thì : DI ← DI - 2 - Tác động cờ : - Quét chuỗi nghĩa là so sánh byte trong thanh ghi AL hay word trong thanh ghi AX với chuỗi đích. Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích. Địa chỉ chuỗi đích được tự động tăng hay giảm sau mỗi lần so sánh. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa chỉ. - Lệnh này thường dùng kết hợp với tiế p đầu lệnh REPNE để thực hiện việc tìm kiếm một dữ liệu trong một chuỗi. Lúc đó thanh ghi CX giữ chiều dài chuỗi. - Có thể có hai nguyên nhân làm ngừng lệnh quét chuỗi : hoặc tìm thấy dữ liệu trong chuỗi (ZF=1 hay CX 0), hoặc hết chuỗi mà vẫn chưa tìm thấy dữ liệu (ZF=0 hay CX=0). - Ví dụ : REPNE SCASW 5.5 Lệnh LODS : - Dạng lệnh : LODSB LODSW - Giải thích : OF DF IF SF ZF AF PF CF × × × × × × OF DF IF SF ZF AF PF CF × × × × × × ♣ LODSB : AL ← [DS:SI] Nếu DF=0 thì : SI ← SI + 1 ngược lại thì : SI ← SI - 1 ♣ LODSW : AX ← [DS:SI+1,DS:SI] Nếu DF=0 thì : SI ← SI + 2 ngược lại thì : SI ← SI - 2 - Tác động cờ : - Nạp chuỗi nguồn byte vào thanh ghi AL hay chuỗi nguồn word vào thanh ghi AX. Cặp thanh ghi DS:SI giữ địa chỉ chuỗi nguồn. Địa chỉ chuỗi nguồn được tự động tăng hay giảm sau mỗi lần nạp. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa chỉ. 5.6 Lệnh STOS : - Dạng lệnh : STOSB STOSW - Giải thích : ♣ STOSB : [ES:DI] ← AL Nếu DF=0 thì : DI ← DI + 1 ngược lại thì : DI ← DI - 1 ♣ STOSW : [ES:DI+1,ES:DI] ← AX Nếu DF=0 thì : DI ← DI + 2 ngược lại thì : DI ← DI - 2 - Tác động cờ : - Cất byte trong thanh ghi AL hay word trong thanh ghi AX vào chuỗi đích. Cặp thanh ghi ES:DI giữ địa chỉ chuỗi đích. Địa chỉ chuỗi đích được tự động tăng hay giảm sau mỗi lần cất. Chiều tăng giảm địa chỉ tùy thuộc cờ định hướng DF. DF=0 xử lý tăng địa chỉ. DF=1 xử lý giảm địa chỉ. 6. Chuyển điều khiển : 6.1 Lệnh CALL : - Dạng lệnh : CALL nearlabel CALL mem16 CALL farlabel CALL mem32 CALL reg16 - Giải thích : ♣ nearlabel : PUSH IP IP ← địa chỉ lệnh kế + độ dời 2 byte ♣ farlabel : PUSH CS PUSH IP CS ← địa chỉ segment IP ← địa chỉ offset ♣ reg16 : PUSH IP IP ← reg16 ♣ mem16 : PUSH IP OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF IP ← [địa chỉ +1,địa chỉ] ♣ mem32 : PUSH CS PUSH IP CS ← [địa chỉ +3,địa chỉ+2] IP ← [địa chỉ +1,địa chỉ] - Tác động cờ : - Gọi chương trình con. Quá trình gọi chương trình con được thực hiện qua 2 bước : ♣ Cất địa chỉ trở về - chính là địa chỉ lệnh ngay sau lệnh CALL - vào chồng. ♣ Chuyển sự thi hành chương trình đến địa chỉ lệnh đầu tiên của chương trình con. - Địa chỉ trở về chính là nội dung hiện tại của cặp thanh ghi CS:IP. - Lệnh gọi trực tiếp đến nhãn nearlabel chỉ cất nội dung IP, và nạp giá trị offset mới vào IP (nội dung CS không đổi) nên chỉ có thể dùng để gọi bên trong một segment. Lệnh này còn được gọi là lệnh gọi gần hay gọi trong segment. Nhãn nearlabel còn được gọi là nhãn gần và có kích thước 2 byte. Ví dụ : CALL 0F008h - Lệnh gọi trực tiếp đến nhãn farlabel cất nội dung IP lẫn CS, sau đó nạp giá trị offset mới vào IP, nạp giá trị segment mới vào CS nên có thể dùng để gọi đến bất kỳ vị trí bộ nhớ nào cũng được. Lệnh này còn được gọi là lệnh gọi xa hay gọi ngoài segment. Nhãn farlabel còn được gọi là nhãn xa và có kích thước 4 byte. Ví dụ : CALL 3000:F008 - Lệnh gọi gián tiếp qua thanh ghi reg16 cũng là một lệnh gọi gần. Lúc đó địa chỉ chương trình con được nạp vào thanh ghi trước khi thực hiện lệnh gọi. Ví dụ : MOV DX,0F008h CALL DX - Lệnh gọi gián tiếp qua bộ nhớ mem16 cũng là một lệnh gọi gần. Lúc đó địa chỉ chương trình con được đặt tại ô nhớ có địa chỉ hiệu dụng trong lệnh. Ví dụ : CALL [BX+3000h] - Lệnh gọi gián tiếp qua bộ nhớ mem32 là một lệnh gọi xa. Lúc đó địa chỉ chương trình con đặt tại ô nhớ có địa chỉ hiệu dụng trong lệnh phải là địa chỉ 4 byte. Lúc đó cần phải chỉ rõ ra hoạt động bộ nhớ 32 bit bằng cách dùng toán tử DWORD PTR. Ví dụ : CALL DWORD PTR [SI+2000h] - Với lệnh gọi gián tiếp qua bộ nhớ ta có thể tổ chức sắp xếp các địa chỉ chương trình con thành một bảng trong bộ nhớ gọi là bảng nhảy. Lúc đó mỗi chương trình con sẽ được gọi theo số thứ tự của nó trong bảng nhảy. - Ví dụ bảng nhảy gần : Chương trình con 0 ở địa chỉ 476Ah. Chương trình con 1 ở địa chỉ 0F008h. Chương trình con 2 ở địa chỉ 0A234h. Để gọi chương trình con 2 ta thực hiện : MOV BX,2 ; số thứ tự chương trình con. ADD BX,BX ; nhân 2. CALL [BX+3000h] ; gọi chương trình con. OF DF IF SF ZF AF PF CF 6 A 47 08 F0 34 A 2 3000h CTC 0 476Ah A 234h F008h CTC 2 CTC 1 (Địa chỉ đầu bảng) 6.2 Lệnh JMP : - Dạng lệnh : JMP shortlabel JMP mem16 JMP nearlabel JMP mem32 JMP farlabel JMP reg16 - Giải thích : ♣ shortlabel : IP ← IP + độ dời (mở rộng dấu 16 bit) ♣ nearlabel : IP ← địa chỉ ♣ farlabel : CS ← địa chỉ segment IP ← địa chỉ offset ♣ reg16 : IP ← reg16 ♣ mem16 : IP ← [địa chỉ +1,địa chỉ] ♣ mem32 : CS ← [địa chỉ +3,địa chỉ+2] IP ← [địa chỉ +1,địa chỉ] - Tác động cờ : - Nhảy không điều kiện. Lệnh nhảy không điều kiện thực hiện giống như lệnh gọi nhưng không có bước lưu lại địa chỉ trở về. - Lệnh nhảy đến nhãn ngắn shortlabel là lệnh nhảy tương đối. Nơi đến phải nằm trong phạm vi từ -128 đến +127 so với vị trí của lệnh nhảy. Toán hạng nguồn trong lệnh chỉ là byte độ dời để cộng thêm vào thanh ghi IP. Byte độ dời này được mở rộng dấu trước khi cộng vào thanh ghi IP. - Ví dụ : JMP SHORT 18h JMP 0F008h JMP DWORD PTR [3000h] 6.3 Lệnh RET : - Dạng lệnh : RET RETF RET immed8 RETF immed8 - Giải thích : ♣ RET : POP IP ♣ RETF : POP IP POP CS ♣ RET immed8 : POP IP SP ← SP + immed8 ♣ RETF immed8 : POP IP POP CS SP ← SP + immed8 - Tác động cờ : - Trở về từ chương trình con. Lệnh trở về là lệnh dùng để kết thúc một chương trình con. - Lệnh RET để kết thúc một chương trình con gần. - Lệnh RETF để kết thúc một chương trình con xa. - 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 OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF 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 OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF MOV AX,0 Nhan: ADD AX,12 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) OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF OF DF IF SF ZF AF PF CF 6.7 Lệnh INT : - Dạng lệnh : INT immed8 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. OF DF IF SF ZF AF PF CF 0 [...]... CF - 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ờ : OF DF IF SF ZF AF PF CF - 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... 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ờ : OF DF IF SF ZF AF PF CF 1 - 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ờ : OF DF IF SF ZF AF PF CF - 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... : CF ← 0 - Tác động cờ : OF DF IF SF ZF AF PF CF 0 - 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ờ : OF DF IF SF ZF AF PF CF 1 - 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 × - 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ờ : OF DF IF SF ZF... 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ờ : OF DF IF SF ZF AF PF CF 0 - 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ờ : OF DF IF SF ZF AF PF CF 1 - 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... 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ờ : OF DF IF × SF ZF AF PF CF × - 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 POP POPF - Tác động cờ : OF × IP CS DF IF SF ZF AF PF CF × × × × × × × - 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... (mã ASCII) DX = số thứ tự máy in (0=LPT1, 1=LPT2, ) Output : AL = trạng thái Bit 0 1 ,2 3 4 5 6 7 Ý nghĩa (nếu = 1) Quá thời gian đợi máy in Không dùng Lỗi xuất nhập Máy in đang được chọn Hết giấy Máy in đã nhận ký tự 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... 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ờ : OF DF IF SF ZF AF PF CF - Phát ra một lệnh cho vi mạch đồng xử lý 8087 - Ví dụ : ESC 6,AL ESC 4, [20 00h] . địa chỉ trở về. - Lệnh nhảy đến nhãn ngắn shortlabel là lệnh nhảy tương đối. Nơi đến phải nằm trong phạm vi từ - 128 đến + 127 so với vị trí của lệnh nhảy. Toán hạng nguồn trong lệnh chỉ là byte. F0 34 A 2 3000h CTC 0 476Ah A 23 4h F008h CTC 2 CTC 1 (Địa chỉ đầu bảng) 6 .2 Lệnh JMP : - Dạng lệnh : JMP shortlabel JMP mem16 JMP nearlabel JMP mem 32 JMP farlabel JMP reg16 - Giải. DL,80h ; đảo bit 7 XOR [20 00h],AL ; [20 00h] ← [20 00h] XOR AL 5. Xử lý chuỗi : 5.1 Tiếp đầu lệnh REP : ♣ D ạng 1 : REP lệnh xử lý chuỗi - Giải thích : giảm CX, lặp lại lệnh theo sau Nếu CX