Bài giảng Cấu trúc máy tính - Chương 11: Lập trình xử lý màn hình & 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ó.
3 MOV BH, 0 INT 10H MOV SAVECURSOR, CX OR CH, 00100000 INT 10H ..... . MOV AH, 1 MOV CX, SAVECURSOR INT 10H 34 Chuoung 10 Lap trinh xu ly man hinh HÀM 02H INT 10H Thiết lập vị trí hiện hành SET CURSOR POSITION AH = 2 ; DH = CHỈ SỐ DÒNG ; DL = CHỈ SỐ CỘT ; BH= TRANG MÀN HÌNH CHỨA CURSOR Ex : 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 BIOS MOV AH, 2 MOV DH, 10 MOV DL, 20 MOV BH,0 INT 10H 35 Chuoung 10 Lap trinh xu ly man hinh HÀM 03H INT 10H Lấy vị trí cursor hiện hành GET CURSOR POSITION AH =3 ; BH= TRANG MÀN HÌNH MUỐN LẤY CURSOR Gía trị trả về : CH= Dòng quét đầu của cursor CL = Dòng quét cuối của cursor DH = vị trí dòng màn hình DL = vị trí cột màn hình 36 Chuoung 10 Lap trinh xu ly man hinh HÀM 03H INT 10H Lấy vị trí cursor hiện hành GET CURSOR POSITION Ex : 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, 3 MOV BH, 0 INT 10H MOV SAVECURSOR, CX MOV CURRENT_ROW , DH MOV CURRENT_COL , DL 37 Chuoung 10 Lap trinh xu ly man hinh HÀM 05H INT 10H THIẾT LẬP TRANG MÀN HÌNH SET VIDEO PAGE DOSSEG .MODEL SMALL .STACK 100H .CODE MAIN PROC MOV AX, @DATA MOV DS,AX AH = 5 ; AL = TRANG MÀN HÌNH SẼ LÀ TRANG HIỆN HÀNH EX : THAY ĐỔI TRANG MH KHI GỎ 1 PHÍM BẤT KỲ MOV DX, OFFSET TRANG0 INT 21H MOV AH , 1 INT 21H SANG_TRANG_1 : MOV AH, 5 MOV AL, 1 38 Chuoung 10 Lap trinh xu ly man hinh HÀM 05H INT 10H THIẾT LẬP TRANG MÀN HÌNH SET VIDEO PAGE INT 10H MOV AH, 9 MOV DX, OFFSET TRANG1 INT 21H MOV AH, 1 INT 21H SANG_TRANG_0 : MOV AH, 5 MOV AL, 0 INT 10H MOV AX, 4C00H INT 21H MAIN ENDP .DATA TRANG0 DB ‘ DAY LA TRANG 0,$’ TRANG1 DB ‘ DAY LA TRANG 1,$’ END MAIN 39 Chuoung 10 Lap trinh xu ly man hinh HÀM 06H, 07H INT 10H CUỘN MÀN HÌNH SCROLL WINDOW UP AND DOWN CUỘ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ỐNG TA ĐỊ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Á. 40 Chuoung 10 Lap trinh xu ly man hinh HÀM 06H, 07H INT 10H CUỘN MÀN HÌNH SCROLL WINDOW UP AND DOWN CÁC THÔNG SỐ : CUỘN LÊN AH =6 ; CUỘN XUỐNG AH = 7 AL = 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 WINDOWS DH, DL = TOẠ ĐỘ HÀNG, CỘT CỦA GÓC DƯỚI PHẢI CỦA WINDOWS BH = THUỘC TÍNH MÀN HÌNH CỦA CÁC DÒNG TRỐNG KHI MÀN HÌNH ĐÃ CUỘN. 41 Chuoung 10 Lap trinh xu ly man hinh HÀM 06H, 07H INT 10H CUỘN MÀN HÌNH SCROLL WINDOW UP AND DOWN EX : 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 NORMAL MOV AH, 6 MOV AL, 0 MOV CH, 0 MOV CL, 0 MOV DL, 24 MOV DH, 79 MOV BH, 7 INT 10H MOV AX, 0600H MOV CX, 0000H MOV DX, 184FH MOV BH, 7 INT 10H 42 Chuoung 10 Lap trinh xu ly man hinh HÀM 06H, 07H INT 10H CUỘN MÀN HÌNH SCROLL WINDOW UP AND DOWN EX : 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,0A14H MOV DX, 0F3CH MOV BH, 70H INT 10H 43 Chuoung 10 Lap trinh xu ly man hinh HÀM 08H INT 10H ĐỌC 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ. READ CHARACTER AND ATTRIBUTE AH =8 ; BH = TRANG MÀN HÌNH TRI 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, 8 MOV BH, 0 INT 10H MOV CHAR, AL MOV ATTRIB , AH LOCATE : MOV AH, 2 MOV BH, 0 MOV DX, 0501H INT 10H 44 Chuoung 10 Lap trinh xu ly man hinh HÀM 09H INT 10H GHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ. WRITE CHARACTER AND ATTRIBUTE AH =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ẶP CHỨ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 31 45 Chuoung 10 Lap trinh xu ly man hinh HÀM 0AH INT 10H GHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ. WRITE CHARACTER AND ATTRIBUTE AH =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ẶP CHỨ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 31 46 Chuoung 10 Lap trinh xu ly man hinh HÀM 0AH INT 10H GHI 1 KÝ TỰ VÀ THUỘC TÍNH KÝ TỰ. WRITE CHARACTER AND ATTRIBUTE AH =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ẶP CHỨ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 31 47 Chuoung 10 Lap trinh xu ly man hinh HÀM 0FH INT 10H LẤY VIDEO MODE GET VIDEO MODE AH =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 MODE EX : 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. 48 Chuoung 10 Lap trinh xu ly man hinh LẬ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 49 Chuoung 10 Lap trinh xu ly man hinh LẬP TRÌNH XỬ LÝ PHÍM BÀN PHÍM 50 Chuoung 10 Lap trinh xu ly man hinh BÀN PHÍM 51 Chuoung 10 Lap trinh xu ly man hinh BÀN PHÍM 52 Chuoung 10 Lap trinh xu ly man hinh BÀN PHÍM 53 Chuoung 10 Lap trinh xu ly man hinh BÀN PHÍM 54 Chuoung 10 Lap trinh xu ly man hinh BÀN PHÍM 55 Chuoung 10 Lap trinh xu ly man hinh LẬ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 56 Chuoung 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, AX MOV ES, AX ; ES = 0 MOV 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 57 Chuoung 10 Lap trinh xu ly man hinh BÀI TẬP LẬP TRÌNH BÀ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.. 58 Chuoung 10 Lap trinh xu ly man hinh BÀI TẬP LẬP TRÌNH BÀ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. 59 Chuoung 10 Lap trinh xu ly man hinh 1. 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 12 b. Để 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ình c. 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. 60 Chuoung 10 Lap trinh xu ly man hinh BÀI TẬP LẬP TRÌNH BÀ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ã ASCII MÃ SCAN CODE CỦA CÁC PHÍM MŨI TÊN : TRÁI 4BH PHẢI 4DH LÊN 48H XUỐNG 50H 61 Chuoung 10 Lap trinh xu ly man hinh
File đính kèm:
- bai_giang_cau_truc_may_tinh_chuong_11_lap_trinh_xu_ly_man_hi.ppt