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

Bài ging hp ng Chng II: Các lnh c bn ca hp ng
15
CHNG II: CÁC LNH C BN CA HP NG
2.1 Cu trúc chng trình
2.1.1 Ví d
 có cái nhìn tng quát v mt chng trình hp 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
Bc u ta cha cn quan tâm ti ý ngha ca các lnh mà ch cn quan tâm ti b
c ca chung chng trình, các t khoá c bn, cách vit các câu lnh
2.1.2 Gii thích
Nhìn chung, cu trúc ca mt chng trình hp ng có 3 phn: Phn tên, phn khai
báo và phn mã lnh.
a) Phn tên
Tên chng trình c vit sau t khoá TITLE u chng trình. Tên có th cha

Khai báo d liu c vit sau t .DATA. Các bin ca chng trình sc khai báo
 phn này.
Ví d 1: A DB 4
Trong ó: A là tên bin, DB là kiu d liu (bin kiu DB s có kích thc 1 byte), 4 là
giá tr ban u ca bin.
Ví d 2: B DW ?
Trong ví d này, bin B s có kiu là DW (1 Word) và không có giá tr khi to.
Khai báo hng:
Ví d: H EQU 2Bh
ng H s nhn giá tr bng 2Bh.
Quy tc t tên (Bin, hng, nhãn, th tc):
+ Tên có chiu dài ti a 31 kí t.
+ Có th cha ch cái, ch s và các kí tc bit (? . @ _ $ %).
+ Không c bt u bng s.
+ Nu dùng du chm thì nó phi ng u tiên.
+ Tên không c cha du cách.
Nói chung, trong hp ng không phân bit ch hoa và ch thng.
c) Phn mã lnh
Phn này bao gm các th tc c vit sau t .CODE. Trong s các th tc này phi
chn mt th tc làm chng trình chính, tên ca th tc ó c vit sau t END  cui
chng trình. Tên chng trình chính thng t là MAIN, cng có th chn mt tên
khác.
• u trúc mt th tc:
<Tên th tc> PROC
Lnh 1
Lnh 2
Lnh 3

<Tên th tc> ENDP
Bài ging hp ng Chng II: Các lnh c bn ca hp ng

ích>: là mt thanh ghi hay mt ô nh
<Ngun>: là mt thanh ghi, mt ô nh, hoc mt hng s
 liu sc chuyn t Ngun vào ích (ni dung ca Ngun không thay i sau khi
chuyn).
Ví d 1:
MOV AX, 4C00h
nh trên chuyn giá tr 4C00h vào thanh ghi AX.
Ví d 2:
MOV AL, A
nh trên chuyn giá tr ca bin A vào thanh ghi AL.
Chú ý:
• Không c chuyn trc tip ni dung ca hai thanh ghi n cho nhau.
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
18
Ví d: MOV CS, DS
nh trên b sai do c CS và DS u là thanh ghi n. Mun thc hin c u này
thì phi s dng mt bin hay mt 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 chuyn trc tip ni dung ca hai bin cho nhau.
Ví d: MOV A, B Lnh này không thc hin c
• Không c chuyn trc tip mt hng s vào mt thanh ghi n.
Ví d: MOV DS, 2000h
Nói chung, mun khc phc các trng hp nêu trên trên thì ta u phi s dng
trung gian.
b) Lnh XCHG (Exchange)
Lnh này dùng  hoán i d liu d liu gia hai toán hng.
Cú pháp lnh:
MOV <Toán hng 1>, <Toán hng 2>
Các toán hng có th là thanh ghi công dng chung, hoc mt thanh ghi công dng chung

NEG <ích>
ích>: là mt thanh ghi hay mt ô nh.
nh này có tác dng i du toán hng ích.
Ví d:
NEG AL
2.3 Nhp xut d liu
2.3.1 Chng trình ngt
Chng trình ngt là nhng chng trình con ã c vit sn nhm thc hin nhng
chc nng c bn khi thao tác vi máy tính. Các chng trình con này c phân phi
kèm theo các phn mm u khin h thng nh BIOS, Hu hành. Mi chng trình
có mt s hiu riêng (0, 1, 2, ). Khi lp trình ta có th s dng các chng trình con có
n này bng cách dùng lnh INT (interrupt).
Cú pháp lnh: INT <S hiu ngt>
Ví d 1:
INT 21h
nh trên s gi thc hin chng trình ngt s 21h (ây là s hiu ngt hay s dng nht
a DOS).
Ví d 2:
INT 13h
nh trên s gi thc hin chng trình ngt s 13h (ây là s hiu ngt ca BIOS, dùng
 thao tác vi a t).
Chi tit v các ngt và chng trình x lý ngt s trình bày trong chng 8.
2.3.2 Chc nng nhp - xut ca ngt 21h
Ngt 21h ca DOS cung cp rt nhiu chc nng khác nhau, mi chc nng cng có
t s hiu riêng (0, 1, 2, ). Trong phn này ta ch quan tâm ti chc nng nhp - xut
 liu.
Cách s dng ngt 21h: Trc khi gi ngt cn xác nh c s hiu chc nng, s
hiu ó c t vào thanh ghi AH. Ngoài ra cng cn quan tâm ti các tham s khác
(chng trình ngt s s dng thanh ghi nào? Giá tr ca chúng bng bao nhiêu? )
a) Chc nng hin mt kí t ra màn hình

ây là chc nng s 9 ca ngt 21h. Các tham s cn thit  gi ngt nh sau:
Vào: AH = 9
DX = a ch offset ca vùng nh cha chui kí t
Ví d:
Hin ra màn hình dòng ch: KHOA CONG NGHE THONG TIN
Gii:
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 ;Chc nng s 9
LEA DX, ChuoiKT ;Ly a ch chui kí tt vào DX
INT 21h ;Gi ngt
MOV AH, 4Ch ;Kt thúc
INT 21h
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
21
MAIN ENDP
END MAIN
Trong chng trình trên có mt sm cn lu ý:
• Chui kí t cn hin th phi c kt thúc bng du $.
• u trong chng trình có s dng khai báo d liu .DATA thì u ca chng
trình chính phi có các lnh:
MOV AX, @DATA
MOV DS, AX

MOV AH, 4Ch ;Kt thúc
Bài ging hp ng Chng II: Các lnh c bn ca hp ng
22
INT 21h
MAIN ENDP
END MAIN
Gii thích: Mã ASCII ca kí t thng ln hn kí t in hoa tng ng là 20h. Mun
chuyn t kí t thng thành in hoa thì ch vic ly mã ASCII ca nó tri 20h.
2.4 Cách chy mt chng trình hp ng
 có th chy mt chng trình hp ng thì trc ht phi biên dch nó thành file thi
hành (EXE, COM). Có nhiu công c biên dch khác nhau do nhiu hãng phn mm sn
xuát. Ta s s dng b công c MASM (Microsoft Macro Assembler) ca hãng
MicroSoft vì nó khá nh gn và d dùng.  bt u thì ta ch cn ti hai file:
MASM.EXE và LINK.EXE. Các bc thc hin nh sau:
• c 1:
Son tho ni dung chng trình bng mt công c son tho text bt kì, ct vào file
i phn m rng là ASM.
Ví d: tên file là Baitap.asm
• c 2:
ch file ASM thành file OBJ bng công c MASM.EXE. Gõ lnh nh sau:
MASM Baitap; (Enter)
(file MASM.EXE và file Baitap.asm nên  cùng mt th mc)
u dch thành công (chng trình không có li) thì ta s thu c file Baitap.obj.
u chng trình b li thì phi sa, sau ó tin hành dch li.
• c 3:
 dng công c LINK.EXE  liên kt các file OBJ thu c  bc 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õ lnh nh sau:
LINK Baitap; (Enter)
(file LINK.EXE cng  cùng th mc nói trên)
Bài ging hp ng Chng II: Các lnh c bn ca hp ng


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