Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Màn hình
- Màn hình là lưới các ô được địa chỉ hóa
- Màn hình chế độ văn bản có 25 hàng (024) và 80 cột (079)
Vị trí trên màn hình
Dạng thập phân
Dạng số Hex
Hàng Cột Hàng Cột
Góc
trái trên 00 00 00h 00h
Góc
phải trên 00 79 00h 4Fh
Giữa
màn hình 12 39/40 0Ch 27h
Góc
trái dưới 24 00 18h 00h
Góc
phải dưới 24 79 18h 4Fh
- Các ngắt và chức năng:
* INT 10h (BIOS) * INT 21h (DOS)
- 02h: Thiết lập cursor - 02h/09h/40h: Hiển thị màn hình
- 06h: Cuộn màn hình - 0Ah/3Fh: Nhập từ bàn phím
Thiết lập cursor
INT – Với ngắt 10h
* Số hiệu hàm: 2 – Yêu cầu thiết lập cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
2
BH
<số>
Số
trang màn hình (Mặc định=0)
DH
<số>
Hàng
DL
<số>
Cột
Ví dụ: Thiết lập cursor ở vị trí hàng 5 và cột 12:
MOV AH,2
MOV BH,0
MOV DH,5
MOV DL,12
INT 10h
MOV DX,050Ch
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Xóa màn hình
INT – Với ngắt 10h
* Số hiệu hàm: 6 – Xóa một phần hoặc toàn bộ màn hình
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
6
AL
0
Xóa
toàn màn hình =0
BH
<số>
Thuộc
tính màu (Back/fore ground)
CX
<hàng:cột>
hàng:cột
bắt đầu
DX
<hàng:cột>
hàng:cột
kết thúc
Ví dụ: Xóa toàn bộ màn hình từ vị trí hàng:cột=00:00h đến 18:4Fh
MOV AH,6
MOV AL,0
MOV BH,71h
MOV CX,0000h
MOV DX,184Fh
INT 10h
MOV AX,0600h
Nền trắng (7)
Chữ xanh (1)
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Nhập dữ liệu từ bàn phím
INT – Với ngắt 21h
* Số hiệu hàm: 0Ah – Nhập dữ liệu từ bàn phím
- Sử dụng một danh sách tham số với cấu trúc:
NAMEPAR LABEL BYTE ;bắt đầu danh sách tham số
MAXLEN DB <n> ;Số ký tự nhập vào cực đại
ACTLEN DB ? ;Số ký tự đã nhập vào
NAMEFLD DB <n> DUP(‘ ‘) ;Các ký tự được nhập từ bàn phím
- Ví dụ: NAMEPAR LABEL BYTE
MAXLEN DB 20
ACTLEN DB ?
NAMEFLD DB 20 DUP(‘ ‘)
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
6
DX
NAMEPAR
Nạp
địa chỉ của danh sách tham số
Ra
NAMEFLD
Mãng
có chiều dài cực đại n-1
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Nhập dữ liệu từ bàn phím
INT – Với ngắt 21h
* Số hiệu hàm: 0Ah – Nhập dữ liệu từ bàn phím
- Ví dụ:
.DATA
NAMEPAR LABEL BYTE
MAXLEN DB 20
ACTLEN DB ?
NAMEFLD DB 20 DUP(‘ ‘)
.CODE
MOV AH,0Ah
LEA DX,NAMEPAR
INT 21h
- Gỉa sử nhập nội dung là ‘BROWN’ Danh sách tham số như sau:
ASCII 20 5 B R O W N #
HEX 14 05 42 52 4F 57 4E 0D
Lưu ký tự Enter (0Dh) vào
Ký tự B được truy cập tại phần tử NAMEFLD
Ký tự R được truy cập tại phần tử NAMEFLD+1
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Nhập dữ liệu từ bàn phím
Ví dụ: Nhập và tách họ tên sinh viên, sau đó hiển thị tên vừa nhập lên
màn hình.
.MODEL SMALL
.DATA
MSG1 DB ‘Nhập họ tên sinh viên:$'
MSG2 DB 0Ah,0Dh,'Ten sinh vien la:$'
NAMEPAR LABEL BYTE
MAXLEN DB 20
ACTLEN DB ?
NAMEFLD DB 20 DUP(' ')
.CODE
MOV AX,@DATA
MOV DS,AX
MOV AH,9 ;Hiển thị thông báo nhập
LEA DX,MSG1
INT 21h
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
MOV AH,0Ah ;Nhập nội dung dữ liệu
LEA DX,NAMEPAR
INT 21h
MOV BH,00 ;Xác định độ dài dữ liệu để
MOV BL,ACTLEN ;thay thế nội dung ký tự Enter
MOV NAMEFLD[BX],'$' ;thành ký tự ‘$’
MOV AH,9 ;In ra thông báo kết quả
LEA DX,MSG2
INT 21h
MOV AH,9 ;In dữ liệu
LEA DX,NAMEFLD
INT 21h
MOV AH,4Ch
INT 21h
END
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Xóa vùng nhập dữ liệu
* Ví dụ với các dữ liệu được nhập liên tiếp:
Dữ liệu Giá trị NAMEPAR (HEX)
PAINE 14 05 50 41 49 4E 45 0D 20 20 20 20
HAMILTON 14 08 48 41 4D 49 4C 54 4F 4E 0D 20
ADAMS 14 05 41 44 41 4D 53 0D 4F 4E 0D 20
Phải xóa các dữ liệu trước khi nhập dữ liệu mới:
MOV CX,20 ;lặp 20 lần cho thao tác
MOV SI,0
XOA:
MOV NAMEFLD[SI],20h ;thay thế bằng khoảng trắng
INC SI
LOOP XOA
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Cơ bản)
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 00h – Thiết lập chế độ màn hình mới
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
00h
AL
Mode
Chế
độ video
Ví dụ:
MOV AH,00 ;yêu cầu thiết lập chế độ
MOV AL,03 ;Mode=03:màn hình màu 80x25
INT 10h
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
Các chế độ màn hình văn bản
Mode Kích cỡ Loại Độ phân giải/màu
00
40x25
CGA
EGA
VGA
320x200
/Mono
320x350
/Mono
320x450
/Mono
01
40x25
CGA
EGA
VGA
320x200
/Color
320x350
/Color
320x450
/Color
02
80x25
CGA
EGA
VGA
640x200
/Mono
640x350
/Mono
720x400
/Mono
03
80x25
CGA
EGA
VGA
640x200
/Color
640x350
/Color
720x400
/Color
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
Byte thuộc tính
- Byte thuộc tính trong chế độ văn bản thể hiện tính chất một ký tự được
hiển thị
- Byte thuộc tính có dạng sau:
Background ForeGround
Thuộc tính: BL R G B I R G B
Số thứ tự Bit: 7 6 5 4 3 2 1 0
Ví dụ: Thiết lập màu nền màu đen và chữ trắng:
0 0 0 0 0 1 1 1
- Một số mã màu:
Màu R G B Màu R G B
Đen 0 0 0 Lam 0 0 1
Lục 0 1 0 Cam 0 1 1
Đỏ 1 0 0 Tím 1 0 1
Nâu 1 1 0 Trắng 1 1 1
- Thuộc tính khác: BL (=1:Nhấp nháy), I (Cường độ)
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
Trang màn hình
- Chế độ văn bản cho phép lưu dữ liệu trong bộ nhớ video thành từng
trang
- Trong chế độ 80 cột
* Mặc nhiên là trang 0 và bắt đầu từ địa chỉ B800
* Trang 1 bắt đầu từ địa chỉ B900
* Trang 2 bắt đầu từ địa chỉ BA00
* Trang 3 bắt đầu từ địa chỉ BB00
- Tại mỗi thời điểm chỉ thể hiện 1 trang màn hình
Thiết lập chế độ màn hình
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 01h – Thiết lập kích thước cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
01
CH
0
4
Đỉnh
cursor
CL
0
4
Đáy
cursor
* Hiệu chỉnh đỉnh và đáy cursor cho các loại màn hình:
CGA: 0:7 VGA: 0:14 EGA: 0;13
* Ví dụ:
MOV AH,1
MOV CH,0
MOV CL,14
INT 10h
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 02h – Thiết lập vị trí cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
02
BH
0
3
Số
của trang (0,1,2,3)
DH
Hàng
DL
Cột
* Ví dụ: Thiết lập cursor ở hàng 5 cột 20 của trang 0
MOV AH,2
MOV BH,0
MOV DH,5
MOV DL,20
INT 10h
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 03h – Đọc vị trí cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
03
BH
0
3
Số
của trang (0,1,2,3)
Ra
DH/DL
Hàng/Cột
CH/CL
Bắt
đầu/Kết thúc dòng quét cursor
* Ví dụ: Đọc vị trí curos, sau đó di chuyển cursor đến cột kế tiếp
MOV AH,3
MOV BH,0
INT 10h
MOV AH,2
INC DL
INT 10h
Thit lp ch mn hỡnh
Chửụng 3: Xệ LY MAỉN HèNH VAỉ BAỉN PHM (Naõng cao)
INT Vi ngt 10h
* S hiu hm: 06h/07h Cun mn hỡnh (cun lờn/xung)/Xúa mn hỡnh
Thao tỏc
Thanh ghi
Giỏ tr iu kin
Vo
AH
06/07
AL
S
hng
(=0: Ton
mn hỡnh)
CX
Hng:ct
Hng:ct
bt u
DX
Hng:ct
Hng:Ct
kt thỳc
* Vớ d: Cun mn hỡnh lờn 1 dũng v thit lp thuc tớnh mu
MOV AH,6
MOV AL,1
MOV BH,30 ;nn=cam, ch=en
MOV CX,0000 ;T 00:00
MOV DX,184Fh ;n 18:4F (c mn hỡnh)
INT 10h
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 08h – đọc thuộc tính/ký tự tại vị trí cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
08
BH
Số
trang
Ra
AL
Trả
về ký tự
AH
Trả
về thuộc tính của ký tự
* Ví dụ:
MOV AH,8
MOV BH,0
INT 10h
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 09h – Hiển thị thuộc tính/ký tự tại vị trí cursor
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
09
AL
Ký
tự
mã
ASCII
BH
Số
trang
BL
Thuộc
tính
CX
Số
lần hiển thị lặp ký tự
* Ví dụ: Hiển thị 80 dấu * và thiết lập thuộc tính màu
MOV AH,9
MOV AL,’*’
MOV BH,0
MOV BL,61h ;nền=Nâu,chữ=lam
MOV CX,80 ;lặp 80 lần
INT 10h
Thiết lập chế độ màn hình
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 10h
* Số hiệu hàm: 0Fh – Xác định chế độ video hiện hành
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
0Fh
Ra
AL
Mode màn
hình
AH
Số
ký tự/dòng
BH
Số
của trang hiện hành
* Ví dụ: Xác định chế độ video hiện hành
MOV AH,0Fh
INT 10h
CMP AL,03
JE
Xử lý nhập/xuất từ bàn phím
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 21h
* Số hiệu hàm: 07h – Nhập từ bàn phím nhưng không hiển thị
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
7
Ra
AL
mã
ASCII
* Ví dụ: Mô phỏng kiểu nhập mật mã, không muốn hiển thị ký tự đã nhập
và hiển thị ký tự * thay thế
LAP: MOV AH,7h
INT 21h
MOV AH,2
MOV DL,’*’
INT 21h
JMP LAP
Xử lý nhập/xuất từ bàn phím
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 16h
* Số hiệu hàm: 00h – Đọc một ký tự (bàn phím 83 phím)
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
0
Ra
AL
Mã
ASCII
* Ví dụ:
MOV AH,0
INT 16h
Xử lý nhập/xuất từ bàn phím
Chöông 3: XÖÛ LYÙ MAØN HÌNH VAØ BAØN PHÍM (Naâng cao)
INT – Với ngắt 16h
* Số hiệu hàm: 10h – Đọc một ký tự (bàn phím 101 phím)
Thao tác
Thanh ghi
Giá trị Điều kiện
Vào
AH
0
Ra
AL
Mã
ASCII
Ký
tự ASCII
P
hím chức năng mở rộng (00h,E0h)
* Ví dụ: Nhấn một phím, kiểm tra có phải ấn phím chức năng hay không?
MOV AH,10h
INT 16h
CMP AL,00h ;có ấn phím chức năng?
JE
CMP AL,E0h
JE