Bài ging hp ng Chng VIII: S dng ngt trong hp ng
60
CHNG VIII: S DNG NGT TRONG HP NG
8.1 Khái nim ngt
Trong chng II ta ã cp ti khái nim chng trình ngt nhng cha gii thích
ngt là gì. Có th tóm tt v khái nim ngt nh sau:
Ngt là hành ng dng chng trình ang chy thc hin mt chng trình khác
(chng trình này c gi là chng trình x lý ngt). vi x lý s dng các công
vic ang thc hin khi nó nhn c mt tín hiu yêu cu ngt ri trao quyn u khin
i cho chng trình x lý ngt. Tín hiu yêu cu ngt có th do mt thit b phn cng
hoc do mt lnh INT trong chng trình sinh ra. Quá trình ngt c mô t trong hình
i ây:
Chng trình x lý ngt cn c kt thúc bng lnh IRET sau khi thc hin xong
có th quay tr v thc hin tip chng trình b ngt trc ó.
Có nhiu loi ngt khác nhau, phân bit các ngt cn da vào s hiu ca chúng. B
vi x lý 8086 có th qun lý 256 ngt, c ánh s ln lt t 0, 1, 2, , FFh. Di ây
là bng danh sách các ngt:
hiu ngt Chc nng
0 – 1Fh Ngt ca BIOS
20h – 3Fh Ngt ca DOS
40h – 7Fh D tr
80h – F0h Dùng cho chng trình BASIC trong ROM
F1h – FFh Không s dng
Gii thích:
Chng trình x lý ngt có th là mt b phn ca BIOS hay ca DOS, cng có th do
ngi s dng t vit. Ta cn phân bit rõ hai khái nim: “Ngt” và “Chng trình x lý
ngt”. Không phi s hiu ngt nào cng có có chng trình x lý ngt tng ng.
Khi mt ngt có s hiu t 0 – 1Fh xut hin thì chúng sc x lý bi các chng
trình vit sn nm trong ROM BIOS (ch yu là gii quyt các yêu cu vào/ ra c bn).
Còn nu ngt có s hiu t 20h – 3Fh thì s do hu hành DOS x lý.
nh 1
mainboard thì c gi là Ngt cng trong (hay ngt cng ni b).
8.3 Mt s ngt thông dng
Trong phn này ta s tìm hiu tác dng ca mt s ngt và cách thc s dng chúng
trong chng trình. Nói chung mi ngt thng có nhiu chc nng khác nhau, s hiu
chc nng cn c t vào thanh ghi AH trc khi gi ngt bng lnh INT.
8.3.1 Ngt 17h – Vào/ra máy in
ây là ngt do BIOS qun lý, nó có ba chc nng:
a) Chc nng s 0: a mt kí t ra máy in
Các tham s: AH = 0
AL = Mã ASCII ca kí t cn in
DX = S hiu máy in
Ví d:
Gi kí t ‘A’ ra máy in.
Gii:
MOV AH, 0
MOV AL, ‘A’ ;Kí t cn in
MOV DX, 0 ;Máy in s 0
INT 17h
MOV AH, 0
MOV AL, 0Ah ;in tip kí t xung dòng
INT 17h
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
62
b) Chc nng s 1: Khi to cng máy in
Các tham s: AH = 1
DX = S hiu máy in
c) Chc nng s 2: Kim tra trng thái máy in
Vào: AH = 2
DX = S hiu máy in
Ra: AH cha trng thái máy in
MOV DS, AX
MOV AH, 39h ;Chc nng s 39h: to th mc
LEA DX, DuongDan ;Ly a ch offset ca chui t
;vào DX
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
63
INT 21h ;Gi ngt
MOV AH, 4Ch ;Kt thúc
INT 21h
MAIN ENDP
END MAIN
b) Chc nng s 3Ah: Xoá mt th mc
Các tham s: AH = 3Ah
DS:DX = a ch ca chui cha ng dn
(chui này phi có tn cùng là 0)
Cách s dng tng t nh chc nng 39h trên.
c) Chc nng s 41h: Xoá file
Các tham s: AH = 41h
DS:DX = a ch ca chui cha ng dn
(chui này phi có tn cùng là 0)
Ví d:
Xoá file Vidu.txt trong th mc gc ca a C.
Gii:
TITLE Xoa file
.MODEL SMALL
.STACK 100H
.DATA
DuongDan DB C:\Vidu.txt, 0
.CODE
MAIN PROC
MOV AH, 2Ch ;Chc nng s 2Ch: c thi gian
INT 21h ;Gi ngt
;i Gi (trong CH) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, CH ;Chuyn Gi vào AX
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
DIV DL ;AL = Thng = S hàng chc
;AH = S d = S hàng n v
ADD AL, 30h ;i s hàng chc sang mã ASCII
ADD AH, 30h ;i s hàng n v sang mã ASCII
MOV Time_Buf, AL ;Ct vào chui
MOV Time_Buf+1, AH
;i Phút (trong CL) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, CL ;AX cha Phút
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
DIV DL ;AL cha s hàng chc ca Phút
;AH cha s hàng n v ca Phút
ADD AL, 30h ;i sang mã ASCII
ADD AH, 30h
MOV Time_Buf+3, AL ;Ct vào chui (sau du hai chm)
MOV Time_Buf+4, AH
;i Giây (trong DH) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, DH ;AX cha Giây
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
Ch s hàng n v: AH + 30h = 36h
t cách khác i sang mã ASCII là thc hin phép toán OR vi 30h:
4 OR 30h = 34h
6 OR 30h = 36h
Vy s thp phân 46 ng vi 2 kí t có mã ASCII là 34h và 36h.
8.4 Bng vector ngt
Các chng trình x lý ngt nm trong b nh nhng v trí khác nhau, a ch ca
chúng c gi là vector ngt. Bng vector ngt là ni lu gi nhng a ch này.
ng vector ngt có kích thc 1024 byte (= 400h byte) và nm ngay u b nh:
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
66
003FFh
00002h
00001h
00000h
Mi a ch bao gm 4 byte (2 byte thp cho offset 2 byte cao cho segment). Có tt c
256 ngt, do ó kích thc ca bng = 256 x 4 byte = 1024 byte.
Nu ngi s dng mun vit các chng trình x lý ngt ca riêng mình (không
mun dùng các chng trình có sn ca DOS hay BIOS) thì cn tác ng ti bng vector
ngt này. Các bc thc hin nh sau:
c 1: Vit chng trình x lý ngt mi.
c 2: Np chng trình x lý ngt mi vào b nh.
c 3: Truy nhp vào bng vector ngt thay tha ch ca chng trình x lý ngt
bng a ch ca chng trình t vit.
Ngi s dng có th t lp trình truy nhp vào bng vector tìm kim a ch ca
các ngt (c mi ngt ng vi 4 byte), hoc n gin hn là s dng các chc nng có
n ca ngt 21h:
• Chc nng s 35h: Xác nh a ch ca chng trình x lý ngt