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
u cách và các kí tc bit khác. Thông thng phn tên s cho ta bit mc ích,
nhim v hoc ni dung tóm tt ca chng trình.
Ví d: TITLE VI DU 1
b) Phn khai báo
Trong hp ng có nhiu ni dung cn phi khái báo nh kiu b nh, ngn xp, bin,
ng
• Khai báo kiu b nh
Kiu b nhc vit sau t .MODEL. Kiu b nh s quy nh kích thc ca n
mã và d liu trong chng trình.
Trong chng trình phn 2.1.1, kiu b nh là SMALL, ngha là kiu b nh nh,
mã lnh s nm trong 1 n nh, d liu nm trong 1 n nh. Ngoài kiu SMALL còn
có nhiu kiu b nh khác:
MEDIUM Mã lnh chim nhiu hn 1 n
liu trong 1 n
COMPACT Mã lnh trong 1 n
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
16
liu chim nhiu hn 1 n
LARGE Mã lnh chim nhiu hn 1 n
liu chim nhiu hn 1 n
Không có mng nào ln hn 64 KB
HUGE Mã lnh chim nhiu hn 1 n
liu chim nhiu hn 1 n
Các mng có th ln hn 64 KB
• Khai báo kích thc ngn xp
Kích thc ngn xp c vit sau t .STACK
Ví d: .STACK 100H
Khí ó kích thc vùng b nh dùng làm ngn xp là 100H Bytes (các vn v
ngn xp s trình bày k trong chng 6)
• Khai báo d liu
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
17
• u trúc chung ca phn mã lnh:
.CODE
<Tên chng trình chính> PROC
Lnh 1
Lnh 2
Lnh 3
<Tên chng trình chính> ENDP
Các th tc khác
END <Tên chng trình chính>
2.2 Mt s lnh thng dùng
2.2.1 Cu trúc câu lnh hp ng
Mt câu lnh hp ng có th chia làm 2 phn: Tên lnh và các toán hng. Tên lnh vit
trc, các toán hng vit sau. Nu có nhiu toán hng thì chúng c phân cách vi nhau
ng du phy (,).
<Tên lnh> <Toán hng 1> [, <Toán hng 2> ] [;Li chú thích]
Ngoài ra có th vit thêm các li chú thích làm rõ ý ngha câu lnh. Li chú thích
c bt u bng du chm phy (;).
Ví du:
MOV DS, AX ;Chuyn ni dung ca thanh ghi AX vào thanh ghi DS
MOV là tên lnh.
DS và AX là các toán hng.
• u ý: Các lnh c trình bày trong tài liu này hu ht thuc tp lnh ca b vi x
lý 8086, tr mt s trng hp s có chú thích riêng.
2.2.2 Mt s lnh thng dùng
a) Lnh MOV (Move)
Lnh này c s dng chuyn d liu gia các thanh ghi hay ô nh.
Cú pháp lnh:
MOV <ích>, <Ngun>
í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
và mt ô nh.
Ví d 1:
XCHG AX, BX ;hoán i ni dung ca AX và BX
c) Lnh ADD và SUB (Subtract)
Cú pháp lnh:
ADD <ích>, <Ngun>
SUB <ích>, <Ngun>
ích>: là mt thanh ghi hay mt ô nh
<Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s
ích>,<Ngun> không ng thi là hai ô nh.
nh ADD s thc hin phép cng ích vi Ngun, kt qu cha trong ích.
nh SUB s ly ích tri Ngun, kt qu cha trong ích.
Ví d:
ADD AX, 10 ;Tng ni dung ca thanh ghi AX lên 10
ADD BX, AX ;Cng ni dung 2 thanh ghi AX và BX, tng ct vào BX
SUB AX, B ;Tr ni dung thanh ghi AX cho bin B.
d) Lnh INC (Increment) và DEC (Decrement)
Cú pháp lnh:
INC <ích>
DEC <ích>
ích>: là mt thanh ghi hay mt ô nh
nh INC s tng ích lên 1 (cng ích vi 1).
nh DEC s gim ích i 1 (trích cho 1).
Ví d:
INC AH ;Cng ni dung ca thanh ghi AH vi 1
DEC B ;Tr giá tr ca bin B cho 1
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
19
e) Lnh NEG (Negartive)
Cú pháp lnh:
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 2 ca ngt 21h. Các tham s cn thit gi ngt nh sau:
Vào: AH = 2
DL = Mã ASCII ca kí t cn hin th
Ra: AL cha mã ASCII ca kí t hin th
Ví d 2: Hin kí t ‘M’ ra màn hình
MOV AH, 2
MOV DL, ‘M’
INT 21h
Sau ây là chng trình y :
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
20
TITLE HIEN KI TU
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH, 2 ;Chc nng s 2
MOV DL, ’M’ ;Kí t cn hin th
INT 21h ;Gi ngt
MOV AH, 4Ch ;Kt thúc
INT 21h
MAIN ENDP
END MAIN
Ta có th s dng mã ASCII ca kí t hoc vit trc tip kí t gia 2 du nháy n
nh trong chng trình trên (nói chung, các kí t và chui kí t trong hp ng phi có
u nháy n 2 u).
Ngoài chc nng s 2, trong chng trình trên còn s dng chc nng s 4Ch ca ngt
21h. Chc nng này có tác dng kt thúc chng trình và tr li quyn u khin cho h
u hành DOS.
b) Chc nng hin mt chui 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
c ích là t a ch segment ca n d liu vào thanh ghi DS.
• Chng trình trên có s dng lnh LEA (Load Effective Address). Cú pháp lnh
nh sau:
LEA <ích>, <Ngun>
ích>: là mt thanh ghi công dng chung.
<Ngun>: là mt ô nh.
nh này s ly a ch offset ca Ngun t vào ích.
c) Chc nng nhp mt kí t t bàn phím
ây là chc nng s 1 ca ngt 21h. Các tham s cn thit gi ngt nh sau:
Vào: AH = 1
Ra: AL cha mã ASCII ca kí t
Các lnh c th nh sau:
MOV AH, 1
INT 21h
Khi gp các lnh trên, chng trình s dng li ch ta gõ mt kí t t bàn phím, mã
ASCII ca kí tó sc ct trong thanh ghi AL.
Ví d:
Nhp mt kí t thng t bàn phím, i nó thành kí t in hoa ri hin ra màn hình.
Gii:
TITLE DOI KI TU
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH, 1 ;Chc nng s 1: Nhp mt kí t
INT 21h
SUB AL, 20h ;i kí t sang in hoa
MOV AH, 2 ;Chc nng s 2: Hin kí t
MOV DL, AL
INT 21h
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
23
Ta s thu c file Baitap.exe. chy file này ch vic gõ lnh:
Baitap (Enter)