You are on page 1of 30

Ti liu vi x l Lp trnh hp ng

Phm Hng Kim Khnh Trang 44


CHNG 3: LP TRNH HP NG
1. Cc tp tin .EXE v .COM
DOS ch c th thi hnh c cc tp tin dng .COM v .EXE. Tp tin .COM
thng dng xy dng cho cc chng trnh nh cn .EXE dng cho cc chng
trnh ln.
1.1. Tp tin .COM
- Tp tin .COM ch c mt on nn kch thc ti a ca mt tp tin loi
ny l 64 KB.
- Tp tin .COM c np vo b nh v thc thi nhanh hn tp tin .EXE
nhng ch p dng c cho cc chng trnh nh.
- Ch c th gi cc chng trnh con dng near.
Khi thc hin tp tin .COM, DOS nh v b nh v to vng nh di 256
byte v tr 0000h, vng ny gi l PSP (Program Segment Prefix), n s cha cc
thng tin cn thit cho DOS. Sau , cc m lnh trong tp tin s c np vo sau
PSP v tr 100h v a gi tr 0 vo stack. Nh vy, kch thc ti a thc s ca
tp tin .COM l 64 KB 256 byte PSP 2 byte stack.
Tt c cc thanh ghi on u ch n PSP v thanh ghi con tr lnh IP ch
n 100h, thanh ghi SP c gi tr 0FFFEh.
1.2. Tp tin .EXE
- Nm trong nhiu on khc nhau, kch thc thng thng ln hn 64
KB.
- C th gi c cc chng trnh con dng near hay far.
- Tp tin .EXE cha mt header u tp tin cha cc thng tin iu
khin cho tp tin.
2. Khung ca mt chng trnh hp ng
Khung ca mt chng trnh hp ng c dng nh sau:
TITLE Chng trnh hp ng
.MODEL Kiu kch thc b nh ; Khai bo quy m s
; dng b nh
.STACK Kch thc ; Khai bo dung lng
; on stack
.DATA ; Khai bo on d liu
msg DB 'Hello$'
.CODE ; Khai bo on m
main PROC

CALL Subname ; Gi chng trnh con

main ENDP

Subname PROC ; nh ngha chng
; trnh con

Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 45
RET
Subname ENDP
END main

Quy m s dng b nh:

Bng 3.1:

Loi M t
Tiny M lnh v d liu nm trong mt on
Small M lnh trong mt on, d liu trong mt on
Medium M lnh khng nm trong mt on, d liu trong mt on
Compact M lnh trong mt on, d liu khng nm trong mt on
Large M lnh khng nm trong mt on, d liu khng nm trong mt on
v khng c mng no ln hn 64KB
Huge M lnh khng nm trong mt on, d liu khng nm trong mt on
v cc mng c th ln hn 64KB

Thng thng, cc ng dng n gin ch i hi m chng trnh khng qu
64 KB v d liu cng khng ln hn 64 KB nn ta s dng dng Small:

.MODEL SMALL

Khai bo kch thc stack:

Khai bo stack dng dnh ra mt vng nh dng lm stack (ch yu phc
v cho chng trnh con), thng thng ta chn khong 256 byte l s dng
(nu khng khai bo th chng trnh dch t ng cho kch thc stack l 1 KB):

.STACK 256

Khai bo on d liu:

on d liu dng cha cc bin v hng s dng trong chng trnh.

Khai bo on m:

on m dng cha cc m lnh ca chng trnh. on m bt u bng
mt chng trnh chnh v c th c cc lnh gi chng trnh con (CALL).
Mt chng trnh chnh hay chng trnh con bt u bng lnh PROC v kt
thc bng lnh ENDP (y l cc lnh gi ca chng trnh dch). Trong chng
trnh con, ta s dng thm lnh RET tr v a ch lnh trc khi gi chng trnh
con.
3. C php ca cc lnh trong chng trnh hp ng
Mt dng lnh trong chng trnh hp ng gm c cc trng (field) sau
(khng nht thit phi y tt c cc trng):

Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 46
Tn Lnh Ton hng Ch thch
A: MOV AH,10h ; a gi tr 10h vo thanh ghi AH
Main PROC

Trng tn cha nhn, tn bin hay tn th tc. Cc tn nhn c th cha ti
a 31 k t, khng cha k t trng (space) v khng c bt u bng s (A: hay
Main:). Cc nhn c kt thc bng du ':'.
Trng lnh cha cc lnh s thc hin. Cc lnh ny c th l cc lnh tht
(MOV) hay cc lnh gi (PROC). Cc lnh tht s c dch ra m my.
Trng ton hng cha cc ton hng cn thit cho lnh (AH,10h).
Trng ch thch phi c bt u bng du ';'. Trng ny ch dng cho
ngi lp trnh ghi cc li gii thch cho chng trnh. Chng trnh dch s b
qua cc lnh nm pha sau du ;.
3.1. Khai bo d liu
Khi khai bo d liu trong chng trnh, nu s dng s nh phn, ta phi
dng thm ch B cui, nu s dng s thp lc phn th phi dng ch H cui.
Ch rng i vi s thp lc phn, nu bt u bng ch A..F th phi thm vo
s 0 pha trc.

V d:
1011b ; S nh phn
1111 ; S thp phn
1011h ; S thp lc phn
3.2. Khai bo bin
Khai bo bin nhm chng trnh dch cung cp mt a ch xc nh trong
b nh. Ta dng cc lnh gi sau nh ngha cc bin ng vi cc kiu d liu
khc nhau: DB (define byte), DW (define word) v DD (define double word).

VD:
A1 DB 1 ; nh ngha bin A1 di 1 byte (chng
; trnh dch s dng 1 byte trong b nh
; lu tr A1), tr ban u A1 = 1
A2 DB ? ; Bin A2 kiu byte, khng c gi tr gn
; ban u
A3 DB 'A' ; Bin kiu k t
A4 DW 1 ; nh ngha bin A4 di 2 byte, gi tr ban
; u A4 = 1, ta cng c th dng du ?
; xc nh bin khng cn khi to gi tr ban u
A5 DD 1 ; Bin A5 di 4 byte
A6 DB 1,2,3 ; nh ngha bin mng (array) gm c 3
; phn t, mi phn t di 1 byte (ngha l
; s dng 3 byte lu tr) vi cc gi tr ban
; u ca cc phn t ln lt l 1,2,3
A7 DB 10 DUP(0)
; Khai bo bin mng gm 10 phn t, mi
; phn t c chiu di 1 byte vi gi tr gn
; ban u l 0
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 47
A8 DB 10 DUP(?)
; Khai bo bin mng gm 10 phn t, mi
; phn t c chiu di 1 byte, khng cn
; gn gi tr ban u

Ngoi ra ta c th dng cc ton t DUP lng vo nhau khi khai bo bin
mng. Gi s ta cn khai bo mng A9 c cc gi tr gn ban u
1,2,3,1,1,3,2,2,1,1,3,2,2. Ta c th thc hin nh sau:

A9 DB 1,2,3,1,1,3,2,2,1,1,3,2,2
Hay: A9 DB 1,2,3,2 DUP(1,1,3,2,2)
Hay: A9 DB 1,2,3,2 DUP(2 DUP(1),3,2 DUP(2))

i vi cc bin c nhiu hn 1 byte, byte thp s cha nh c a ch
thp v byte cao s cha nh c a ch cao.

VD:
A10 DW 1234h

Bin A10 gi s bt u lu ti a ch 1000h th nh 1000h cha gi tr 34h
cn nh 1001h cha gi tr 12h.
i vi bin kiu chui (string), thc cht l mt mng cc k t, ta c th
khai bo nh sau:

A11 DB 'ABCD'
Hay A11 DB 65h,66h,67h,68h

Sau lnh khai bo ny th nh 1000h (gi s bin A11 lu tr ti a ch
1000h) cha 'A', 1001h cha 'B', 1002h cha 'C' v 1003h cha 'D'.
3.3. Khai bo hng
Cc hng khai bo trong chng trnh hp ng bng lnh gi EQU chng
trnh d hiu hn. Hng c th dng s, k t hay chui.

VD:
A12 EQU 10
A13 EQU 'AAA'

Sau khi s dng khai bo ny, nu ta dng lnh:
MOV AH,A12
th AH = 10h

A14 DB 'B',A13
th khai bo chui A14 vi gi tr gn ban u l 'BAAA'.


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 48
4. Cc ton t trong hp ng
Ton t s hc:

Bng 3.2:

Ton t C php M t
+
-
*
/
mod
+
-
shl
shr
+bt
-bt
bt1*bt2
bt1/bt2
bt1 mod bt2
bt1 + bt2
bt1 bt2
bt shl n
bt shr n
S dng
S m
Nhn
Chia
Ly phn d
Cng
Tr
Dch tri n bit
Dch phi n bit

Trong bt, bt1, bt2 l cc biu thc hng, n l s nguyn.

VD: MOV AH,(8+1)*7/3 ; AH 21
MOV AH, 00010001b shr 2 ; AH 0000 0100b
MOV AH,00010001b shl 2 ; AH 0100 0100b
MOV AH,100 mod 3 ; AH 1

Ton t logic:
Bao gm cc ton t AND, OR, NOT, XOR

VD: MOV AH,10 OR 4 AND 2 ; AH = 10
MOV AH, 0F0h AND 7Fh ; AH = 70h

Ton t quan h:
Cc ton t quan h so snh 2 biu thc, cho gi tr true (-1) nu iu kin
tho v false (0) nu khng tho.

Bng 3.3:

Ton t C php M t
EQ
NE
LT
LE
GT
GE
bt1 EQ bt2
bt1 NE bt2
bt1 LT bt2
bt1 LE bt2
bt1 GT bt2
bt1 GE bt2
Bng
Khng bng
Nh hn
Nh hn hay bng
Ln hn
Ln hn hay bng





Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 49
Cc ton t cung cp thng tin:

Ton t SEG:
SEG bt
Ton t SEG xc nh a ch on ca biu thc bt. bt c th l bin, nhn,
hay cc ton hng b nh.

Ton t OFFSET:
OFFSET bt
Ton t OFFSET xc nh a ch offset ca biu thc bt. bt c th l bin,
nhn, hay cc ton hng b nh.

VD: MOV AX,SEG A ; Np a ch on v a ch offset
MOV DS,AX ; ca bin A vo cp thanh ghi
MOV AX,OFFSET A ; DS:AX

Ton t ch s [ ]: (index operator)
Ton t ch s thng dng vi ton hng trc tip v gin tip.

Ton t (:) (segment override operator)
Segment:bt
Ton t : quy nh cch tnh a ch i vi segment c ch. Segment l cc
thanh ghi on CS, DS, ES, SS.
Ch rng khi s dng ton t : kt hp vi ton t [ ] th segment: phi t
ngoi ton t [ ].

VD: Cch vit [CS:BX] l sai, ta phi vit CS:[BX]

Ton t TYPE:
TYPE bt
Tr v gi tr biu th dng ca biu thc bt.
- Nu bt l bin th s tr v 1 nu bin c kiu byte, 2 nu bin c kiu
word, 4 nu bin c kiu double word.
- Nu bt l nhn th tr v 0FFFFh nu bt l near v 0FFFEh nu bt l far.
- Nu bt l hng th tr v 0.

Ton t LENGTH:
LENGTH bt
Tr v s cc n v cp cho bin bt

Ton t SIZE:
SIZE bt
Tr v tng s cc byte cung cp cho bin bt

VD: A DD 100 DUP(?)
MOV AX,LENGTH A ; AX = 100
MOV AX,SIZE A ; AX = 400

Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 50
Cc ton t thuc tnh:

Ton t PTR:
Loai PTR bt
Ton t ny cho php thay i dng ca biu thc bt.
- Nu bt l bin hay ton hng b nh th Loai l byte, word hay dword.
- Nu bt l nhn th Loai l near hay far.

VD: A DW 100 DUP(?)
B DD ?
MOV AH,BYTE PTR A ; a byte u tin trong mng A
; vo thanh ghi AH
MOV AX,WORD PTR B ; a 2 byte thp trong bin B
; vo thanh ghi AX
Ton t HIGH, LOW:
HIGH bt
LOW bt
Cho gi tr ca byte cao v thp ca biu thc bt, bt phi l mt hng.

VD: A EQU 1234h
MOV AH,HIGH A ; AH 12h
MOV AH,LOW A ; AH 34h
5. Cc cch nh a ch trong hp ng

Ton hng trc tip:
Ton hng trc tip l mt biu thc hng xc nh. Cc hng s c th
dng thp phn (c du v khng du), nh phn, thp lc phn, cc hng s nh
ngha bng lnh EQU,

VD: MOV AH,10
MOV AH,1010b
MOV AH,0Ah
MOV AH,A12
MOV AX,OFFSET msg
MOV AX,SEG msg

Ton hng thanh ghi:
Cc thanh ghi c th s dng trong php nh a ch thanh ghi l AH, BH,
CH, DH, AL, BL, CL, DL, AX, BX, CX, DX, SP, BP, SI, DI, CS, DS, ES, SS.

Ton hng b nh:

Trc tip:
Ton hng ny xc nh d liu lu trong b nh ti mt a ch xc nh khi
dch, a ch ny l mt biu thc hng (c th kt hp vi ton t ch s [ ] hay ton
t +, -, :). Thanh ghi on mc nh l thanh ghi DS nhng ta c th dng ton t :
ch thanh ghi on khc.
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 51
VD: A DW 1000h
B DB 100 DUP(0)
MOV AX,A ; Chuyn ni dung ca bin A vo
MOV AX,[A] ; thanh ghi AX
MOV AH,B ; Truy xut phn t u tin ca
MOV AH,B[0] ; mng B
MOV AH,B + 1 ; Truy xut phn t th hai ca
MOV AH,B[1] ; mng B
MOV AH,B + 5 ; Truy xut phn t th 6 ca
MOV AH,B[5] ; mng B
Ch rng lnh MOV AX,[1000h] s chuyn gi tr 1000h vo thanh ghi AX.
Nu mun chuyn ni dung ti nh 1000h vo thanh ghi AX th phi dng lnh
MOV AX,DS:[1000h] hay MOV AX,DS:1000h

Gin tip:
Ton hng b nh gin tip cho php dng cc thanh ghi BX, BP, SI, DI
ch cc gi tr trong b nh.
VD: MOV BX,2
MOV SI,3
MOV AH,B[BX] ; Chuyn phn t th 3 ca mng B
; vo thanh ghi AH
MOV AH,B[BX+1] ; Chuyn phn t th 4 ca mng B
MOV AH,B[BX]+1 ; vo thanh ghi AH (BX + 1 = 3)
MOV AH,B[BX+SI] ; Chuyn phn t th 6 ca mng B
MOV AH,B[BX][SI] ; vo thanh ghi AH
MOV AH,[B+BX+SI] ; BX + SI = 5
MOV AH,[B][BX][SI]
MOV AH,B[BX+SI+5] ; Chuyn phn t th 11 ca mng B
MOV AH,B[BX][SI]+5 ; vo thanh ghi AH
MOV AH,[B+BX+SI+5] ; BX + SI + 5 = 10
6. To v thc thi chng trnh hp ng
Ta c th to v thc thi mt chng trnh hp ng trn mt my PC theo cc
bc sau:
- Dng mt chng trnh son tho vn bn khng nh dng (nh NC) to
mt tp tin cha chng trnh hp ng (gn phn m rng ca tp tin ny
l .ASM, gi s l TEMP.ASM).
- - Dng chng trnh TASM.EXE (Turbo Assembler) dch ra m my
dng .OBJ: TASM TEMP
- Sau khi dch xong, ta s c file TEMP.OBJ cha cc m my ca
chng trnh. chuyn thnh file thc thi, ta dng chng trnh
TLINK.EXE chuyn thnh tp tin .EXE: TLINK TEMP
- - Nu tp tin thc thi dng .COM th ta dng thm chng trnh
EXE2BIN.EXE: EXE2BIN TEMP TEMP.COM
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 52
7. Tp lnh hp ng
7.1. Nhm lnh chuyn d liu
7.1.1. Nhm lnh chuyn d liu a dng
Lnh MOV dst,src: chuyn ni dung ton hng src vo ton hng dst.
Ton hng ngun src c th l thanh ghi (reg), b nh (mem) hay gi tr
tc thi (immed); ton hng ch dst c th l reg hay mem.
Lnh MOV c th c cc trng hp sau:
Reg8 reg8 MOV AL,AH
Reg16 reg16 MOV AX,BX
Mem8 reg8 MOV [BX],AL
Reg8 mem8 MOV AL,[BX]
Mem16 reg16 MOV [BX],AX
Reg16 mem16 MOV AX,[BX]
Reg8 immed8 MOV AL,04h
Mem8 immed8 MOV mem[BX],01h
Reg16 immed16 MOV AL,0F104h
Mem16 immed16 MOV mem[BX],0101h
SegReg reg16 MOV DS,AX
SegReg mem16 MOV DS,mem
Reg16 segreg MOV AX,DS
Mem16 segreg MOV [BX],DS
- Lnh MOV khng nh hng n cc c.
- Khng th chuyn trc tip d liu gia hai nh m phi thng qua mt
thanh ghi
MOV AX,mem1
MOV mem2,AX
- Khng th chuyn gi tr trc tip vo thanh ghi on
MOV AX,1010h
MOV DS,AX
- Khng th chuyn trc tip gia 2 thanh ghi on
- Khng th dng thanh ghi CS lm ton hng ch

Lnh XCHG dst,src: (Exchange) hon chuyn ni dung 2 ton hng.
Ton hng ch c th l reg hay mem.
- Lnh XCHG khng nh hng n cc c
- Khng th dng cho cc thanh ghi on

Lnh PUSH src: ct ni dung mt thanh ghi vo stack. Ton hng l
reg16

Lnh POP dst: ly d liu 16 bit t stack a vo ton hng dst.
Ta c th dng nhiu lnh PUSH ct d liu vo stack nhng khi dng
lnh POP ly d liu ra th phi dng theo th t ngc li.
PUSH AX
PUSH BX
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 53
PUSH CX

POP CX
POP BX
POP AX

Lnh XLAT [src]: chuyn ni dung ca nh 8 bit vo thanh ghi AL. a
ch nh xc nh bng cp thanh ghi DS:BX (nu khng ch ra src) hay
src, a ch offset cha trong thanh ghi AL.
Lnh XLAT tng ng vi cc lnh:
MOV AH,0
MOV SI,AX
MOV AL,[BX+SI]
7.1.2. Nhm lnh chuyn a ch

Lnh LEA reg16,mem16: (Load Effective Address) chuyn a ch offset
ca ton hng b nh vo thanh ghi reg16.
Lnh ny s tng ng vi MOV reg16, OFFSET mem16

Lnh LDS reg16,mem32: (Load pointer using DS) chuyn ni dung b
nh ton hng mem32 vo cp thanh ghi DS:reg16.
Lnh LDS AX,mem tng ng vi:
MOV AX,mem
MOV BX,mem+2
MOV DS,BX

Lnh LES reg16,mem32: (Load pointer using ES) ging nh lnh LDS
nhng dng cho thanh ghi ES
7.1.3. Nhm lnh chuyn c hiu

Lnh LAHF: (Load AH from flag) chuyn cc c SF, ZF, AF, PF v CF
vo cc bit 7,6,4,2 v 0 ca thanh ghi AH (3 bit cn li khng i)

Lnh SAHF: (Store AH into flag) chuyn cc bit 7,6,4,2 v 0 ca thanh
ghi AH vo cc c SF, ZF, AF, PF v CF.

Lnh PUSHF: chuyn thanh ghi c vo stack

Lnh POPF: ly d liu t stack chuyn vo thanh ghi c
7.1.4. Nhm lnh chuyn d liu qua cng
Mi I/O port giao tip vi CPU s c mt a ch 16 bit cho n. CPU gi hay
nhn d liu t cng bng cch ch n a ch cng . Tu theo chc nng m
cng c th: ch c d liu (input port), ch ghi d liu (output port) hay c th c
v ghi d liu (input/output port).


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 54
Lnh IN: c d liu t cng v a vo thanh ghi AL
IN AL,port8
IN AL,DX
Nu a ch port ch c 8 bit th c th a gi tr trc tip vo, nu l 16 bit
th phi thng qua thanh ghi AX.

Lnh OUT: ghi d liu trong thanh ghi AL ra cng
OUT port8,AL
OUT DX,AL

VD: MOV AL,3
OUT 61h,AL ; Gi gi tr 03h ra cng 61h
MOV AL,1
MOV DX,03F8h ; Xut ra cng my in
OUT DX,AL
MOV DX,03F8h
IN AL,DX ; c d liu t cng my in
7.2. Nhm lnh chuyn iu khin
7.2.1. Lnh nhy khng iu kin JMP
JMP label
JMP reg/mem
Lnh JMP dng chuyn iu khin chng trnh t v tr ny sang v tr
khc (thay i ni dung cp thanh ghi CS:IP).
7.2.2. Lnh nhy c iu kin
Lnh nhy c iu kin ch s dng cho cc nhn nm trong khong t 127
n 128 byte so vi v tr ca lnh.

Lnh JA label: (Jump if Above)
Nu CF = 0 v ZF = 0 th JMP label

Lnh JAE label: (Jump if Above or Equal)
Nu CF = 0 th JMP label

Lnh JB label: (Jump if Below)
Nu CF = 1 th JMP label

Lnh JBE label: (Jump if Below or Equal)
Nu CF = 1 hoc ZF = 1 th JMP label

Lnh JNA label: (Jump if Not Above)
Ging lnh JBE

Lnh JNAE label: (Jump if Not Above or Equal)
Ging lnh JB


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 55
Lnh JNB label: (Jump if Not Below)
Ging lnh JAE

Lnh JNBE label: (Jump if Not Below or Equal)
Ging lnh JA

Lnh JG label: (Jump if Greater)
Nu SF = OF v ZF = 0 th JMP label

Lnh JGE label: (Jump if Greater or Equal)
Nu SF = OF th JMP label

Lnh JL label: (Jump if Less)
Nu SF <> OF th JMP label

Lnh JLE label: (Jump if Less or Equal)
Nu CF <> OF hoc ZF = 1 th JMP label

Lnh JNG label: (Jump if Not Greater)
Ging lnh JLE

Lnh JNGE label: (Jump if Not Greater or Equal)
Ging lnh JL

Lnh JNL label: (Jump if Not Less)
Ging lnh JGE
Lnh JNLE label: (Jump if Not Less or Equal)
Ging lnh JG

Lnh JC label: (Jump if Carry)
Ging lnh JB

Lnh JNC label: (Jump if Not Carry)
Ging lnh JNB

Lnh JZ label: (Jump if Zero)
Nu ZF = 1 th JMP label

Lnh JE label: (Jump if Equal)
Ging lnh JZ

Lnh JNZ label: (Jump if Not Zero)
Nu ZF = 0 th JMP label

Lnh JNE label: (Jump if Equal)
Ging lnh JNZ


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 56
Lnh JS label: (Jump on Sign)
Nu SF = 1 th JMP label

Lnh JNS label: (Jump if No Sign)
Nu SF = 0 th JMP label

Lnh JO label: (Jump on Overflow)
Nu OF = 1 th JMP label

Lnh JNO label: (Jump if No Overflow)
Nu OF = 0 th JMP label

Lnh JP label: (Jump on Parity)
Nu PF = 1 th JMP label

Lnh JNP label: (Jump if No Parity)
Nu PF = 0 th JMP label

Lnh JCXZ label: (Jump if CX Zero)
Nu CX = 1 th JMP label
7.2.3. Lnh so snh
CMP left(reg/mem), right(reg/mem/immed)
Lnh CMP dng so snh ni dung 2 ton hng, kt qu cha vo thanh ghi
c v khng lm thay i ni dung cc ton hng.

VD: on chng trnh so snh 2 s A v B: A >B th nhy n label1, A = B
th nhy n label2, A < B th nhy n label3.
MOV AX,A
CMP AX,B
JG label1
JL label2
JMP label3
7.2.4. Cc lnh vng lp

Lnh LOOP:
LOOP label
M t:
CX = CX 1
Nu CX <> 0 th JMP label

Lnh LOOPE:
LOOPE label
M t:
CX = CX 1
Nu (ZF = 1) v (CX <> 0) th JMP label


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 57
Lnh LOOPZ:
Ging lnh LOOPE

Lnh LOOPNE:
LOOPNE label
M t:
CX = CX 1
Nu (ZF = 0) v (CX <> 0) th JMP label

Lnh LOOPNZ:
Ging lnh LOOPNE
7.2.5. Lnh lin quan n chng trnh con

Lnh CALL:
Lnh CALL dng gi mt chng trnh con, c th l near hay far.
CALL label ; Gi chng trnh con ti v tr xc nh
; bi nhn label
CALL reg/mem ; Gi chng trnh con ti v tr xc nh
; trong reg/mem

Lnh RET: (return)
RET [n]
RETN [n]
RETF [n]
Lnh RET dng kt thc chng trnh con, iu khin s c a v a
ch trc khi gi chng trnh con. RETN kt thc chng trnh con dng near v
RETF dng kt thc chng trnh con dng far.
Trong trng hp lnh RET c hng s n theo sau th s cng vi thanh ghi
SP gi tr n (n phi l s chn). Lnh ny dng loi b mt s tham s chng
trnh con s dng ra khi stack.
7.3. Nhm lnh x l s hc
7.3.1. X l php cng
Lnh ADD dst,src:
dst dst + src
Ton hng src c th l reg, mem hay immed cn ton hng dst l reg hay
mem.
- Khng th cng trc tip 2 thanh ghi on
- Lnh ADD nh hng n cc c sau:
+ C CF: = 1 khi kt qu php cng c nh hay c mn
+ C AF: = 1 khi kt qu php cng c nh hay c mn i vi 4 bit
thp
+ C PF: = 1 khi kt qu php cng c tng 8 bit thp l mt s chn.
+ C ZF: = 1 khi kt qu php cng l 0.
+ C SF: = 1 nu kt qu php cng l mt s m
+ C OF: = 1 nu kt qu php cng b sai du, ngha l vt ra ngoi
phm vi ln nht hay nh nht m s c du c th cha trong ton hng dst.
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 58
Lnh ADC dst, src: (Add with Carry)
dst dst + src + CF
Lnh ADC thng dng cng cc s ln hn 16 bit.

Lnh INC dst: (Increment)
dst dst + 1
Dst c th l reg hay mem.

Lnh AAA: (ASCII Adjust for Addition)
Hiu chnh kt qu php cng 2 s BCD dng khng nn (mi ch s BCD
lu bng 1 byte).

VD: MOV AX,9
MOV BX,3
ADD AL,BL ; Kt qu l AX = 0Ch
AAA ; AX = 0102h (AH = 1, AL = 2)
Lnh AAA ch nh hng n cc c AF v CF, khng nh hng n cc c
cn li.

Lnh DAA: (Decimal Adjust for Addition)
Hiu chnh kt qu php cng 2 s BCD dng nn (mi ch s BCD lu bng
4 bit, ngha l 1 byte biu din c cc s nguyn t 0 n 99).

VD: MOV AX,4338h
ADD AL,AH ; AX 437Bh
DAA ; AX 4381h (43 + 38 = 81)

Lnh DAA ch nh hng n cc c AF, CF, PF, SF, ZF v khng nh
hng n thanh ghi AH.
7.3.2. X l php tr

Lnh SUB dst,src:
dst dst - src
Ton hng src c th l reg, mem hay immed cn ton hng dst ch c th l
reg hay mem.
- Khng th tr trc tip thanh ghi on
- nh hng n cc c AF, CF, OF, PF, SF v ZF.

Lnh SBB dst,src:
dst dst src CF
Lnh ADC thng dng tr cc s ln hn 16 bit.

Lnh DEC dst: (decrement)
dst dst 1
dst l reg hay mem. Lnh DEC nh hng n cc c AF, OF, PF, SF, ZF.


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 59
Lnh NEG dst:
dst - dst
dst l reg hay mem.
Lnh NEG nh hng n cc c:
CF = 1 nu ni dung kt qu l s khc 0.
SF = 1 nu ni dung kt qu l s m khc 0.
PF = 1 nu tng 8 bit thp l mt s chn.
ZF = 1 nu ni dung kt qu l 0.
OF = 1 nu ni dung ton hng dst l 80h (dng byte) hay 8000h (dng word).

VD: Nu mun thc hin php ton 100 AH, ta khng th cng lnh:
SUB 100,AH
m phi dng lnh:
SUB AH,100
NEG AH

Lnh AAS: (Ascii Adjust for Substract)
Hiu chnh kt qu php tr 2 s BCD dng khng nn (mi ch s BCD lu
bng 1 byte). Lnh AAS ch nh hng c AF v CF.

Lnh DAS: (Decimal Adjust for Substract)
Hiu chnh kt qu php tr 2 s BCD dng nn (mi ch s BCD lu bng 4
bit). Lnh AAS ch nh hng c AF v CF.
7.3.3. X l php nhn

Lnh MUL src:
Nu src l reg hay mem 8 bit: AX AL*src
Nu src l reg hay mem 16 bit: DX:AX AX*src
Lnh MUL ch nh hng n c CF v OF.

Lnh IMUL src:
Ging nh lnh MUL nhng kt qu l s c du.

Lnh AAM: (Ascii Adjust for Multiple)
Hiu chnh kt qu php nhn 2 s BCD dng khng nn, lnh AAM thc
hin chia AL cho 10, lu phn thng vo AL v phn d vo AH. Lnh AAM nh
hng n cc c PF, SF v ZF.
7.3.4. X l php chia

Lnh DIV src:
Nu src l reg/mem 8 bit: AL AX DIV src v AH AX MOD src
Nu src l reg/mem 16 bit: AX DX:AX DIV src v DX DX:AX MOD
src
Lnh DIV khng nh hng n cc c nhng xy ra trn trong cc trng
hp sau:
- Chia cho 0
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 60
- Thng ln hn 256 i vi dng 8 bit.
- Thng ln hn 65536 i vi dng 16 bit.

Lnh IDIV src:
Ging nh lnh DIV nhng kt qu l s c du. Cc trng hp trn:
- Chia cho 0
- Thng nm ngoi khong (-128,127) i vi dng 8 bit.
- Thng nm ngoi khong (-32767,32768) i vi dng 16 bit.

Lnh AAD: (Ascii Adjust for Division)
Hiu chnh kt qu php chia 2 s BCD dng khng nn. Lu rng lnh
AAD phi c thc hin trc lnh chia. Sau khi thc hin chia th phi hiu chnh
li dng BCD bng cch dng lnh AAM.

Lnh CBW: (Convert Byte to Word)
Nu AL < 80h th AH = 0, ngc li AH = 0FFh
Lnh CBW dng chuyn s nh phn c du 8 bit thnh s nh phn c du
16 bit.

Lnh CWD: (Convert Word to Double word)
Nu AX < 8000h th DX = 0, ngc li DX = 0FFFFh
Lnh CWD dng chuyn s nh phn c du 16 bit thnh s nh phn c
du 32 bit cha trong DX:AX.
7.3.5. Dch chuyn v quay
Lnh SHL: (Shift Logical Left)
SHL dst,1
SHL dst,CL
Dch tri 1 bit hay CL bit.
CF dst7 dst6 dst0 0

Lnh SHR: (Shift Logical Right)
SHR dst,1
SHR dst,CL
Dch phi 1 bit hay CL bit.
0 dst7 dst6 dst0 CF

Lnh SAL: ging SHL

Lnh SAR:
Ging nh lnh SHR nhng gi tr bit dst7 khng thay i, ngha l
dst7 dst7 dst6 dst0 CF

Lnh ROL: (Rotate Left)
ROL dst,1
ROL dst,CL
Quay tri 1 bit hay CL bit.
CF dst7 dst6 dst0 dst7
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 61
Lnh ROR: (Rotate Right)
ROR dst,1
ROR dst,CL
Quay phi 1 bit hay CL bit.
dst0 dst7 dst6 dst0 CF

Lnh RCL: (Rotate though Carry Left)
RCL dst,1
RCL dst,CL
Quay tri 1 bit hay CL bit.
CF dst7 dst6 dst0 CF

Lnh RCR: (Rotate though Carry Right)
RCR dst,1
RCR dst,CL
Quay phi 1 bit hay CL bit.
CF dst7 dst6 dst0 CF
7.3.6. Cc lnh logic

Lnh AND:
AND dst,src
dst dst AND src
CF 0, OF 0
Src l reg, mem hay immed cn dst l reg, mem.

Lnh OR:
OR dst,src
dst dst OR src
CF 0, OF 0

Lnh XOR:
XOR dst,src
dst dst XOR src
CF 0, OF 0

Lnh NOT:
NOT dst
dst NOT dst
Lnh NOT khng nh hng n cc c.

Lnh TEST:
TEST dst,src
Lnh TEST thc hin php ton AND 2 ton hng nhng ch nh hng n
cc c v khng nh hng n ton t.

Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 62
7.4. Nhm lnh x l chui
Bao gm cc lnh sau:
- Lnh MOVS: chuyn d liu t vng nh ny sang vng nh khc.

+ MOVSB: chuyn 1 byte t v tr ch n bi SI n v tr ch bi DI. Nu
DF = 0 th SI SI + 1, DI DI + 1 cn nu DF = 1 th SI SI - 1, DI
DI - 1.
+ MOVSW: chuyn 1 word t v tr ch n bi SI n v tr ch bi DI.
Nu DF = 0 th SI SI + 2, DI DI + 2 cn nu DF 1 th SI SI - 2,
DI DI - 2.

- Lnh CMPS: so snh ni dung 2 vng nh
+ CMPSB: so snh 1 byte ti v tr ch n bi SI v ti v tr ch bi DI.
Nu DF = 0 th SI SI + 1, DI DI + 1 cn nu DF 1 th SI SI - 1,
DI DI - 1.
+ CMPSW: so snh 1 word ti v tr ch n bi SI v ti v tr ch bi DI.
Nu DF = 0 th SI SI + 2, DI DI + 2 cn nu DF = 1 th SI SI - 2, DI
DI - 2.

- Lnh SCAS: tm mt phn t trong vng nh, a ch vng nh xc nh
bng cp thanh ghi ES:DI, gi tr cn tm t trong thanh ghi AL, nu tm
thy th ZF = 1. Gi tr ca DI v SI thay i ging nh trn.

- Lnh LODS: a mt byte hay word c a ch xc nh bi cp thanh ghi
DS:SI vo thanh ghi AL hay AX. Gi tr ca DI v SI thay i ging nh
trn.

- Lnh STOS: chuyn ni dung ca AL hay AX vo vng nh xc nh bi
cp thanh ghi ES:DI. Gi tr ca DI v SI thay i ging nh trn.
8. Cc cu trc c bn trong lp trnh hp ng
8.1. Cu trc tun t
Cu trc tun t l cu trc n gin nht. Trong cu trc tun t, cc lnh
c sp xp tun t, lnh ny tip theo lnh kia.

Lnh 1
Lnh 2

Lnh n

VD: Cng 2 gi tr ca thanh ghi BX v CX, ri nhn i kt qu, kt qu
cui cng cha trong AX
MOV AX,BX
ADD AX,CX ; Cng BX vi CX
SHL AX,1 ; Nhn i
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 63
8.2. Cu trc IF THEN, IF THEN ELSE
IF iu kin THEN Cng vic
IF iu kin THEN Cng vic1 ELSE Cng vic2
VD: Gn BX = |AX|
CMP AX,0 ; AX > 0?
JNL DUONG ; AX dng
NEG AX ; Nu AX < 0 th o du
DUONG: MOV BX,AX
NEXT:

VD: Gn CL gi tr bit du ca AX
CMP AX,0 ; AX > 0?
JNS AM ; AX m
MOV CL,1 ; CL = 1 (AX dng)
JMP NEXT
AM: MOV CL,0 ; CL = 0 (AX m)
NEXT:
8.3. Cu trc CASE

CASE Biu thc
Gi tr 1: Cng vic 1
Gi tr 2: Cng vic 2

Gi tr n: Cng vic n
END

VD: Nu AX > 0 th BH = 0, nu AX < 0 th BH = 1. Ngc li BH = 2
CMP AX,0
JL AM
JE KHONG
JG DUONG
DUONG: MOV BH,0
JMP NEXT
AM: MOV BH,1
JMP NEXT
KHONG: MOV BH,2
NEXT:
8.4. Cu trc FOR

FOR S ln lp DO Cng vic

VD: Cho vng nh M di 200 bytes trong on d liu, chng trnh m s
ch A trong vng nh M nh sau:
MOV CX,200 ; m 200 bytes
MOV BX,OFFSET M ; Ly a ch vng nh
XOR AX,AX ; AX = 0
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 64
NEXT: CMP BYTE PTR [BX],'A'; So snh vi ch A
JNZ ChuA ; Nu khng phi l ch A th tip
INC AX ; tc, ngc li th tng AX
ChuA: INC BX
LOOP NEXT

8.5. Cu trc lp WHILE

WHILE iu kin DO Cng vic

VD: Chng trnh c vng nh bt u ti a ch 1000h vo thanh ghi AH,
n khi gp k t '$' th thot:
MOV BX,1000h
CONT: CMP AH,'$'
JZ NEXT
MOV AH,DS:[BX]
JMP CONT
NEXT:
8.6. Cu trc lp REPEAT

REPEAT Cng vic UNTIL iu kin

VD: Chng trnh c vng nh bt u ti a ch 1000h vo thanh ghi AH,
n khi gp k t '$' th thot:
MOV BX,1000h
CONT: MOV AH,DS:[BX]
CMP AH,'$'
JZ NEXT
JMP CONT
NEXT:
9. Cc ngt ca 8086
Bng 3.4:

Vector ngt Cng dng
00h
01h
02h
03h
04h
05h
06h - 07h
08h
09h
0Ah
0Bh - 0Ch
CPU: tc ng khi chia cho 0
CPU: chng trnh thc thi tng bc
CPU: ngt khng che c
CPU: to im dng chochng trnh
CPU: tc ng khi kt qu s hc trn
Tc ng khi nhn Print Screen
Dnh ring
Tc ng bi nhp ng h (18.2 ln/s)
Tc ng khi c phm nhn
Dnh ring
Tc ng phn cng lin lc ni tip
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 65
0Dh
0Eh
0Fh
10h
11h
12h
13h
14h
15h
16h
17h
18h
19h
1Ah
1Bh
1Ch
1Dh
1Eh
1Fh
20h
21h
22h
23h
24h
25h
26h
27h
28h 3Fh
40h
41h
42h 45h
46h
47h 49h
4Ah
4Bh 67h
68h 6Fh
70h
71h 7Fh
80h 85h
86h F0h
F1h FFh
a cng
a mm
My in
BIOS: mn hnh
BIOS: xc nh cu hnh my tnh
BIOS: thng bo kch thc RAM
BIOS: gi cc phc v a cng/mm
BIOS: giao tip ni tip
BIOS: truy xut cassette hay m rng ngt
BIOS: xut / nhp bn phm
BIOS: my in
Xm nhp ROM basic
BIOS: khi ng my tnh
BIOS: ngy / gi h thng
Ly iu khin t ngt bn phm
Ly iu khin t ngt ng h (sau int 08h)
a ch bng tham s mn hnh
a ch bng tham s a
a ch b m k t
DOS: kt thc chng trnh
DOS: cc chc nng DOS
a ch cn chuyn khi kt thc chng trnh
a ch cn chuyn khi gp Ctrl Break
a ch cn chuyn khi gp li
DOS: c a cng / mm
DOS: ghi a cng / mm
DOS: chm dt chng trnh v thng tr
Dnh ring cho DOS
BIOS: cc chc nng a mm
Bng thng s a cng th nht
Dnh ring
Bng thng s a cng th hai
nh ngha do ngi s dng
Gi bo hiu (ch trong AT)
nh ngha do ngi s dng
Khng s dng
ng h thi gian thc (ch trong AT)
Dnh ring
Dnh ring
S dng bi chng trnh thng dch BASIC
Khng s dng

9.1. Ngt 21h
Hm 01h: nhp mt k t t bn phm v hin k t nhp ra mn hnh.
Nu khng c k t nhp, hm 01h s i cho n khi nhp.
- Gi: AH = 01h
- Tr v: AL cha m ASCII ca k t nhp
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 66
MOV AH,01h
INT 21h ; AL cha m ASCII ca k t nhp

Hm 02h: xut mt k t trong thanh ghi DL ra mn hnh ti v tr con tr
hin hnh
- Gi AH = 02h, DL = m ASCII ca k t
- Tr v: khng c

MOV AH,02h
MOV DL,'A'
INT 21h

Hm 08h: ging hm 01h nhng khng hin th k t ra mn hnh

Hm 09h: xut mt chui k t ra mn hnh ti v tr con tr hin hnh,
a ch chui c cha trong DS:DX v phi c kt thc bng k t $
- Gi AH = 09h, DS:DX = a ch chui
- Tr v: khng c

.DATA
Msg DB 'Hello$'

MOV AH,09h
LEA DX,Msg
INT 21h

Hm 0Ah: nhp mt chui k t t bn phm (ti a 255 k t), dng
phm ENTER kt thc chui
- Gi AH = 0Ah, DS:DX = a ch lu chui
- Tr v: khng c
Chui phi c dng sau:
- Byte 0: S byte ti a cn c (k c k t Enter)
- Byte 1: s byte c
- Byte 2: lu cc k t c

.DATA
Msg DB 101 ; c ti a 100 k t
DB ?
DB 101 DUP(?)

MOV AH,0Ah
LEA DX,Msg
INT 21h

Hm 4Ch: kt thc chng trnh
MOV AH,4Ch
INT 21h
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 67
9.2. Ngt 10h
Xo mn hnh:
- Gi AX = 02h
- Tr v: khng c
MOV AX,02h
INT 10h

Chuyn to con tr:
- Gi AH = 02h, DH = dng, DL = ct
MOV AH,02h
MOV DX,0F15h
INT 10h
10. Truyn tham s gia cc chng trnh
Trong lp trnh, mt vn ta cn quan tm l truyn tham s gia chng
trnh chnh v chng trnh con. thc hin truyn tham s, ta c th dng cc
cch sau y:
- Truyn tham s qua thanh ghi
- Truyn tham s qua nh (bin)
- Truyn tham s qua nh do thanh ghi ch n
- Truyn tham s qua stack
10.1. Truyn tham s qua thanh ghi
Ta thc hin truyn tham s qua thanh ghi bng cch: mt chng trnh con
s a gi tr vo thanh ghi v chong trnh con khc s x l gi tr trn thanh ghi
.

VD: Cng gi tr ti 2 nh 1000h v 1001h, kt qu cha trong 1002h (bye
cao) v 1003h (byte thp).
.MODEL SMALL
.STACK 100h
.CODE
main PROC
MOV AX,@DATA
MOV DS,AX
MOV BYTE PTR DS:[1000h],10h ; a gi tr vo
MOV BYTE PTR DS:[1001h],0FFh ; cc nh
CALL Read
CALL Sum
Mov AH,4Ch
INT 21h
main ENDP
Read PROC ; c d liu vo thanh ghi AX
MOV AH,DS:[1000h]
MOV AL,DS:[1001h]
RET
Read ENDP ; X l d liu ti thanh ghi AX

Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 68
Sum PROC
ADD AH,AL
JZ next
MOV DS:[1003h],1
next: MOV DS:[1002h],AH
RET
Sum ENDP
END main
10.2. Truyn tham s qua nh (bin)
Qu trnh truyn tham s cng ging nh trn nhng thay v thc hin thng
qua thanh ghi, ta s thc hin thng qua cc nh.

VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (bye cao) v
m4 (byte thp).
.MODEL SMALL
.STACK 100h
.DATA
m1 db ?
m2 db ?
m3 db ?
m4 db ?
.CODE
main PROC
MOV AX,@data
MOV DS,AX
MOV m1,10h ; a gi tr vo
MOV m2,0FFh ; cc nh
CALL Sum
MOV AH,4Ch
INT 21h
main ENDP
Sum PROC
MOV m4,0
MOV AH,m1
ADD AH,m2
JNC next
MOV m4,1
next: MOV m3,AH
RET
Sum ENDP
END main
10.3. Truyn tham s qua nh do thanh ghi ch n
Trong cch truyn tham s ny, ta dng cc thanh ghi SI, DI, BX ch a
ch offset ca cc tham s cn thanh ghi on mc nh l DS.


Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 69
VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (bye cao) v
m4 (byte thp).
.MODEL SMALL
.STACK 100h
.DATA
m1 db ?
m2 db ?
m3 db ?
m4 db ?
.CODE
main PROC
MOV AX,@data
MOV DS,AX
LEA SI,m1
LEA DI,m2
LEA BX,m3
MOV [SI],10h ; a gi tr vo
MOV [DI],0FFh ; cc nh
CALL Sum
MOV AH,4Ch
INT 21h
main ENDP
Sum PROC
MOV AL,[SI]
ADD AL,[DI]
JZ next
MOV [BX+1],1
next: MOV [BX],AL
RET
Sum ENDP
END main
10.4. Truyn tham s qua stack
Trong phng php truyn tham s ny, ta dng stack lm ni cha cc tham
s cn truyn thng qua cc tc v PUSH v POP.

VD: Cng gi tr ti 2 nh m1 v m2, kt qu cha trong m3 (byte cao) v
m4 (byte thp).
.MODEL SMALL
.STACK 100h
.DATA
m1 dw ?
m2 dw ?
m3 dw ?
m4 dw ?
.CODE
main PROC
MOV AX,@data
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 70
MOV DS,AX
LEA SI,m1
LEA DI,m2
MOV [SI],1234h ; a gi tr vo
MOV [DI],0FEDCh ; cc nh
PUSH m1 ; a vo stack
PUSH m2
CALL Sum
POP m3 ; Ly kt qu a vo stack
POP m4
MOV AH,4Ch
INT 21h
main ENDP
Sum PROC
POP DX ; Lu li a ch tr v ca lnh CALL
POP AX ; Ly d liu t stack
POP BX
ADD AX,BX
JNC next
PUSH 1
next: PUSH AX
PUSH DX ; Tr li a ch tr v ca lnh CALL
RET
Sum ENDP
END main
11. Cc v d minh ho
11.1. In chui k t ra mn hnh
.MODEL SMALL
.STACK 100h
.DATA
msg DB 'Hello$'
.CODE
main PROC
MOV AX,@DATA ; Khi ng thanh ghi DS
MOV DS,AX
MOV AX,02h ; Xo mn hnh
INT 10h
MOV AH,02h ; Chuyn to con tr
MOV DX,0C15h ; n dng 12 (0Ch) v ct 21 (15h)
INT 10h
LEA DX,msg ; a ch thng ip
MOV AH,09h ; In thng ip ra mn hnh
INT 21h
MOV AH,4Ch ; Kt thc chng trnh
INT 21h
main ENDP
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 71
END main
11.2. In chui k t ra mn hnh ti to nhp vo
.MODEL SMALL
.STACK 100h
.DATA
msg DB 'Hello$'
msg1 DB 'Nhap vao toa do:$'
Crlf DB 0Dh,0Ah,'$'
Td DB 3
DB ?
DB 3 DUP(?)
.CODE
main PROC
MOV AX,@DATA
MOV DS,AX ; Khi ng thanh ghi DS
MOV AX,02h
INT 10h ; Xa mn hnh
LEA DX,msg1
MOV AH,09h ; In thng ip
INT 21h
CALL Nhap ; Nhp dng
MOV CL,AL
LEA DX,Crlf ; Xung dng
MOV AH,09h
INT 21h
CALL Nhap ; Nhp ct
MOV CH,AL
MOV AH,02h ; Chuyn ta con tr
MOV DX,CX
INT 10h
LEA DX,msg
MOV AH,09h ; In ra mn hnh
INT 21h
MOV AH,4Ch ; Kt thc chng trnh
INT 21h
main ENDP
Nhap PROC
MOV AH,0Ah ; Nhp vo
LEA DX,Td
INT 21h
LEA BX,Td ; Ly ch s hng chc
MOV AL,DS:[BX+2]
SUB AL,'0' ; Chuyn t dng k t sang dng s
MOV BL,10
MUL BL ; Nhn s hng chc vi 10
PUSH AX
LEA BX,Td ; Ly ch s hng dn v
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 72
MOV AL,DS:[BX+3]
SUB AL,'0'
POP BX
ADD AL,BL
RET
Nhap ENDP
END main
11.3. Cng 2 s nh phn di 5 byte
.MODEL SMALL
.STACK 100h
.DATA
m1 DB 00h,08h,10h,13h,24h,00h
m2 DB 0FFh,0FCh,0FAh,0F0h,0F1h,00h;
m3 DB 6 DUP(0)
.CODE
main PROC
MOV AX,@DATA
MOV DS,AX ; Khi ng thanh ghi DS
LEA SI,m1
LEA DI,m2
LEA BX,m3
MOV CX,6
XOR AL,AL
next: MOV AL,[SI]
ADC AL,[DI]
MOV [BX],AL
INC BX
INC SI
INC DI
LOOP next
MOV AH,4Ch
INT 21h
main ENDP
END main
11.4. Nhp mt chui k t v chuyn ch thng thnh
ch hoa
.MODEL SMALL
.STACK 100h
.DATA
m1 DB 81
DB ?
DB 81 DUP(?)
m2 DB 'Chuoi da doi:$'
.CODE
main PROC
MOV AX,@DATA
Ti liu vi x l Lp trnh hp ng
Phm Hng Kim Khnh Trang 73
MOV DS,AX ; Khi ng thanh ghi DS
MOV ES,AX
LEA DX,m1
MOV AH,0Ah ; Nhp chui
INT 21h
LEA SI,m1 ; Ly a ch chui
ADD SI,2
MOV DI,SI ; Chui ngun v ch trng nhau
Next: LODSB ; Ly k t
CMP AL,0Dh ; Nu l k t Enter th kt thc
JE quit
CMP AL,'a' ; Nu k t nhp khng phi l k t
JB cont ; thng t 'a' n 'z' th b qua
CMP AL,'z'
JA cont
SUB AL,20h ; Chuyn k t thng thnh k t hoa
STOSB ; Lu k t va chuyn
DEC DI ; Nu l k t thng th dng lnh STOSB
; nn DI tng ln 1, ta phi gim DI
cont: INC DI ; Tng ln k t k
JMP next
quit: MOV AL,'$'
STOSB
MOV AX,02h ; Xa mn hnh
INT 10h
LEA DX,m2
MOV AH,09h
INT 21h
LEA DX,m1+2
MOV AH,09h
INT 21h
MOV AH,4Ch
INT 21h
main ENDP
END main

You might also like