Bài ging hp ng Chng II: Các lnh c bn ca hp ng
15
CHNG II: CÁC LNH C BN CA HP NG
2.1 Cu trúc chng trình
2.1.1 Ví d
có cái nhìn tng quát v mt chng trình hp ng, ta xét ví d sau ây:
TITLE VI DU 1
.MODEL SMALL
.STACK 100H
.DATA
A DB 4
B DB 6
C DB ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AL, A
ADD AL, B
MOV C, AL
MOV AX, 4C00H
INT 21H
MAIN ENDP
END MAIN
Bc u ta cha cn quan tâm ti ý ngha ca các lnh mà ch cn quan tâm ti b
c ca chung chng trình, các t khoá c bn, cách vit các câu lnh
2.1.2 Gii thích
Nhìn chung, cu trúc ca mt chng trình hp ng có 3 phn: Phn tên, phn khai
báo và phn mã lnh.
a) Phn tên
Tên chng trình c vit sau t khoá TITLE u chng trình. Tên có th cha
Khai báo d liu c vit sau t .DATA. Các bin ca chng trình sc khai báo
phn này.
Ví d 1: A DB 4
Trong ó: A là tên bin, DB là kiu d liu (bin kiu DB s có kích thc 1 byte), 4 là
giá tr ban u ca bin.
Ví d 2: B DW ?
Trong ví d này, bin B s có kiu là DW (1 Word) và không có giá tr khi to.
Khai báo hng:
Ví d: H EQU 2Bh
ng H s nhn giá tr bng 2Bh.
Quy tc t tên (Bin, hng, nhãn, th tc):
+ Tên có chiu dài ti a 31 kí t.
+ Có th cha ch cái, ch s và các kí tc bit (? . @ _ $ %).
+ Không c bt u bng s.
+ Nu dùng du chm thì nó phi ng u tiên.
+ Tên không c cha du cách.
Nói chung, trong hp ng không phân bit ch hoa và ch thng.
c) Phn mã lnh
Phn này bao gm các th tc c vit sau t .CODE. Trong s các th tc này phi
chn mt th tc làm chng trình chính, tên ca th tc ó c vit sau t END cui
chng trình. Tên chng trình chính thng t là MAIN, cng có th chn mt tên
khác.
• u trúc mt th tc:
<Tên th tc> PROC
Lnh 1
Lnh 2
Lnh 3
<Tên th tc> ENDP
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
ích>: là mt thanh ghi hay mt ô nh
<Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s
liu sc chuyn t Ngun vào ích (ni dung ca Ngun không thay i sau khi
chuyn).
Ví d 1:
MOV AX, 4C00h
nh trên chuyn giá tr 4C00h vào thanh ghi AX.
Ví d 2:
MOV AL, A
nh trên chuyn giá tr ca bin A vào thanh ghi AL.
Chú ý:
• Không c chuyn trc tip ni dung ca hai thanh ghi n cho nhau.
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
18
Ví d: MOV CS, DS
nh trên b sai do c CS và DS u là thanh ghi n. Mun thc hin c u này
thì phi s dng mt bin hay mt thanh ghi khác làm trung gian:
Ví d: MOV AX, DS ; dùng AX làm trung gian
MOV CS, AX
• Không c chuyn trc tip ni dung ca hai bin cho nhau.
Ví d: MOV A, B Lnh này không thc hin c
• Không c chuyn trc tip mt hng s vào mt thanh ghi n.
Ví d: MOV DS, 2000h
Nói chung, mun khc phc các trng hp nêu trên trên thì ta u phi s dng
trung gian.
b) Lnh XCHG (Exchange)
Lnh này dùng hoán i d liu d liu gia hai toán hng.
Cú pháp lnh:
MOV <Toán hng 1>, <Toán hng 2>
Các toán hng có th là thanh ghi công dng chung, hoc mt thanh ghi công dng chung
NEG <ích>
ích>: là mt thanh ghi hay mt ô nh.
nh này có tác dng i du toán hng ích.
Ví d:
NEG AL
2.3 Nhp xut d liu
2.3.1 Chng trình ngt
Chng trình ngt là nhng chng trình con ã c vit sn nhm thc hin nhng
chc nng c bn khi thao tác vi máy tính. Các chng trình con này c phân phi
kèm theo các phn mm u khin h thng nh BIOS, Hu hành. Mi chng trình
có mt s hiu riêng (0, 1, 2, ). Khi lp trình ta có th s dng các chng trình con có
n này bng cách dùng lnh INT (interrupt).
Cú pháp lnh: INT <S hiu ngt>
Ví d 1:
INT 21h
nh trên s gi thc hin chng trình ngt s 21h (ây là s hiu ngt hay s dng nht
a DOS).
Ví d 2:
INT 13h
nh trên s gi thc hin chng trình ngt s 13h (ây là s hiu ngt ca BIOS, dùng
thao tác vi a t).
Chi tit v các ngt và chng trình x lý ngt s trình bày trong chng 8.
2.3.2 Chc nng nhp - xut ca ngt 21h
Ngt 21h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có
t s hiu riêng (0, 1, 2, ). Trong phn này ta ch quan tâm ti chc nng nhp - xut
liu.
Cách s dng ngt 21h: Trc khi gi ngt cn xác nh c s hiu chc nng, s
hiu ó c t vào thanh ghi AH. Ngoài ra cng cn quan tâm ti các tham s khác
(chng trình ngt s s dng thanh ghi nào? Giá tr ca chúng bng bao nhiêu? )
a) Chc nng hin mt kí t ra màn hình
ây là chc nng s 9 ca ngt 21h. Các tham s cn thit gi ngt nh sau:
Vào: AH = 9
DX = a ch offset ca vùng nh cha chui kí t
Ví d:
Hin ra màn hình dòng ch: KHOA CONG NGHE THONG TIN
Gii:
TITLE HIEN CHUOI KT
.MODEL SMALL
.STACK 100H
.DATA
ChuoiKT DB ’KHOA CONG NGHE THONG TIN$’
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 9 ;Chc nng s 9
LEA DX, ChuoiKT ;Ly a ch chui kí tt vào DX
INT 21h ;Gi ngt
MOV AH, 4Ch ;Kt thúc
INT 21h
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
21
MAIN ENDP
END MAIN
Trong chng trình trên có mt sm cn lu ý:
• Chui kí t cn hin th phi c kt thúc bng du $.
• u trong chng trình có s dng khai báo d liu .DATA thì u ca chng
trình chính phi có các lnh:
MOV AX, @DATA
MOV DS, AX
MOV AH, 4Ch ;Kt thúc
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
22
INT 21h
MAIN ENDP
END MAIN
Gii thích: Mã ASCII ca kí t thng ln hn kí t in hoa tng ng là 20h. Mun
chuyn t kí t thng thành in hoa thì ch vic ly mã ASCII ca nó tri 20h.
2.4 Cách chy mt chng trình hp ng
có th chy mt chng trình hp ng thì trc ht phi biên dch nó thành file thi
hành (EXE, COM). Có nhiu công c biên dch khác nhau do nhiu hãng phn mm sn
xuát. Ta s s dng b công c MASM (Microsoft Macro Assembler) ca hãng
MicroSoft vì nó khá nh gn và d dùng. bt u thì ta ch cn ti hai file:
MASM.EXE và LINK.EXE. Các bc thc hin nh sau:
• c 1:
Son tho ni dung chng trình bng mt công c son tho text bt kì, ct vào file
i phn m rng là ASM.
Ví d: tên file là Baitap.asm
• c 2:
ch file ASM thành file OBJ bng công c MASM.EXE. Gõ lnh nh sau:
MASM Baitap; (Enter)
(file MASM.EXE và file Baitap.asm nên cùng mt th mc)
u dch thành công (chng trình không có li) thì ta s thu c file Baitap.obj.
u chng trình b li thì phi sa, sau ó tin hành dch li.
• c 3:
dng công c LINK.EXE liên kt các file OBJ thu c bc 2 thành file thi
hành c (EXE). Vì trong ví d này ch có 1 file OBJ nên cách gõ lnh nh sau:
LINK Baitap; (Enter)
(file LINK.EXE cng cùng th mc nói trên)
Bài ging hp ng Chng II: Các lnh c bn ca hp ng