Bài giảng hợp ngữ - Chương 8 - Pdf 19

Bài ging hp ng Chng VIII: S dng ngt trong hp ng
60
CHNG VIII: S DNG NGT TRONG HP NG
8.1 Khái nim ngt
Trong chng II ta ã  cp ti khái nim chng trình ngt nhng cha gii thích
ngt là gì. Có th tóm tt v khái nim ngt nh sau:
Ngt là hành ng dng chng trình ang chy  thc hin mt chng trình khác
(chng trình này c gi là chng trình x lý ngt).  vi x lý s dng các công
vic ang thc hin khi nó nhn c mt tín hiu yêu cu ngt ri trao quyn u khin
i cho chng trình x lý ngt. Tín hiu yêu cu ngt có th do mt thit b phn cng
hoc do mt lnh INT trong chng trình sinh ra. Quá trình ngt c mô t trong hình
i ây:
Chng trình x lý ngt cn c kt thúc bng lnh IRET  sau khi thc hin xong
có th quay tr v thc hin tip chng trình b ngt trc ó.
Có nhiu loi ngt khác nhau,  phân bit các ngt cn da vào s hiu ca chúng. B
vi x lý 8086 có th qun lý 256 ngt, c ánh s ln lt t 0, 1, 2, , FFh. Di ây
là bng danh sách các ngt:
 hiu ngt Chc nng
0 – 1Fh Ngt ca BIOS
20h – 3Fh Ngt ca DOS
40h – 7Fh D tr
80h – F0h Dùng cho chng trình BASIC trong ROM
F1h – FFh Không s dng
Gii thích:
Chng trình x lý ngt có th là mt b phn ca BIOS hay ca DOS, cng có th do
ngi s dng t vit. Ta cn phân bit rõ hai khái nim: “Ngt” và “Chng trình x lý
ngt”. Không phi s hiu ngt nào cng có có chng trình x lý ngt tng ng.
Khi mt ngt có s hiu t 0 – 1Fh xut hin thì chúng sc x lý bi các chng
trình vit sn nm trong ROM BIOS (ch yu là gii quyt các yêu cu vào/ ra c bn).
Còn nu ngt có s hiu t 20h – 3Fh thì s do hu hành DOS x lý.
nh 1

mainboard thì c gi là Ngt cng trong (hay ngt cng ni b).
8.3 Mt s ngt thông dng
Trong phn này ta s tìm hiu tác dng ca mt s ngt và cách thc s dng chúng
trong chng trình. Nói chung mi ngt thng có nhiu chc nng khác nhau, s hiu
chc nng cn c t vào thanh ghi AH trc khi gi ngt bng lnh INT.
8.3.1 Ngt 17h – Vào/ra máy in
ây là ngt do BIOS qun lý, nó có ba chc nng:
a) Chc nng s 0: a mt kí t ra máy in
Các tham s: AH = 0
AL = Mã ASCII ca kí t cn in
DX = S hiu máy in
Ví d:
Gi kí t ‘A’ ra máy in.
Gii:
MOV AH, 0
MOV AL, ‘A’ ;Kí t cn in
MOV DX, 0 ;Máy in s 0
INT 17h
MOV AH, 0
MOV AL, 0Ah ;in tip kí t xung dòng
INT 17h
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
62
b) Chc nng s 1: Khi to cng máy in
Các tham s: AH = 1
DX = S hiu máy in
c) Chc nng s 2: Kim tra trng thái máy in
Vào: AH = 2
DX = S hiu máy in
Ra: AH cha trng thái máy in

MOV DS, AX
MOV AH, 39h ;Chc nng s 39h: to th mc
LEA DX, DuongDan ;Ly a ch offset ca chui t
;vào DX
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
63
INT 21h ;Gi ngt
MOV AH, 4Ch ;Kt thúc
INT 21h
MAIN ENDP
END MAIN
b) Chc nng s 3Ah: Xoá mt th mc
Các tham s: AH = 3Ah
DS:DX = a ch ca chui cha ng dn
(chui này phi có tn cùng là 0)
Cách s dng tng t nh chc nng 39h  trên.
c) Chc nng s 41h: Xoá file
Các tham s: AH = 41h
DS:DX = a ch ca chui cha ng dn
(chui này phi có tn cùng là 0)
Ví d:
Xoá file Vidu.txt trong th mc gc ca a C.
Gii:
TITLE Xoa file
.MODEL SMALL
.STACK 100H
.DATA
DuongDan DB C:\Vidu.txt, 0
.CODE
MAIN PROC

MOV AH, 2Ch ;Chc nng s 2Ch: c thi gian
INT 21h ;Gi ngt
;i Gi (trong CH) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, CH ;Chuyn Gi vào AX
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
DIV DL ;AL = Thng = S hàng chc
;AH = S d = S hàng n v
ADD AL, 30h ;i s hàng chc sang mã ASCII
ADD AH, 30h ;i s hàng n v sang mã ASCII
MOV Time_Buf, AL ;Ct vào chui
MOV Time_Buf+1, AH
;i Phút (trong CL) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, CL ;AX cha Phút
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
DIV DL ;AL cha s hàng chc ca Phút
;AH cha s hàng n v ca Phút
ADD AL, 30h ;i sang mã ASCII
ADD AH, 30h
MOV Time_Buf+3, AL ;Ct vào chui (sau du hai chm)
MOV Time_Buf+4, AH
;i Giây (trong DH) t s thp phân sang mã ASCII ri
;ct vào Time_Buf
MOV AL, DH ;AX cha Giây
MOV AH, 0
MOV DL, 10 ;Chia AX cho 10
Bài ging hp ng Chng VIII: S dng ngt trong hp ng

Ch s hàng n v: AH + 30h = 36h
t cách khác i sang mã ASCII là thc hin phép toán OR vi 30h:
4 OR 30h = 34h
6 OR 30h = 36h
Vy s thp phân 46 ng vi 2 kí t có mã ASCII là 34h và 36h.
8.4 Bng vector ngt
Các chng trình x lý ngt nm trong b nh nhng v trí khác nhau, a ch ca
chúng c gi là vector ngt. Bng vector ngt là ni lu gi nhng a ch này.
ng vector ngt có kích thc 1024 byte (= 400h byte) và nm  ngay u b nh:
Bài ging hp ng Chng VIII: S dng ngt trong hp ng
66

003FFh

00002h
00001h
00000h
Mi a ch bao gm 4 byte (2 byte thp cho offset 2 byte cao cho segment). Có tt c
256 ngt, do ó kích thc ca bng = 256 x 4 byte = 1024 byte.
Nu ngi s dng mun vit các chng trình x lý ngt ca riêng mình (không
mun dùng các chng trình có sn ca DOS hay BIOS) thì cn tác ng ti bng vector
ngt này. Các bc thc hin nh sau:
c 1: Vit chng trình x lý ngt mi.
c 2: Np chng trình x lý ngt mi vào b nh.
c 3: Truy nhp vào bng vector ngt  thay tha ch ca chng trình x lý ngt
 bng a ch ca chng trình t vit.
Ngi s dng có th t lp trình truy nhp vào bng vector  tìm kim a ch ca
các ngt (c mi ngt ng vi 4 byte), hoc n gin hn là s dng các chc nng có
n ca ngt 21h:
• Chc nng s 35h: Xác nh a ch ca chng trình x lý ngt


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status