Bài giảng Lập trình Hợp ngữ - Chương 11: Lập trình xử lí màn hình và bàn phím
Giới thiệu màn hình & việc quản lý màn hình
Hiểu được tổ chức của màn hình.
So sánh chức năng điều khiển màn hình của INT 10h của ROM BIOS với chức năng của INT 21h.
Biết cách lập trình quản lý màn hình trong ASM.
Biết cách lập trình xử lý phím và 1 số ứng dụng của nó.
cs mode INT 10h MOV AH, 1 ; đợi gỏ 1 phím INT 21H MOV AH, 0 ; set video mode MOV AL, 3 ; color text mode INT 10H31Chuoung 10 Lap trinh xu ly man hinhDạng con trỏ màn hình được tạo ra bằng cách chỉ định số dòng quét.Việc thay đổi dạng con trỏ chính là thay đổi số lượng và vị trí dòng quét này.Màn hình monochrome dùng 13 dòng (từ 0 – 0Ch)Màn hình CGA,VGA dùng 8 dòng (từ 0-7).CGA/EGAMONOCHROME07012HÀM 01INT 10H32Chuoung 10 Lap trinh xu ly man hinhEx: Minh họaThiết lập con trỏ có hình khối đặc.MOV AH , 1MOV CH, 0MOV CL,0CHINT 10HĐể thay đổi dạng con trỏ :AH = 1CH = TOP (dòng đầu)CL = BOTTOM (dòng cuối)33Chuoung 10 Lap trinh xu ly man hinhEx2: lưu kích thước con trỏ hiệnhành vào 1 biến trước khi thay đổi kích thước con trỏ để sau này phục hồi lại. MOV AH , 1MOV CX, 0607HINT 10HMOV AX, 4C00HINT 21HEx2: trả kích thước con trỏ về dạng mặc định trước khi thoát.MOV AH, 3MOV BH, 0INT 10HMOV SAVECURSOR, CXOR CH, 00100000INT 10H..... .MOV AH, 1MOV CX, SAVECURSORINT 10H34Chuoung 10 Lap trinh xu ly man hinhHÀM 02HINT 10HThiết lập vị trí hiện hành SET CURSOR POSITIONAH = 2 ; DH = CHỈ SỐ DÒNG ; DL = CHỈ SỐ CỘT ; BH= TRANG MÀN HÌNH CHỨA CURSOREx : THIẾT LẬP CURSOR TẠI TỌA ĐỘ (DÒNG 10, CỘT 20) CỦA TRANG 0; Chức năng set cursor; dòng 10; cột 20; trang 0 ; gọi BIOSMOV AH, 2MOV DH, 10MOV DL, 20MOV BH,0INT 10H35Chuoung 10 Lap trinh xu ly man hinhHÀM 03HINT 10HLấy vị trí cursor hiện hành GET CURSOR POSITIONAH =3 ; BH= TRANG MÀN HÌNH MUỐN LẤY CURSORGía trị trả về :CH= Dòng quét đầu của cursorCL = Dòng quét cuối của cursorDH = vị trí dòng màn hìnhDL = vị trí cột màn hình36Chuoung 10 Lap trinh xu ly man hinhHÀM 03HINT 10HLấy vị trí cursor hiện hành GET CURSOR POSITIONEx : lấy vị trí của cursor lưu vào biến. Thường dùng trong các tác vụ menu.MOV AH, 3MOV BH, 0INT 10HMOV SAVECURSOR, CXMOV CURRENT_ROW , DHMOV CURRENT_COL , DL37Chuoung 10 Lap trinh xu ly man hinhHÀM 05HINT 10HTHIẾT LẬP TRANG MÀN HÌNHSET VIDEO PAGEDOSSEG.MODEL SMALL.STACK 100H.CODEMAIN PROCMOV AX, @DATAMOV DS,AXAH = 5 ; AL = TRANG MÀN HÌNH SẼ LÀ TRANG HIỆN HÀNHEX : THAY ĐỔI TRANG MH KHI GỎ 1 PHÍM BẤT KỲMOV DX, OFFSET TRANG0INT 21HMOV AH , 1INT 21HSANG_TRANG_1 :MOV AH, 5MOV AL, 1 38Chuoung 10 Lap trinh xu ly man hinhHÀM 05HINT 10HTHIẾT LẬP TRANG MÀN HÌNHSET VIDEO PAGEINT 10HMOV AH, 9MOV DX, OFFSET TRANG1INT 21HMOV AH, 1INT 21HSANG_TRANG_0 :MOV AH, 5MOV AL, 0INT 10HMOV AX, 4C00HINT 21HMAIN ENDP.DATA TRANG0 DB ‘ DAY LA TRANG 0,$’ TRANG1 DB ‘ DAY LA TRANG 1,$’END MAIN39Chuoung 10 Lap trinh xu ly man hinhHÀM 06H, 07HINT 10HCUỘN MÀN HÌNHSCROLL WINDOW UP AND DOWNCUỘN MÀN HÌNH LÀ TÁC VỤ LÀM CHO DỮ LIỆU TRƯỢT LÊN HOẶC XUỐNG.CÁC DÒNG DỮ LIỆU BỊ CUỐN SẼ ĐƯỢC THAY THẾ BẰNG CÁC DÒNG TRỐNGTA ĐỊNH NGHĨA WINDOWS NHỜ HỆ TỌA ĐỘ HÀNG CỘT VỚI GỐC TỌA ĐỘ LÀ GÓC TRÊN TRÁI CỦA MÀN HÌNH.HÀNG SẼ THAY ĐỐI TỪ 0 ĐẾN 24 TỪ TRÊN XUỐNG.CỘT SẼ THAY ĐỔI TỪ 0 ĐẾN 79 TỪ TRÁI SANG PHẢI.TA CÓ THỂ CUỘN 1 VÀI DÒNG HOẶC CẢ WINDOWS.TOÀN BỘ WINDOWS BỊ CUỘN MÀN HÌNH BỊ XOÁ.40Chuoung 10 Lap trinh xu ly man hinhHÀM 06H, 07HINT 10HCUỘN MÀN HÌNHSCROLL WINDOW UP AND DOWNCÁC THÔNG SỐ :CUỘN LÊN AH =6 ; CUỘN XUỐNG AH = 7AL = SỐ DÒNG SẼ CUỘN ( = 0 NẾU CUỘN TOÀN BỘ MÀN HÌNH)CH, CL = TỌA ĐỘ HÀNG,CỘT CỦA GÓC TRÊN TRÁICỦA WINDOWSDH, DL = TOẠ ĐỘ HÀNG, CỘT CỦA GÓC DƯỚI PHẢI CỦA WINDOWSBH = THUỘC TÍNH MÀN HÌNH CỦA CÁC DÒNG TRỐNG KHI MÀN HÌNH ĐÃ CUỘN.41Chuoung 10 Lap trinh xu ly man hinhHÀM 06H, 07HINT 10HCUỘN MÀN HÌNHSCROLL WINDOW UP AND DOWNEX : XÓA MÀN HÌNH BẰNG CÁCH CUỘN LÊN TOÀN BỘ MÀN HÌNH VỚI THUỘC TÍNH NORMALMOV AH, 6MOV AL, 0MOV CH, 0MOV CL, 0MOV DL, 24MOV DH, 79MOV BH, 7INT 10HMOV AX, 0600HMOV CX, 0000HMOV DX, 184FHMOV BH, 7INT 10H42Chuoung 10 Lap trinh xu ly man hinhHÀM 06H, 07HINT 10HCUỘN MÀN HÌNHSCROLL WINDOW UP AND DOWNEX : CUỘN WINDOWS TỪ (10,20) TỚI (15,60), CUỘN XUỐNG 2 DÒNG, 2 DÒNG CUỘN SẼ CÓ THUỘC TÍNH VIDEO ĐẢO.MOV AX, 0702H MOV CX,0A14HMOV DX, 0F3CHMOV BH, 70HINT 10H43Chuoung 10 Lap trinh xu ly man hinhHÀM 08HINT 10HĐỌC 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ.READ CHARACTER AND ATTRIBUTEAH =8 ; BH = TRANG MÀN HÌNHTRI TRẢ VỀ :AL = KÝ TỰ ĐÃ ĐỌC ĐƯỢC ; AH = THUỘC TÍNH CỦA KÝ TỰEX : THIẾT LẬP CURSOR TẠI HÀNG 5 CỘT 1 SAU ĐÓ NHẬN 1 KÝ TỰ NHẬP.LƯU KÝ TỰ ĐÃ ĐỌC ĐƯỢC VÀ THUỘC TÍNH CỦA KÝ TỰ NÀY.GETCHAR :MOV AH, 8MOV BH, 0INT 10HMOV CHAR, ALMOV ATTRIB , AHLOCATE :MOV AH, 2MOV BH, 0MOV DX, 0501HINT 10H44Chuoung 10 Lap trinh xu ly man hinhHÀM 09HINT 10HGHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ.WRITE CHARACTER AND ATTRIBUTEAH =9 ; BH = TRANG VIDEO AL = KÝ TỰ SẼ XUẤT ; BL = THUỘC TÍNH CỦA KÝ TỰ SẼ XUẤT CX = HỆ SỐ LẶPCHỨC NĂNG 09H INT 10H : XUẤT (GHI) 1 HOẶC NHIỀU KÝ TỰ CÙNG VỚI THUỘC TÍNH CỦA CHÚNG LÊN MÀN HÌNH. CHỨC NĂNG NÀY CÓ THỂ XUẤT MỌI MÃ ASCII KỂ CẢ KÝ TỰ ĐỒ HỌA ĐẶC BIỆT CÓ MÃ TỪ 1 ĐẾN 3145Chuoung 10 Lap trinh xu ly man hinhHÀM 0AHINT 10HGHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ.WRITE CHARACTER AND ATTRIBUTEAH =9 ; BH = TRANG VIDEO AL = KÝ TỰ SẼ XUẤT ; BL = THUỘC TÍNH CỦA KÝ TỰ SẼ XUẤT CX = HỆ SỐ LẶPCHỨC NĂNG 0AH INT 10H : XUẤT (GHI) 1 HOẶC NHIỀU KÝ TỰ CÙNG VỚI THUỘC TÍNH CỦA CHÚNG LÊN MÀN HÌNH. CHỨC NĂNG NÀY CÓ THỂ XUẤT MỌI MÃ ASCII KỂ CẢ KÝ TỰ ĐỒ HỌA ĐẶC BIỆT CÓ MÃ TỪ 1 ĐẾN 3146Chuoung 10 Lap trinh xu ly man hinhHÀM 0AHINT 10HGHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ.WRITE CHARACTER AND ATTRIBUTEAH =9 ; BH = TRANG VIDEO AL = KÝ TỰ SẼ XUẤT ; BL = THUỘC TÍNH CỦA KÝ TỰ SẼ XUẤT CX = HỆ SỐ LẶPCHỨC NĂNG 0AH INT 10H : XUẤT (GHI) 1 HOẶC NHIỀU KÝ TỰ CÙNG VỚI THUỘC TÍNH CỦA CHÚNG LÊN MÀN HÌNH. CHỨC NĂNG NÀY CÓ THỂ XUẤT MỌI MÃ ASCII KỂ CẢ KÝ TỰ ĐỒ HỌA ĐẶC BIỆT CÓ MÃ TỪ 1 ĐẾN 3147Chuoung 10 Lap trinh xu ly man hinhHÀM 0FHINT 10HLẤY VIDEO MODEGET VIDEO MODEAH =0F ; BH = TRANG HIỆN HÀNH AH = SỐ CỘT MÀN HÌNH ; AL = MODE MÀN HÌNH HIỆN HÀNH CHỨC NĂNG 0FH INT 10H : LẤY VIDEO MODEEX : MOV AH,0FH ; Get Video Mode Function INT 10H ; gọi BIOS MOVE VIDEO_MODE, AL ; lưu Video Mode vào biến bộ nhớ MOV PAGE, BH ; lưu trang hiện hành.48Chuoung 10 Lap trinh xu ly man hinhLẬP TRÌNH XỬ LÝ PHÍM 1. Đọc phím nhấn : Chức năng AH = 0, ngắt 16H Vào : AH = 0 Ra : AL = mã ASCII nếu một phím ASCII được nhấn = 0 nếu phím điều khiển được nhấn AH = mã scan của phím nhấn 49Chuoung 10 Lap trinh xu ly man hinhLẬP TRÌNH XỬ LÝ PHÍMBÀN PHÍM50Chuoung 10 Lap trinh xu ly man hinhBÀN PHÍM51Chuoung 10 Lap trinh xu ly man hinhBÀN PHÍM52Chuoung 10 Lap trinh xu ly man hinhBÀN PHÍM53Chuoung 10 Lap trinh xu ly man hinhBÀN PHÍM54Chuoung 10 Lap trinh xu ly man hinhBÀN PHÍM55Chuoung 10 Lap trinh xu ly man hinhLẬP TRÌNH XỬ LÝ PHÍM Kiểm tra trạng thái các phím Ctrl, Alt, Shift : Chúng ta cĩ thể đọc trực tiếp từ địa chỉ 0:0417 hoặc lấy trong AL thơng qua hàm AH = 2 ngắt 16H. Cách đọc trực tiếp XOR AX, AX MOV ES, AX MOV AL, ES:[417H] TEST AL, 01H ; kiểm tra phím Shift JNZ SHIFT_DANGNHAN TEST AL, 04H ; kiểm tra phím Ctrl JNZ CTRL_DANGNHAN TEST AL, 08H ; Kiểm tra phím Alt JNZ ALT_DANGNHAN 56Chuoung 10 Lap trinh xu ly man hinh 3. Kiểm tra và thiết lập trạng thái các phím Caps/Num/Scroll Lock tương tự nhưng với mã scan khác Scroll = 10H, Num = 20H, Cap = 40H. 4. Đặt lại các trạng thái đèn Caps/Num/Scroll Lock, ta chỉ cần đặt lại giá trị ở địa chỉ 0:0417. Vd, để bật đèn Caps Lock và đổi trạng thái đèn Num Lock ta sẽ làm như sau:XOR AX, AXMOV ES, AX ; ES = 0MOV AL, ES:[417H] ; đọc trạng thái đèn OR AL, 40H ; bật đèn Caps Lock XOR AL, 20H ; đảo đèn Nums Lock MOV ES:[417H], AL ; MOV AH , 2H INT 16H 57Chuoung 10 Lap trinh xu ly man hinhBÀI TẬP LẬP TRÌNHBÀI 1 : VIẾT ĐOẠN CHƯƠNG TRÌNH LÀM CÁC VIỆC SAU : CUỘN WINDOW TỪ HÀNG 5, CỘT 10 TỚI HÀNG 20 CỘT 70 VỚI THUỘC TÍNH MÀN HÌNH ĐẢO. ĐỊNH VỊ CURSOR TẠI HÀNG 10, CỘT 20 HIỂN THỊ DÒNG TEXT “ DAY LA 1 DONG TEXT TRONG WINDOW” SAU KHI XUẤT TEXT ĐỢI NHẤN 1 PHÍM. CUỘN WINDOW TỪ HÀNG 5, CỘT 15 TỚI HÀNG 18 CỘT 68 VỚI THUỘC TÍNH THƯỜNG. XUẤT KÝ TỰ A VỚI THUỘC TÍNH NHẤP NHÁY TẠI GIỮA WINDOW. ĐỢI GỎ 1 PHÍM, XÓA TOÀN BỘ MÀN HÌNH..58Chuoung 10 Lap trinh xu ly man hinhBÀI TẬP LẬP TRÌNHBÀI 2 : VIẾT CHƯƠNG TRÌNH LÀM CÁC VIỆC SAU : XUẤT CHUỔI “GO VAO 1 KY TU THUONG : ‘ . KHI USER GỎ 1 KÝ TỰ (KHI GỎ KHÔNG HIỂN THI KÝ TỰ GỎ RA MÀN HÌNH) ,ĐỔI KÝ TỰ NÀY THÀNH CHỮ HOA RỒI XUẤT RA MÀN HÌNH.GIẢ SỬ CHỈ NHẬP CÁC KÝ TỰ HỢP LỆ. KHI GỎ KÝ TỰ MỞ RỘNG SẼ THOÁT VỀ DOS, NHƯNG CÓ LẼ BẠN CÒN NHÌN THẤY 1 KÝ TỰ XUẤT THÊM TRÊN MÀN HÌNH. GIẢI THÍCH. 59Chuoung 10 Lap trinh xu ly man hinh1. Viết chương trình để : a. Xố màn hình, tạo kích thước to nhất cho con trỏ và di chuyển nĩ đến gĩc trái trên b. Nếu nhấn phím Home : chuyển con trỏ đến gĩc trái trên, End : chuyển đến gĩc trái dưới, Page Dn : chuyển con trỏ đến gĩc phải dưới, Esc : kết thúc chương trình. 2. Dịch chuyển con trỏ đến gĩc trái trên màn hình nếu phím F1 được nhấn, gĩc trái dưới nếu phím F2 được nhấn. Chương trình sẽ bỏ qua các kí tự thơng thường. 3. Viết chương trình soạn thảo văn bản như sau : a. Xố màn hình, định vị con trỏ tại đầu dịng 12b. Để người sử dụng đánh vào các kí tự. Con trỏ dịch chuyển đi sau khi hiển thị kí tự nếu nĩ khơng ở tại lề phải của màn hìnhc. Phím mũi tên trái , phải, lên , xuống dịch con trỏ tương ứng d. Phím Insert : chèn kí tự, Delete : Xố một kí tự , Esc : kết thúc chương trình.60Chuoung 10 Lap trinh xu ly man hinhBÀI TẬP LẬP TRÌNHBÀI 3 : VIẾT CHƯƠNG TRÌNH LÀM CÁC VIỆC SAU :CHO PHÉP VẼ ĐƠN GIẢN NHỜ CÁC PHÍM MỦI TÊN TRÊN BÀN PHÍM ĐỂ DI CHUYỂN THEO HƯỚNG MONG MUỐN.PHẢI BẢO ĐẢM XUẤT CÁC KÝ TỰ GÓC THÍCH HỢP.BIẾT RẰNG MÃ ASCII CỦA 1 SỐ KÝ TỰ : xem bảng mã ASCIIMÃ SCAN CODE CỦA CÁC PHÍM MŨI TÊN :TRÁI 4BH PHẢI 4DH LÊN 48H XUỐNG 50H61Chuoung 10 Lap trinh xu ly man hinh
File đính kèm:
- Chuong_11_Lap_trinh_xu_ly_man_hinh.ppt