Nói chung, trong h p ng không phân bi t ch hoa và ch th ng... DS và AX là các toán h ng... 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
Trang 1CH 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
u cách và các kí t c bi t khác Thông th ng ph n tên s cho ta bi t m c ích, nhi m v ho c n i dung tóm t t c a ch ng trình
Ví d : TITLE VI DU 1
b) Ph n khai báo
Trong h p ng có nhi u n i dung c n ph i khái báo nh ki u b nh , ng n x p, bi n, ng
• Khai báo ki u b nh
Ki u b nh c vi t sau t .MODEL Ki u b nh s quy nh kích th c c a n
mã và d li u trong ch ng trình
Trong ch ng trình ph n 2.1.1, ki u b nh là SMALL, ngh a là ki u b nh nh ,
mã l nh s n m trong 1 n nh , d li u n m trong 1 n nh Ngoài ki u SMALL còn
có nhi u ki u b nh khác:
li u trong 1 n
Trang 2li u chi m nhi u h n 1 n
li u chi m nhi u h n 1 n Không có m ng nào l n h n 64 KB
li u chi m nhi u h n 1 n Các m ng có th l n h n 64 KB
• Khai báo kích th c ng n x p
Kích th c ng n x p c vi t sau t STACK
Ví d : .STACK 100H
Khí ó kích th c vùng b nh dùng làm ng n x p là 100H Bytes (các v n v
ng n x p s trình bày k trong ch ng 6)
• Khai báo d li u
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
Trang 3• u trúc chung c a ph n mã l nh:
.CODE
<Tên ch ng trình chính> PROC
L nh 1
L nh 2
L nh 3
<Tên ch ng trình chính> ENDP .Các th t c khác
END <Tên ch ng trình chính>
2.2 M t s l nh th ng dùng
2.2.1 C u trúc câu l nh h p ng
M t câu l nh h p ng có th chia làm 2 ph n: Tên l nh và các toán h ng Tên l nh vi t
tr c, các toán h ng vi t sau N u có nhi u toán h ng thì chúng c phân cách v i nhau
ng d u ph y (,)
<Tên l nh> <Toán h ng 1> [, <Toán h ng 2> ] [;L i chú thích]
Ngoài ra có th vi t thêm các l i chú thích làm rõ ý ngh a câu l nh L i chú thích
c b t u b ng d u ch m ph y (;)
Ví du:
MOV DS, AX ;Chuy n n i dung c a thanh ghi AX vào thanh ghi DS MOV là tên l nh
DS và AX là các toán h ng
• u ý: Các l nh c trình bày trong tài li u này h u h t thu c t p l nh c a b vi x
lý 8086, tr m t s tr ng h p s có chú thích riêng
2.2.2 M t s l nh th ng dùng
a) L nh MOV (Move)
L nh này c s d ng chuy n d li u gi a các thanh ghi hay ô nh
Cú pháp l nh:
MOV < ích>, <Ngu n>
í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
Trang 4Ví 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
và m t ô nh
Ví d 1:
XCHG AX, BX ;hoán i n i dung c a AX và BX
c) L nh ADD và SUB (Subtract)
Cú pháp l nh:
ADD < ích>, <Ngu n>
SUB < ích>, <Ngu n>
í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
ích>,<Ngu n> không ng th i là hai ô nh
nh ADD s th c hi n phép c ng ích v i Ngu n, k t qu ch a trong ích
nh SUB s l y ích tr i Ngu n, k t qu ch a trong ích
Ví d :
ADD AX, 10 ;T ng n i dung c a thanh ghi AX lên 10
ADD BX, AX ;C ng n i dung 2 thanh ghi AX và BX, t ng c t vào BX SUB AX, B ;Tr n i dung thanh ghi AX cho bi n B
d) L nh INC (Increment) và DEC (Decrement)
Cú pháp l nh:
INC < ích>
DEC < ích>
ích>: là m t thanh ghi hay m t ô nh
nh INC s t ng ích lên 1 (c ng ích v i 1)
nh DEC s gi m ích i 1 (tr ích cho 1)
Ví d :
INC AH ;C ng n i dung c a thanh ghi AH v i 1
DEC B ;Tr giá tr c a bi n B cho 1
Trang 5e) L nh NEG (Negartive)
Cú pháp l nh:
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 2 c a ng t 21h Các tham s c n thi t g i ng t nh sau:
Vào: AH = 2
DL = Mã ASCII c a kí t c n hi n th Ra: AL ch a mã ASCII c a kí t hi n th
Ví d 2: Hi n kí t ‘M’ ra màn hình
MOV AH, 2
MOV DL, ‘M’
INT 21h
Sau ây là ch ng trình y :
Trang 6TITLE HIEN KI TU MODEL SMALL STACK 100H CODE
MAIN PROC MOV AH, 2 ;Ch c n ng s 2 MOV DL, ’M’ ;Kí t c n hi n th INT 21h ;G i ng t
MOV AH, 4Ch ;K t thúc INT 21h
MAIN ENDP END MAIN
Ta có th s d ng mã ASCII c a kí t ho c vi t tr c ti p kí t gi a 2 d u nháy n
nh trong ch ng trình trên (nói chung, các kí t và chu i kí t trong h p ng ph i có
u nháy n 2 u)
Ngoài ch c n ng s 2, trong ch ng trình trên còn s d ng ch c n ng s 4Ch c a ng t 21h Ch c n ng này có tác d ng k t thúc ch ng trình và tr l i quy n u khi n cho h
u hành DOS
b) Ch c n ng hi n m t chu i 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
INT 21h ;G i ng t
MOV AH, 4Ch ;K t thúc
INT 21h
Trang 7MAIN 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
c ích là t a ch segment c a n d li u vào thanh ghi DS
• Ch ng trình trên có s d ng l nh LEA (Load Effective Address) Cú pháp l nh
nh sau:
LEA < ích>, <Ngu n>
ích>: là m t thanh ghi công d ng chung
<Ngu n>: là m t ô nh
nh này s l y a ch offset c a Ngu n t vào ích
c) Ch c n ng nh p m t kí t t bàn phím
ây là ch c n ng s 1 c a ng t 21h Các tham s c n thi t g i ng t nh sau:
Vào: AH = 1 Ra: AL ch a mã ASCII c a kí t Các l nh c th nh sau:
MOV AH, 1
INT 21h
Khi g p các l nh trên, ch ng trình s d ng l i ch ta gõ m t kí t t bàn phím, mã ASCII c a kí t ó s c c t trong thanh ghi AL
Ví d :
Nh p m t kí t th ng t bàn phím, i nó thành kí t in hoa r i hi n ra màn hình
Gi i:
TITLE DOI KI TU
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH, 1 ;Ch c n ng s 1: Nh p m t kí t
INT 21h
MOV AH, 2 ;Ch c n ng s 2: Hi n kí t
MOV DL, AL
INT 21h
MOV AH, 4Ch ;K t thúc
Trang 8INT 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:
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
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
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)
Trang 9Ta s thu c file Baitap.exe ch y file này ch vi c gõ l nh:
Baitap (Enter)