1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình học phần Vi xử lý (hệ đại học): Phần 2

37 23 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

(NB) Nối tiếp nội dung phần 1 cuốn giáo trình học phần "Vi xử lý", phần 2 giới thiệu tới người học các nội dung: Các cấu trúc lập trình, một số vấn đề nâng cao, liên kết Assembly với các ngôn ngữ bậc cao. Mời các bạn cùng tham khảo nội dung chi tiết.

Giáo trình VI XỬ LÝ http://www.ebook.edu.vn Bước 4: Vì tệp chương trình có cấu trúc *.EXE, nên ta bỏ qua bước Bước 5: Chạy tệp chương trình Vidu_exe ↵ Chương 4: CÁC CẤU TRÚC LẬP TRÌNH 4.1 Tổng quan Trong ngơn ngữ lập trình bậc cao, người ta thường sử dụng cấu trúc lập trình sau: - Cấu trúc - Cấu trúc rẽ nhánh + Rẽ nhánh (IF THEN ) + Rẽ hai nhánh (IF THEN ELSE ) + Rẽ nhiều nhánh (CASE OF ) - Cấu trúc lặp + Lặp xác định (FOR TO DO) + Lặp không xác định Điều kiện trước (WHILE DO ) Điều kiện sau (REPEAT UNTIL ) Sau ta nghiên cứu việc biểu diễn cấu trúc lập trình hợp ngữ lệnh hợp ngữ thực theo cấu trúc Vì vậy, muốn điều khiển rẽ nhánh chương trình, cần phải thực lệnh chuyển điều khiển 4.1.1 Các lệnh chuyển điều khiển 4.1.1.1 Các định hướng - Định hướng NEAR: Thơng thường lệnh điều khiển rẽ nhánh chương trình thực theo định hướng NEAR (Mặc định) Định hướng cho phép lệnh chuyển điều khiển thực khoảng ±126 byte Có nghĩa là, nhảy trước phía sau lệnh 126 byte - Định hướng FAR: Nếu có định hướng này, chương trình dịch cho phép lệnh chuyển điều khiển rẽ nhánh ngồi giới hạn ±126byte Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 55 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn 4.1.1.2 Điều kiện cho lệnh nhảy Các lệnh điều khiển rẽ nhánh chương trình phụ thuộc vào trạng thái cờ ghi cờ Vì vậy, ta tạo điều kiện cho lệnh số lệnh sau: a/ Lệnh CMP (Compare - so sánh) Dạng lệnh: CMP toan_hang_1,toan_hang_2 ý nghĩa: Lệnh thực lấy toan_hang_1 trừ cho toan_hang_2 kết khơng trả lại cho toan_hang_1 Nhưng tác động đến cờ trạng thái ghi cờ Ví dụ: MOV AL,3Ah ;AL=00111010 CMP AL,1Ch ; CF= 00111000 00111010 -00011100 00011110 Như vậy, xét đến cờ trạng thái ta thấy lệnh ảnh hưởng đến cờ sau: CF=0; PF=1; AF=1; ZF=0; SF=0; OF=0 b/ Lệnh Test (Kiểm tra) Dạng lệnh: TEST toan_hang_1,toan_hang_2 ý nghĩa: Lệnh kiểm tra bit toan_hang_1 với bit tương ứng toan_hang_2 Ví dụ: TEST AL,1 ;kiểm tra bit0 AL xem bit có hay khơng Nếu giá trị AL số lẻ bit0=1 4.1.1.3 Các lệnh điều khiển rẽ nhánh Về bản, xét đến số lệnh điều khiển rẽ nhánh nghiên cứu chương phần Ví dụ, xét lệnh JE Lệnh phụ thuộc vào cờ ZF Nếu ZF=1 lệnh JE thực Song, thực tế, xét đến điều kiện thực lệnh nhảy, ta cần quan tâm đến ý nghĩa từ viết tắt cho loại lệnh nhảy Các điều kiện thể như: A - Above; B -Bellow; C - Carry; E - Equal; G - Greater; L - Less; N - Not; Z - Zero kết hợp với để có ý nghĩa khác như: NLE; NGE; NL; LE; NG; GE; NA; NB; NAE; NBE; AE; BE 4.2 Cấu trúc Cấu trúc cấu trúc mà mã lệnh hợp ngữ thực công việc theo trình tự hết lệnh đến lệnh khác Ngữ pháp: Lệnh_1 Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 56 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn Lệnh_2 Lệnh_n Ví dụ: Viết đoạn chương trình thực nhập vào kí tự từ bàn phím, sau in hình kí tự dịng Giải: MOV AH,1 INT 21h MOV AH,2 MOV DL,13 INT 21h MOV DL,10 INT 21h MOV DL,AL INT 21h 4.3 Cấu trúc rẽ nhánh 4.3.1 Cấu trúc IF…THEN… Đây cấu trúc điều khiển rẽ nhánh chương trình với việc kiểm tra điều kiện Nếu điều kiện thoả mãn thực cơng việc Nếu điều kiện khơng thoả mãn bỏ qua cơng việc Điều_kiện Sai Đúng Công_việc Ngữ pháp: IF điều_kiện THEN cơng_việc Ví dụ: Viết đoạn chương trình thực nhập vào kí tự Nếu kí tự 'A' hiển thị dịng Giải: MOV AH,1 ;Nhap vao tu ban phim mot ki tu INT 21h ;ki tu nam AL CMP AL,41h JNE ketthuc PUSH AX ;Cat tam ki tu vao ngan xep MOV Ah,2 ;Dua tro MOV DL,13 ;xuong dong tiep theo INT 21h Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 57 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn MOV DL,10 ;ve ve dau dong INT 21h POP DX ;Lay ki tu va dua truc tiep vao DL INT 21h ;In man hinh Ketthuc: MOV AH,4Ch INT 21h Đoạn chương trình thực cho phép người sử dụng nhập vào từ bàn phím kí tự Sau đó, so sánh với mã ASCII 'A' Nếu khơng thực lệnh sau lệnh "JNE ketthuc" kết thúc Nếu khơng, máy bỏ qua lệnh kết thúc chương trình hàm ngắt 4Ch ngắt 21h 4.3.2 Cấu trúc IF THEN…ELSE Trong thực tế, thường đưa điều kiện Nếu trường hợp thoả mãn thực cơng việc Ngược lại, khơng thực cơng việc khác Ngữ pháp: IF điều_kiện THEN Điều_kiện Sai Công_việc Đúng Cơng_việc cơng_việc_1 ELSE cơng_việc_2 END_IF Ví dụ: Viết đoạn chương trình hợp ngữ thực nhập vào từ bàn phím kí tự Nếu kí tự nhập vào có mã ASCII nhỏ mã ASCII số đưa hình thơng báo "Kí tự đứng trước '1' bảng mã", ngược lại, đưa hình thơng báo "Kí tự đứng sau '1' bảng mã" Giải: Đoạn chương trình thể sau: * Giả thiết: thơng báo "Kí tự đứng trước '1' bảng mã" lưu biến truoc, thơng báo "Kí tự đứng sau '1' bảng mã" lưu biến sau Đoạn chương trình viết sau: ;Nhap ki tu tu ban phim mov ah,1 int 21h ;Bat dau cau truc cmp AL,'1' ;so sanh ki tu nhap vao voi '1' JL then_ Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 58 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn MOV AH,9 LEA DX,sau INT 21h JMP End_if then_: MOV AH,9 LEA DX,truoc INT 21h end_if: 4.3.3 Cấu trúc rẽ nhánh CASE…OF… Là cấu trúc đa nhánh Nó kiểm tra ghi, biến hay giá trị riêng rẽ miền giá trị Ngữ pháp: CASE biểu_thức Giá_trị_1: công_việc_1 Giá_trị_2: công_việc_2 Biểu thức Giá trị Công việc Giá trị Công việc Giá trị n Công việc n Giá_trị_n: công_việc_n END CASE Như vậy, biểu thức giá trị nào, cơng việc tương ứng thực Ví dụ: Viết đoạn chương trình thực nhập vào kí tự Nếu kí tự đứng trước 'A' bảng mã ASCII đưa thơng báo kí tự đứng trước 'A' Nếu kí tự nhập vào 'A' đưa thơng báo kí tự 'A' Nếu đứng sau 'A' đưa thơng báo kí tự đứng sau 'A' Giải: Giả thiết biến truoc, dung, sau chứa nội dung chuỗi thông báo cần đưa Ta thực đoạn chương trình sau: ;Nhap vao ki tu mov ah,1 int 21h ;CASE OF CMP AL,'A' JL L1 JE L2 JG L3 L1: MOV AH,9 Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 59 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn LEA DX,TRUOC INT 21H JMP END_ L2: MOV AH,9 LEA DX,DUNG INT 21H JMP END_ L3: MOV AH,9 LEA DX,SAU INT 21H END_: 4.3.4 Cấu trúc rẽ nhánh với điều kiện kép Là dạng cấu trúc rẽ nhánh mà đó, điều kiện kết hợp hai hay nhiều điều kiện khác Điều kiện kép có hai dạng 1/ Điều kiện kết hợp AND Là cấu trúc rẽ nhánh mà có nhiều điều kiện kết hợp Nếu tất điều kiện thoả mãn cơng việc thực Ngược lại, thực cơng việc khác khơng thực Ví dụ: Viết đoạn chương trình thực nhập vào từ bàn phím kí tự Kiểm tra xem phím nhập vào có phải chữ số khơng Giải: mov ah,1 int 21h CMP AL,'0' JL END_IF CMP AL,'9' JG END_IF ;THEN MOV AH,9 LEA DX,SO INT 21H END_IF: MOV AH,4Ch INT 21h Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 60 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn 2/ Điều kiện kết hợp OR Là cấu trúc rẽ nhánh mà có nhiều điều kiện kết hợp Nếu điều kiện thoả mãn cơng việc thực Ngược lại, tất điều kiện không thoả mãn thực cơng việc khác khơng thực Ví dụ: Viết đoạn chương trình thực nhập vào từ bàn phím kí tự Kiểm tra xem phím nhập vào có phải 'Y' 'y' khơng Giải: Giả thiết có hai biến yeucau chứa thông báo nhập vào; dung chứa thông báo kí tự nhập vào 'y' 'Y' Đoạn chương trình viết sau: MOV AH,9 LEA DX,yeucau INT 21h mov ah,1 int 21h CMP AL,'Y' JE THEN_ CMP AL,'y' JE THEN_ JMP END_IF THEN_: MOV AH,9 LEA DX,DUNG INT 21H END_IF: MOV AH,4Ch INT 21h 4.4 Cấu trúc lặp 4.4.1 Cấu trúc FOR…TO…DO… Đây dạng cấu trúc lặp với số lần lặp xác định CX=số_lần_lặp Ngữ pháp: Công_việc FOR số_lần_lặp DO công_việc Đầu tiên, gán cho ghi đếm CX giá trị số lần lặp Sau đó, thực công việc Sau lần lặp, giảm giá trị ghi CX đơn vị kiểm tra với Nếu chưa Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY CX=CX-1 CX=0? Đúng Sai Trang 61 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn tiếp tục thực cơng viêc CX=0 Trong tập lệnh vi xử lý 8086 tồn lệnh sử dụng phù hợp cấu trúc Đó lệnh LOOP Lệnh tự động giảm ghi CX đơn vị sau so sánh CX với Ví dụ: Viết đoạn chương thực nhập vào từ bàn phím kí tự Sau cho hiển thị 200 lần hình Giải: MOV AH,9 LEA DX,YEUCAU INT 21H MOV CX,200 MOV AH,1 INT 21H PUSH AX MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H POP AX MOV AH,2 FOR_: MOV DL,AL INT 21H LOOP FOR_ 4.4.2 Cấu trúc WHILE…DO… Là cấu trúc lặp phụ thuộc vào điều kiện Ngữ pháp: Điều_kiện WHILE điều_kiện DO công_việc Công_việc thực điều_kiện trở nên sai sai Ví dụ: Viết đoạn chương trình thực đếm số kí tự nhập vào từ bàn phím Đúng Cơng_việc Giải: XOR CX,CX Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 62 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn MOV AH,1 WHILE_: INT 21H CMP AL,13 JE END_WHILE INC CX JMP WHILE_ END_WHILE: MOV AH,4CH INT 21H 4.4.3 Cấu trúc REPEAT…UNTIL… Ngữ pháp: REPEAT Công_việc cong_việc UNTIL điều_kiện Điệu_kiện Đây cấu trúc lặp mà cơng_việc thực trước, sau kiểm tra điều_kiện Nếu Đúng điều_kiện kết thúc q trình lặp Ngược lại, điều_kiện cịn sai quay trở lại thực cơng_việc sai Ví dụ: Viết đoạn chương trình thực nhập vào từ bàn phím chuỗi kí tự kết thúc việc nhấn phím ENTER Giải: MOV AH,9 LEA DX,YEUCAU INT 21H REPEAT_: MOV AH,1 INT 21H CMP AL,13 JNE REPEAT_ MOV AH,4Ch INT 21h 4.5 Cấu trúc chương trình Nhằm mục đích làm cho chương trình ngắn gọn dễ hiểu, thông thường người ta thực chia nhỏ chương trình thành Module khác nhau, mỗii Module thực Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 63 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn một khèi công việc định Mỗi Module gọi chương trình Trong lập trình hợp ngữ thơng thường người ta sử dụng loại chương trình thủ tục Cấu trúc chương trình loại thực sau: 4.5.1 Cấu trúc chương trình 1/ Cấu trúc: PROC [kiểu] ;Thân chương trình ; RET ENDP Trong đó: + Tên ctc: Là tên Chương trình m người sử dụng tự đặt theo qui định đặt tên ASSEMBLY + PROC, ENDP: Các lệnh giả thực để khai báo bắt đầu kết thúc chương trình + kiểu: NEAR FAR - NEAR (Mặc định) có nghĩa dịng lệnh gọi thủ tục đoạn với thủ tục - FAR có nghĩa dịng lệnh gọi thủ tục đoạn khác 2/ Ví dụ: xoamh PROC MOV AH,0 MOV AL,3 INT 10h RET xoamh ENDP 3/ Một số ý: - Tránh trường hợp sau thực xong chương trình con, nội dung ghi bị thay đổi, thường người ta sử dụng lệnh PUSH POP chương trình để đưa tạm vào ngăn xếp sau lấy lại cho ghi Ví dụ đoạn chương trình trên, sau thực chương trình xong, nội dung ghi AX bị thay đổi Ta viết lại sau: xoamh PROC PUSH AX ; đẩy tạm AX vào ngăn xếp MOV AH,0 MOV AL,3 Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 64 Giáo trình VI XỬ LÝ CLD http://www.ebook.edu.vn ;Dinh huong tu trai sang phai MOV CX,8 ;so ki tu chuoi st1 REP MOVSB ;Chuyen ca byte st1 sang st2 5.3.3 Lệnh lưu chuỗi Trong nhiều trường hợp, cần phải thực nhập vào chuỗi, sau in chuỗi hình Muốn thực điều này, ta phải lưu chuỗi nhập vào vào biến kiểu chuỗi Lệnh lưu chuỗi sau: Dạng lệnh: STOSB ;STOre String Byte - lưu chuỗi byte Lệnh có tác dụng chuyển nội dung ghi AL đến byte định địa ES:DI Sau lệnh thực hiện, DI tăng DF=0 giảm DF=1 Lệnh không ảnh hưởng đến cờ 5.3.4 Lệnh nạp chuỗi Muốn chuyển chuỗi kí tự lưu hình, ta sử dụng hàm 09h ngắt 21h Song, hàm yêu cầu chuỗi phải kết thúc dấu '$' Mặt khác, thực tế, nhập vào người quan tâm tới việc phải nhập vào dấu '$' kết thúc Để giải vấn đề này, ta sử dụng hàm 02h ngắt 21h kết hợp với lệnh nạp chuỗi Dạng lệnh: LODSB ;LOaD String Byte - Nạp chuỗi byte Lệnh chuyển byte địa DS:SI vào AL Sau lệnh này, SI tăng thêm DF=0 giảm DF=1 5.4.2.4 Lệ DS,AX ;Khoi tao DS MOV ES,AX ;va ES LEA DI,st1 ;DI tro den chuoi st1 CLD ;Xu li tu trai sang phai MOV AL,'A' ;Ki tu can tim MOVSB ;Duyet Byte dau tien MOVSB ;Duyet Byte thu hai 5.3.5 Ví dụ Nhập vào chuỗi kí tự, sau hiển thị 10 kí tự hình dịng Chương trình: title ct MODEL Small STACK 100h DATA STR DB 80 DUP(0) ;chuoi luu ki tu nhap vao Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 77 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn CRLF DB 13,10,'$' ;xuong dong va ve dau dong CODE main PROC MOV AX,@DATA MOV DS,AX ;khoi tao DS MOV ES,AX ;va ES LEA DI,STR ;DI tro toi chuoi CALL READ ;nhap chuoi tu ban phim MOV AH,09H ;xuong dong LEA DX,CRLF ;ve dau dong INT 21H LEA SI,STR ;SI tro toi chuoi MOV BX,10 ;so ki tu hien thi CALL ;hien thi cac ki tu DISP MOV AH,4Ch INT 21h main ENDP READ PROC NEAR ;Doc va luu chuoi ;Vao: DI chua dia chi offset ua chuoi ;Ra: DI chua dia chi offset cua chuoi ; BX chua so ki tu nhan duoc PUSH AX PUSH DI ;Xu li tu ben trai sang CLD XOR BX,BX ;BX=0 MOV AH,1 ;Nhap ki tu INT 21h WHILE1: CMP AL,13 ;ki tu nhap la ENTER? JE ;Dung, thoi nhap END_WHILE CMP AL,8 ;ki tu nhap la BACKSPACE? JNE ELSE_ ;Khong, ki tu tiep theo DEC BX ;dung, xoa ki tu truoc Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 78 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn JMP READ_ ;Nhap tiep ELSE_: STOSB ;Luu vao chuoi INC BX ;chuan bi ki tu tiep READ_: INT 21H ;nhap tiep JMP WHILE1 ;ki tu sau END_WHILE: POP DI POP AX RET READ ENDP DISP PROC NEAR ;Hien thi mot chuoi ki tu ;Vao: SI=offset chuoi ; BX=so cac ki tu can hien thi PUSH AX PUSH BX PUSH DX PUSH SI MOV CX,BX ;so lan hien thi JCXZ ;bang 0, khong hien thi EXIT ;xu li tu trai sang phai CLD MOV AH,2 ;chuan bi TOP: LODSB ;ki tu AL MOV DL,AL ;chuyen sang DL de hien thi INT 21h ;hien thi ki tu LOOP ;Lap lai cho den het chuoi TOP EXIT: POP SI POP DX POP BX POP AX Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 79 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn RET DISP ENDP END main 5.4 Lập trình xử lý số thực 5.5 Lập trình cho vi xử lý tiên tiến Cấu trúc lệnh vi xử lý thay đổi, dẫn đến phương thức tác động phần thay đổi Mặc dù VXL tiên tiến có hỗ trợ cho chế độ 8086, song khơng thể tận dụng tối đa đặc tính Để sử dụng tối đa cơng dụng VXL tiên tiến, ta cần phải truy nhập lệnh sử dụng số dẫn hướng tuỳ theo qui định loại vi xử lý Ví dụ: Bộ VXL 80286 bổ sung số lệnh như: PUSHA, POPA, Lệnh IMUL với nhiều toán hạng Ta sử dụng lệnh cách: Trước sử dụng lệnh ta phải đặt dẫn hướng 286 dòng, sau trả lại cho chế độ 8086 ta đặt dẫn hướng 8086 MOV AL,5 MOV BL,10 ADD AL,BL 286 PUSHA ;Dat lenh doan lenh 80286, dung MOV AL,15H SUB AL,BL MOV [BX],10 IMUL AL,[BX],3 ;co the su dung IMUL nhu vay POPA 8086 PUSHA ;Dat ngoai doan lenh cua 286 la sai Chương LIÊN KẾT ASSEMBLY VỚI CÁC NGƠN NGỮ BẬC CAO 6.1 Lập trình mã lệnh mã máy Một chương trình viết hợp ngữ (Assembly) thường dài khó hơn, lại thực nhanh chương trình tương tự viết ngơn ngữ bậc cao (Turbo PASCAL, C++, ) Vì vậy, để chương trình viết kết hợp tốc độ hợp ngữ tính dễ hiểu, ngắn gọn ngơn ngữ lập trình bậc cao, lập trình viên thường viết số Modul chương trình cần đến việc xử lý nhanh hợp ngữ, lục phân) trực tiếp vào chương trình taij vị trí (có thể thủ tục, hàm chương trình chính) Phương pháp thực thủ tục INLINE Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 80 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn 6.1.1 Cú pháp INLINE(val/val/val/ /val); Trong đó: val: Là giá trị phải phân cách dấu “ / ” Các giá trị dạng thập phân, thập lục phân nhị phân Các giá trị lệnh mã máy thực thao tác Các giá trị thuộc kiểu liệu bit tạo 1byte mã lệnh liệu, giá trị thuộc kiểu liệu 16 bit tạo byte mã lệnh liệu 6.1.2 Thực Khi gặp phát biểu INLINE, PASCAL chuyển giá trị sang mã máy tương ứng máy trực tiếp thực Chương trình dịch tốn nhiều thời gian cho việc dịch lệnh Vì vậy, việc thực lệnh nhanh 6.1.3 Một số ý Các giá trị biểu diễn dạng thập lục phân phải có dấu “ $ ” đứng trước Có thể ghép biến PASCAL vào vị trí giá trị thích hợp cách trước tên biến sử dụng dấu “ < ” Các phát biểu INLINE viết tách gộp lại Nếu phát biểu INLINE nội dung hàm giá trị trả lại hàm phải tuân thủ quy định sau: Kiểu liệu Giá trị trả lại Byte Boolean Char AL Liệt kê (8 bít) Shortint Word Integer AX Liệt kê (16 bít) Longint DX: AX Real DX:BX:AX 6.1.4 Ví dụ Viết chương trình sử dụng phát biểu INLINE thực tính tổng hai số Giải: Program thu; Uses crt; Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 81 Giáo trình VI XỬ LÝ Var http://www.ebook.edu.vn so1,so2:integer; (* -*) Function sum(num1:integer;num2:integer):integer; Begin Inline($8B/$46/ INTR($ 10,R); - Riêng với số hiệu ngắt 21h ta sử dụng thủ tục MSDOS(); Ví dụ: INTR($21,R); MSDOS(R); 6.3.3.2 Một số ngắt thông dụng Ngắt 21h: Ngắt chức DOS Hàm 01h: Vào kí tự từ bàn phím hiển thị hình Mơ tả Ví dụ minh hoạ Vào: AH=01h MOV AH,01H Ra: AL=Mã ASCII kí tự nhập vào INT 21H Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 87 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn MOV ktu,AL Hàm 02h: In ký tự hình văn Vào AH=02h MOV AH,02H ;In hình DL= mã ASCII kí tự nhập vào MOV DL,’A’ ; chữ ’A’ Ra Khơng INT 21H Hàm 08h: Vào kí tự từ bàn phím,khơng hiển thị kí tự hình Vào Ra AH=01h AL= mã ASCII kí tự nhập vào MOV AH,08H INT 21H MOV ktu,AL Hàm 09h: In chuỗi kí tự hình Vào AH=09h DS:DX=Con trỏ đến chuỗi kết ‘$’ Ra MOV AH,09H thúc LEA DX,chuỗi INT 21H Không Hàm 4Ch: Kết thúc chương trình EXE Vào : AH=4Ch MOV Ra : Khơng INT AH,4CH 21H Hàm 2Ah: Xác định ngày tháng Vào : AH=2Ah R.AH:=$2A INTR($21,R) Ra : AL=ngày tuần(0-6) Ngay-tuan:=R.AL; CX=năm(1980-2099) Nam:=R.CX; DH=tháng(1-12) Thang:=R.DH; DL=ngày(1-31) Ngay:=R.DL; Hàm 2Bh: Đặt ngày tháng (Đặt lại ngày hệ thống) Vào : AH= 2Bh R.AH:=$2B; CX=năm(1980-2099) Nam:=R.CX; DH=tháng(1-12) Thang:=R.DH; DL= ngày(1-31) Ngay:=R.DL; INTR($21,R); Ra : AL=0 ngày hợp lệ; IF R>AL=0 then write(‘OK!’); AL=FFh ngày không hợp lệ Else write(‘Not OK!’); Hàm 2Ch: Xác định thời gian hệ thống Bộ môn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 88 Giáo trình VI XỬ LÝ Vào: AH=2Ch http://www.ebook.edu.vn R.AH:=$2C; NTR($21,R); Ra : CH=giờ(0-23) Gio:=R.CH; CL=phút(0-59) Phut:=R.CL; DH=giây(0-59) Giay:=R.DH; DL=phần trăm giây(0-99) Phan_tram:=R.DL Hàm 2Dh: Đặt thời gian (Đặt lại thời gian hệ thống) Vào: AH=2Dh R.AH:=$2D; CH=giờ(0-23) R.CH:=gio; CL=phút(0-59) R.CL:=phut; DH=giây(0-59) R.DH:=giay; DL=phần trăm giây(0-99) R.DL:=phan_tram; INTR($21,R); Ra : AL=0 thời gian hợp lệ If R.AL=0 then write(‘OK!’) AL=FFh thời gian không hợp lệ Else write(‘Not OK!’); Hàm 30h: Xác định số phiên DOS Vào : AH=30h R.AH:=30H Ra : INTR($21,R); BX=0000h CX=0000h Ver1:=R.AL; AL=số trước dấu phẩy Ver2:=R.AH; AH=số sau dấu phẩy Write(‘MS_DOS Version ‘,ver1,’,’,ver2) Hàm 36h: Xác định dung lượng trống đĩa Vào :AH=36h R.AH:=36H; DL=ổ đĩa(0_mặc định;1_A;1_B; ) R.DL:=1; INTR($21,R); Ra : BX=Số liên cung chưa dùng Free_cyl:=R.BX; CX=Số byte/cung Bps:=R.CX; {byte per sector} DX=Số liên cung / đĩa Cpd:=R.DX; {cylinder per dick} AX=FFFFh ổ đĩa không hợp lệ=số cung/liên cung(hợp lệ) If AX=$FFFF then write(‘No Dick’) Ngắt 10h: Else spc:=R.AX; {sector per cylinder); Ngắt hình Hàm 00h: Chọn chế độ hiển thị cho hình Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 89 Giáo trình VI XỬ LÝ Vào: http://www.ebook.edu.vn AH=0h AL=chế độ R.AH:=0h; 03h:Text 80*25*16 R.AL:=mode; 12h:Grapt 640*480*16 INTR($10,R); 13h: Grapt 320*200*256 Ra : Không Hàm 02h: Dịch chuyển Con trỏ Vào: AH=02h R.AH:=02h; BH=trang số R.BH:=trang; DH=hàng R.DH:=hang; DL=cột R.DL:=cot; Ra : Khơng INTR($10,R) Hàm 06h: Cuốn hình hay cửa sổ lên số dòng xác định Vào: AH=06h R.AH:=06h; AL=số dịng cuốn(=0;tồn bộ) R.AL:=so_dong; BH=thuộc tính dịng trống R.BH:=thuoc_tinh; CH,DL=dịng,cột góc trái R.CH:=dong1;R.CL=cot1; DL,DL=dịng,cột góc phải R.DH:=dong2;R.DL=cot2; Ra: INTR($10,R); Khơng Hàm 07h: Cuốn hình hay cửa sổ xuống dòng xác định Vào : AH=07h R.AH:=07h; AL=số dịng cuốn(=0;tồn bộ) R.AL:=so_dong; BH=thc tính dịng trống R.BH:=thuoc_tinh; CH,CL=dong,cột góc phải R.CH:=dong1;R.CL=cot1; Ra : Khơng R.DH:=dong2;R.DL=cot2; INTR($10,R); Hàm 09h: Hiển thị kí tự với thuộc tính vị trí Con trỏ Vào: AH=09h R.AH:=09h; AL=mã ASCII kí tự R.AL:=kitu; BH=trang số R.BH:=0; {trang so 0} BL=thuộc tính(text); màu(graph) R.BL:=mau; CX=số lần viết kí tự R.CX=solan; Ra :Khơng INTR($10,R); Ngắt 16h: Ngắt bàn phím Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 90 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn Hàm 00h: Đọc kí tự từ bàn phím Vào : AH=00h R.AH:=00h; Ra :AH=mã quét phím INTR($16,R); AL=mã ASCII kí tự R.AH:=ma_scan; R.AL:=ma_ascii; Hàm 02h: Lấy cờ bàn phím Vào : AH=02h R.AH:=00h; Ra : AL=các cờ INTR($16,R); Bit 7: insert; bit 6:capslock; bit 5:numlock; bit 4:scrollock R.AH:=ma_scan; R.AL:=ma_ascii; Ngắt 33h: Ngắt chuột Hàm 00h: Khởi tạo chuột Vào : AX=00h R.AX:=00h; Ra : AX=FFFFh không nhận chuột INTR($33,R); if R.AX=FFFFh then WRITE('Khong khoi tao duoc chuot!'); Hàm 01h: Hiện trỏ chuột Vào : AX=01h R.AX:=01h; Ra : Không INTR($33,R); Hàm 02h: ẩn trỏ chuột Vào : AX=02h R.AX:=02h; Ra : Không INTR($33,R); Hàm 03h: Trạng thái nhấn chuột Vào : AX=03h R.AX:=03h; Ra : CX,DX=toạ độ ảo chuột INTR($33,R); BX=trạng thái nút chuột nhấn X=R.CX shl 3+1; bit 0: Nút trái Y=R.DX shl 3+1; bit 1: Nút phải if (R.BX and 1)=1 then bit 2: Nút WRITE('Phim trai chuot!!!'); Bộ mơn Kỹ thuật máy tính – Khoa CNTT – ĐHSPKT_HY Trang 91 ... ĐHSPKT_HY Trang 79 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn RET DISP ENDP END main 5.4 Lập trình xử lý số thực 5.5 Lập trình cho vi xử lý tiên tiến Cấu trúc lệnh vi xử lý thay đổi, dẫn đến... 86 Giáo trình VI XỬ LÝ http://www.ebook.edu.vn - Xử lý tham số đầu Ví dụ : MOV AH,01h ;Nhập vào kí tự INT 21 h ;Kí tự nằm AL MOV DL,AL ;Lấy từ AL sang DL INT 21 h ;Hiển thị 2. Gọi ngắt PASCAL Vi? ??c... Trang 89 Giáo trình VI XỬ LÝ Vào: http://www.ebook.edu.vn AH=0h AL=chế độ R.AH:=0h; 03h:Text 80 *25 *16 R.AL:=mode; 12h:Grapt 640*480*16 INTR($10,R); 13h: Grapt 320 *20 0 *25 6 Ra : Không Hàm 02h: Dịch

Ngày đăng: 11/05/2021, 04:19

Xem thêm:

TỪ KHÓA LIÊN QUAN