You are on page 1of 0

LP TRNH VI HP NG

Gv: L Minh Trit Gv: L Minh Trit


Bin son: L Minh Trit
Quy trnh to v chy chng trnh Quy trnh to v chy chng trnh
B hp dch ASMc hai trnh c bn l
TASM.EXE (trnh hp dch)
TLINK.EXE (trnh lin kt)
Ngoi ra ta cn cn mt chng trnh
dng son tho to chng trnh
ngun.
! Ta c th dng b chng trnh BorlandC
son tho chng trnh ngun.
B hp dch ASMc hai trnh c bn l
TASM.EXE (trnh hp dch)
TLINK.EXE (trnh lin kt)
Ngoi ra ta cn cn mt chng trnh
dng son tho to chng trnh
ngun.
! Ta c th dng b chng trnh BorlandC
son tho chng trnh ngun.
Phn 1:
Bin son: L Minh Trit
Cc bc tin hnh lp trnh Cc bc tin hnh lp trnh
Son tho chng trnh ngun Son tho chng trnh ngun
Dng trnh hp dch TASM.EXE Dng trnh hp dch TASM.EXE
Dng trnh lin kt TLI NK.EXE Dng trnh lin kt TLI NK.EXE
Thc thi chng trnh Thc thi chng trnh
Kt qu Kt qu
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
1. Chy file Install.exe trong th mc
BorlandC (BC)
2. Nhn nt Enter bt u ci t
1. Chy file Install.exe trong th mc
BorlandC (BC)
2. Nhn nt Enter bt u ci t
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
3. Chn li a cha cc tp tin ci t 3. Chn li a cha cc tp tin ci t
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
Kimtra ng dn cha cc tp tin ci t Kimtra ng dn cha cc tp tin ci t
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
4. Sa li th mc ci t (nhn Enter) 4. Sa li th mc ci t (nhn Enter)
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
E:\BorlandC sa li l C:\BC hay C:\BorlandC E:\BorlandC sa li l C:\BC hay C:\BorlandC
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
Sau khi sa xong, nhn ESC thot khi
mn hnh chnh sa ng dn.
Chn Start Installation bt u ci t.
Sau khi sa xong, nhn ESC thot khi
mn hnh chnh sa ng dn.
Chn Start Installation bt u ci t.
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
Khi ci t c 1 vi file b li, ta nhn nt
C tip tc
Khi ci t c 1 vi file b li, ta nhn nt
C tip tc
Bin son: L Minh Trit
Cc bc ci t v to ng
dn File bin dch
Cc bc ci t v to ng
dn File bin dch
Nhn 1 nt bt k tip tc
ESC tt mn hnh.
Ch to ng dn (PATH)
Nhn 1 nt bt k tip tc
ESC tt mn hnh.
Ch to ng dn (PATH)
Bin son: L Minh Trit
To file ng dn Path To file ng dn Path
To 01 file *.bat trong a C:\
(hay a ci t BorlandC)
To 01 file *.bat trong a C:\
(hay a ci t BorlandC)
Bin son: L Minh Trit
Cc bc tin hnh lp trnh Cc bc tin hnh lp trnh
1. Chy ca s Run
2. G lnh CMD
3. CD\
4. Chy File P.bat
5. Chy chng trnh son tho BC.EXE
6. Son ni dung chng trnh ngun
7. Lu li File vi ui *.asm
8. Thot khi BorlandC
9. Chy chng trnh hp dch TASM.EXE
10. Chy trnh lin kt TLINK.EXE
11. Thc thi chng trnh.
1. Chy ca s Run
2. G lnh CMD
3. CD\
4. Chy File P.bat
5. Chy chng trnh son tho BC.EXE
6. Son ni dung chng trnh ngun
7. Lu li File vi ui *.asm
8. Thot khi BorlandC
9. Chy chng trnh hp dch TASM.EXE
10. Chy trnh lin kt TLINK.EXE
11. Thc thi chng trnh.
Bin son: L Minh Trit
V d: Son chng trnh Hello V d: Son chng trnh Hello
Son tp tin Hello.asm Son tp tin Hello.asm
Khai bo d
liu bt u
bng .Data
Khai bo
on m
chng trnh
bt u bng
.Code
Bin son: L Minh Trit
V d: Dch chng trnh Hello V d: Dch chng trnh Hello
G lnh Tasm Hello.asm G lnh Tasm Hello.asm
Thng bo
s li
Bin son: L Minh Trit
V d: Dch chng trnh Hello V d: Dch chng trnh Hello
G lnh Tasm Hello.asm
G tip lnh Tlink Hello.obj
Chng trnh s to ra file Hello.exe
G lnh Tasm Hello.asm
G tip lnh Tlink Hello.obj
Chng trnh s to ra file Hello.exe
Thng bo
s li
Bin son: L Minh Trit
T CHC THANH GHI T CHC THANH GHI
Thanh ghi (register) l ni lu d liu bn
trong CPU
Ty theo di 8 hay 16 bit v ty theo
chc nng khi thanh ghi c dng
cha d liu s thao tc hoc kt qu cc
php tnh hoc cc a ch dng nh v
nh khi cn thit.
C tt c 14 thanh ghi, mi thanh ghi di 16
bit chia thnh nmnhm
Thanh ghi (register) l ni lu d liu bn
trong CPU
Ty theo di 8 hay 16 bit v ty theo
chc nng khi thanh ghi c dng
cha d liu s thao tc hoc kt qu cc
php tnh hoc cc a ch dng nh v
nh khi cn thit.
C tt c 14 thanh ghi, mi thanh ghi di 16
bit chia thnh nmnhm
Phn 2:
Bin son: L Minh Trit
1. Nhm thanh ghi on
(segment register)
1. Nhm thanh ghi on
(segment register)
Gm 4 thanh ghi: on m CS, on d liu DS, on b
sung ES v on stack SS. L nhng thanh ghi cha a ch
segment ca cc nh khi cn truy xut.
Thanh ghi on m CS (Code Segment): Lu a ch
segment cha chng trnh ngn ng my.
Thanh ghi on d liu DS (Data Segment): Lu a ch
segment ca on cha d liu trong chng trnh.
Thanh ghi on b sung ES (Extra Segment): Lu a ch
segment ca on d liu b sung.
Thanh ghi on Stack SS (Stack Segment): Lu a ch
segment ca on stack.
4 thanh ghi ny c th truy xut d liu trn 4 on khc
nhau v 1 chng trnh ch c th s dng cng mt lc ti
a 4 on.
CPU 80386 c 2 thanh ghi tng t nh ES l FS v GS.
Gm 4 thanh ghi: on m CS, on d liu DS, on b
sung ES v on stack SS. L nhng thanh ghi cha a ch
segment ca cc nh khi cn truy xut.
Thanh ghi on m CS (Code Segment): Lu a ch
segment cha chng trnh ngn ng my.
Thanh ghi on d liu DS (Data Segment): Lu a ch
segment ca on cha d liu trong chng trnh.
Thanh ghi on b sung ES (Extra Segment): Lu a ch
segment ca on d liu b sung.
Thanh ghi on Stack SS (Stack Segment): Lu a ch
segment ca on stack.
4 thanh ghi ny c th truy xut d liu trn 4 on khc
nhau v 1 chng trnh ch c th s dng cng mt lc ti
a 4 on.
CPU 80386 c 2 thanh ghi tng t nh ES l FS v GS.
Bin son: L Minh Trit
2. Nhm thanh ghi a dng
(general register)
2. Nhm thanh ghi a dng
(general register)
Gmbn thanh ghi AX, BX, CX, DX. Cc thanh
ghi ny c th xem nh mt thanh ghi 16 bit
hoc hai thanh ghi nh:
AX =AH +AL
BX =BH +BL
CX=CH +CL
DX =DH +DL
CPU 80386 c th ko di n 32 bit to
thnh thanh ghi EAX, EBX, ECX, EDX.
Gmbn thanh ghi AX, BX, CX, DX. Cc thanh
ghi ny c th xem nh mt thanh ghi 16 bit
hoc hai thanh ghi nh:
AX =AH +AL
BX =BH +BL
CX=CH +CL
DX =DH +DL
CPU 80386 c th ko di n 32 bit to
thnh thanh ghi EAX, EBX, ECX, EDX.
Bin son: L Minh Trit
Thanh ghi tch ly AX (Accumulator register): thng
dng lu s nhn, s chia trong cc php ton nhn, chia,
cc php tnh s hc, logic v chuyn d liu.
VD: MUL BH ; AX AL*BH
Thanh ghi c s BX (Base register): thng dng
nh v b nh.
VD: MOV [BX], AX ; Ly ni dung thanh ghi AX a vo nh
; c a ch segment l DS v a ch offset BX.
Thanh ghi mCX (Count register): dng nh s ln
lp ca vng lp.
Thanh ghi d liu DX (Data register): dng lu kt
qu ca cc php ton nhn v chia, nh a ch cng trong
cc lnh nhp xut cng.
VD: MOV AL, 62 ; AL 62
MOV DX, 1000 ; DX 1000
OUT DX, AL ; a ni dung ca AL (tc 62) ra cng 1000
Thanh ghi tch ly AX (Accumulator register): thng
dng lu s nhn, s chia trong cc php ton nhn, chia,
cc php tnh s hc, logic v chuyn d liu.
VD: MUL BH ; AX AL*BH
Thanh ghi c s BX (Base register): thng dng
nh v b nh.
VD: MOV [BX], AX ; Ly ni dung thanh ghi AX a vo nh
; c a ch segment l DS v a ch offset BX.
Thanh ghi mCX (Count register): dng nh s ln
lp ca vng lp.
Thanh ghi d liu DX (Data register): dng lu kt
qu ca cc php ton nhn v chia, nh a ch cng trong
cc lnh nhp xut cng.
VD: MOV AL, 62 ; AL 62
MOV DX, 1000 ; DX 1000
OUT DX, AL ; a ni dung ca AL (tc 62) ra cng 1000
Bin son: L Minh Trit
1. C php lnh hp ng 1. C php lnh hp ng
Mt chng trnh hp ng gm cc Statement (mnh )
c vit lin tip nhau , mi Statement c vit trn 1
dng. Mt Statement c th l:
1 lnh (Instruction) : c chuyn thnh m my.
1 ch dn (Assembler directive) : khng chuyn thnh
m my
Cc lnh gm4 trng :
Name Operation Operand(s) Comment
Cc trng cch nhau t nht 1 khong trng hoc 1 TAB
V d: START : MOV CX,5 ; kh to thanh ghi CX
Hay mt ch dn ca ASM:
V d: MAIN PROC ; to mt th tc c tn l MAIN
Mt chng trnh hp ng gm cc Statement (mnh )
c vit lin tip nhau , mi Statement c vit trn 1
dng. Mt Statement c th l:
1 lnh (Instruction) : c chuyn thnh m my.
1 ch dn (Assembler directive) : khng chuyn thnh
m my
Cc lnh gm4 trng :
Name Operation Operand(s) Comment
Cc trng cch nhau t nht 1 khong trng hoc 1 TAB
V d: START : MOV CX,5 ; kh to thanh ghi CX
Hay mt ch dn ca ASM:
V d: MAIN PROC ; to mt th tc c tn l MAIN
Phn 3:
Bin son: L Minh Trit
1.1 Trng Tn
(Name Field)
1.1 Trng Tn
(Name Field)
Trng tn dng cho nhn lnh, tn th tc v tn bin.
ASMs chuyn tn thnh a ch b nh .
Tn c th di t 1 n 31 k t .
Trong tn cha cc k t t a-z, cc s v cc k t c bit sau:
? ,@, _ , $ v du.
Khng c php c k t trng trong phn tn.
Tn khng c bt u bng mt s .
ASMkhng phn bit gia k t vit thng v vit hoa .
Cc v d v tn hp l v khng hp l trong ASM.
Tn hp l Tn khng hp l
COUNTER1 TWOWORDS
@CHARACTER 2ABC
SUM_OF_DIGITS A45.28
DONE? YOU&ME
.TEST ADD-REPEAT
Trng tn dng cho nhn lnh, tn th tc v tn bin.
ASMs chuyn tn thnh a ch b nh .
Tn c th di t 1 n 31 k t .
Trong tn cha cc k t t a-z, cc s v cc k t c bit sau:
? ,@, _ , $ v du.
Khng c php c k t trng trong phn tn.
Tn khng c bt u bng mt s .
ASMkhng phn bit gia k t vit thng v vit hoa .
Cc v d v tn hp l v khng hp l trong ASM.
Tn hp l Tn khng hp l
COUNTER1 TWOWORDS
@CHARACTER 2ABC
SUM_OF_DIGITS A45.28
DONE? YOU&ME
.TEST ADD-REPEAT
Bin son: L Minh Trit
1.2 Trng ton t
( operation field)
1.2 Trng ton t
( operation field)
i vi 1 lnh trng ton t ch k hiu (Symbol)
ca php ton (Operation code =OPCODE). ASMs
chuyn k hiu php ton thnh m my .
Thng thng k hiu m php ton m t chc
nng ca php ton. V d: ADD, SUB, INC, DEC,
INT...
i vi ch dn ca ASM, trng ton t ch mt
opcode gi (pseudo operation code = pseudo-op).
ASM khng chuyn pseudo-op thnh m my m
hng dn ASM thc hin mt vic g v d to
ra mt th tc, nh ngha cc bin ...
i vi 1 lnh trng ton t ch k hiu (Symbol)
ca php ton (Operation code =OPCODE). ASMs
chuyn k hiu php ton thnh m my .
Thng thng k hiu m php ton m t chc
nng ca php ton. V d: ADD, SUB, INC, DEC,
INT...
i vi ch dn ca ASM, trng ton t ch mt
opcode gi (pseudo operation code = pseudo-op).
ASM khng chuyn pseudo-op thnh m my m
hng dn ASM thc hin mt vic g v d to
ra mt th tc, nh ngha cc bin ...
Bin son: L Minh Trit
1.3 Trng cc ton hng
(Operand(s) field)
1.3 Trng cc ton hng
(Operand(s) field)
Trong 1 lnh, trng ton hng ch ra cc s liu thamgia
trong lnh .
1 lnh c th khng c ton hng , c 1 hoc 2 ton hng .
V d: NOP ; khng c ton hng
INC AX ; 1 ton hng
ADD WORD1,2 ; 2 ton hng,
;cng 2 vi ni dung ca t nh WORD1
Trong cc lnh 2 ton hng ton hng u l ton hng
ch (destination operand). Ton hng ch thng l
thanh ghi hoc v tr nh dng lu tr kt qu. Ton
hng th hai l ton hng ngun. Ton hng ngun
thng khng b thay i sau khi thc hin lnh .
i vi mt ch dn ca ASM, trng ton hng cha mt
hoc nhiu thng tin m ASMdng thc thi ch dn .
Trong 1 lnh, trng ton hng ch ra cc s liu thamgia
trong lnh .
1 lnh c th khng c ton hng , c 1 hoc 2 ton hng .
V d: NOP ; khng c ton hng
INC AX ; 1 ton hng
ADD WORD1,2 ; 2 ton hng,
;cng 2 vi ni dung ca t nh WORD1
Trong cc lnh 2 ton hng ton hng u l ton hng
ch (destination operand). Ton hng ch thng l
thanh ghi hoc v tr nh dng lu tr kt qu. Ton
hng th hai l ton hng ngun. Ton hng ngun
thng khng b thay i sau khi thc hin lnh .
i vi mt ch dn ca ASM, trng ton hng cha mt
hoc nhiu thng tin m ASMdng thc thi ch dn .
Bin son: L Minh Trit
1.4 Trng ch thch
(Comment field)
1.4 Trng ch thch
(Comment field)
Trng ch thch l mt tu chn trong ngn
ng ASM. Lp trnh vin dng trng ch thch
thuyt minh v cu lnh. iu ny l cn
thit v ngn ng ASM l ngn ng cp thp
(low level) v vy s rt kh hiu chng trnh
nu n khng c ch thch mt cch y
v r rng. Tuy nhin khng nn c ch thch
i vi mi dng ca chng trnh, k c
nhng lnh m ngha ca n rt r rng.
Trng ch thch l mt tu chn trong ngn
ng ASM. Lp trnh vin dng trng ch thch
thuyt minh v cu lnh. iu ny l cn
thit v ngn ng ASM l ngn ng cp thp
(low level) v vy s rt kh hiu chng trnh
nu n khng c ch thch mt cch y
v r rng. Tuy nhin khng nn c ch thch
i vi mi dng ca chng trnh, k c
nhng lnh m ngha ca n rt r rng.
Bin son: L Minh Trit
2. Cc kiu s liu trong
chng trnh hp ng
2. Cc kiu s liu trong
chng trnh hp ng
CPU ch lm vic vi cc s nh phn. V
vy ASM phi chuyn tt c cc loi s
liu thnh s nh phn.
Trong mt chng trnh hp ng cho
php biu din s liu di dng nh
phn, thp phn hoc thp lc phn.
CPU ch lm vic vi cc s nh phn. V
vy ASM phi chuyn tt c cc loi s
liu thnh s nh phn.
Trong mt chng trnh hp ng cho
php biu din s liu di dng nh
phn, thp phn hoc thp lc phn.
Bin son: L Minh Trit
2.1 Cc s 2.1 Cc s
1 s nh phn l 1 dy cc bit 0, 1 v kt thc bng b hoc B
1 s thp phn l 1 dy cc ch s thp phn v kt thc bi d
hoc D(c th khng cn)
1 s hex phi bt u bi 1 ch s thp phn v phi kt thc
bi h hoc H.
V d cc biu din s hp l v khng hp l trong ASM:
S Loi
10111 thp phn
10111b nh phn
-2183D thp phn
1B4DH hex
1B4D s hex khng hp l
FFFFH s hex khng hp l
0FFFFH s hex
1 s nh phn l 1 dy cc bit 0, 1 v kt thc bng b hoc B
1 s thp phn l 1 dy cc ch s thp phn v kt thc bi d
hoc D(c th khng cn)
1 s hex phi bt u bi 1 ch s thp phn v phi kt thc
bi h hoc H.
V d cc biu din s hp l v khng hp l trong ASM:
S Loi
10111 thp phn
10111b nh phn
-2183D thp phn
1B4DH hex
1B4D s hex khng hp l
FFFFH s hex khng hp l
0FFFFH s hex
Bin son: L Minh Trit
2.2 Cc k t 2.2 Cc k t
K t v mt chui cc k t phi c
ng gia hai du ngoc n hoc hai
du ngoc kp.
V d: A v HELLO.
Cc k t u c chuyn thnh m
ASCII.
Do trong mt chng trnh ASM xem
khai bo A hay 41h (m ASCII ca A)
l ging nhau
K t v mt chui cc k t phi c
ng gia hai du ngoc n hoc hai
du ngoc kp.
V d: A v HELLO.
Cc k t u c chuyn thnh m
ASCII.
Do trong mt chng trnh ASM xem
khai bo A hay 41h (m ASCII ca A)
l ging nhau
Bin son: L Minh Trit
3. Cc bin (Variables) 3. Cc bin (Variables)
Trong ASM bin ng vai tr nh trong ngn ng cp cao.
Mi bin c mt loi d liu v n c gn mt a ch b
nh sau khi dch chng trnh. Bng sau y lit k cc
ton t gi dng nh ngha cc kiu s liu.
PSEUDO-OP STANDSFOR
DB define byte
DW define word (doublebyte)
DD define doubeword (2 t lin tip)
DQ define quadword (4 t lin tip )
DT define tenbytes (10 bytes lin tip)
Trong ASM bin ng vai tr nh trong ngn ng cp cao.
Mi bin c mt loi d liu v n c gn mt a ch b
nh sau khi dch chng trnh. Bng sau y lit k cc
ton t gi dng nh ngha cc kiu s liu.
PSEUDO-OP STANDSFOR
DB define byte
DW define word (doublebyte)
DD define doubeword (2 t lin tip)
DQ define quadword (4 t lin tip )
DT define tenbytes (10 bytes lin tip)
Bin son: L Minh Trit
3.1. Kiu byte 3.1. Kiu byte
nh ngha bin kiu byte c php nh sau:
NAME DB initial_value
V d : ALPHA DB 4
- Ch dn ny s gn tn ALPHA cho mt byte nh trong
b nh m gi tr ban u ca n l 4.
- Nu gi tr ca byte l khng xc nh th t du chm
hi ( ?) vo gi tr ban u.
V d : BYT DB ?
i vi bin kiu byte vng gi tr n lu tr c l t
-128 n 127 i vi s c du v 0 n 255 i vi s
khng du .
nh ngha bin kiu byte c php nh sau:
NAME DB initial_value
V d : ALPHA DB 4
- Ch dn ny s gn tn ALPHA cho mt byte nh trong
b nh m gi tr ban u ca n l 4.
- Nu gi tr ca byte l khng xc nh th t du chm
hi ( ?) vo gi tr ban u.
V d : BYT DB ?
i vi bin kiu byte vng gi tr n lu tr c l t
-128 n 127 i vi s c du v 0 n 255 i vi s
khng du .
Bin son: L Minh Trit
3.2. Kiu word 3.2. Kiu word
nh ngha mt bin kiu Word nh sau:
NAME DW initial_value
V d : WRD DW -2
C th dng du ? thay th cho bin t c
gi tr khng xc nh. Vng gi tr ca bin
t l -32768 n 32767 i vi s c du v 0
n 56535 i vi s khng du .
nh ngha mt bin kiu Word nh sau:
NAME DW initial_value
V d : WRD DW -2
C th dng du ? thay th cho bin t c
gi tr khng xc nh. Vng gi tr ca bin
t l -32768 n 32767 i vi s c du v 0
n 56535 i vi s khng du .
Bin son: L Minh Trit
3.3 Mng (arrays) 3.3 Mng (arrays)
Mng l mt lot cc byte nh hoc word nh lin tip
nhau. V d nh ngha 1 mng 3 byte l B_ARRAY,
gi tr ban u l 10h, 20h v 30h ta c th vit :
B_ARRAY DB 10h,20h,30h
B_ARRAY l tn c gn cho byte u tin
B_ARRAY+1 l tn ca byte th hai
B_ARRAY+2 l tn ca byte th ba
Nu ASM gn a ch offset l 0200h cho mng B_ARRAY
th ni dung b nh s nh sau :
SYMBOL ADDRESS CONTENTS
B_ARRAY 200h 10h
B_ARRAY+1 201h 20h
B_ARRAY+2 202h 30h
Mng l mt lot cc byte nh hoc word nh lin tip
nhau. V d nh ngha 1 mng 3 byte l B_ARRAY,
gi tr ban u l 10h, 20h v 30h ta c th vit :
B_ARRAY DB 10h,20h,30h
B_ARRAY l tn c gn cho byte u tin
B_ARRAY+1 l tn ca byte th hai
B_ARRAY+2 l tn ca byte th ba
Nu ASM gn a ch offset l 0200h cho mng B_ARRAY
th ni dung b nh s nh sau :
SYMBOL ADDRESS CONTENTS
B_ARRAY 200h 10h
B_ARRAY+1 201h 20h
B_ARRAY+2 202h 30h
Bin son: L Minh Trit
Ch dn sau y s nh ngha mt mng 4 phn
t c tn l W_ARRAY:
W_ARRAY DW 1000,40,29887,329
Gi s mng bt u ti 0300h, b nh nh sau:
SYMBOL ADDRESS CONTENTS
W_ARRAY 300h 1000d
W_ARRAY+2 302h 40d
W_ARRAY+4 304h 29887d
W_ARRAY+6 306h 329d
Ch dn sau y s nh ngha mt mng 4 phn
t c tn l W_ARRAY:
W_ARRAY DW 1000,40,29887,329
Gi s mng bt u ti 0300h, b nh nh sau:
SYMBOL ADDRESS CONTENTS
W_ARRAY 300h 1000d
W_ARRAY+2 302h 40d
W_ARRAY+4 304h 29887d
W_ARRAY+6 306h 329d
Bin son: L Minh Trit
Byte thp v byte cao ca mt word Byte thp v byte cao ca mt word
i khi chng ta cn truy xut ti byte thp v
byte cao ca mt bin Word.
Gi s chng ta nh ngha :
WORD1 DW 1234h
Byte thp ca WORD1 cha 34h
Cn byte cao ca WORD1 cha 12h
K hiu a ch ca byte thp l WORD1
Cn k hiu a ch ca byte cao l WORD1+1 .
i khi chng ta cn truy xut ti byte thp v
byte cao ca mt bin Word.
Gi s chng ta nh ngha :
WORD1 DW 1234h
Byte thp ca WORD1 cha 34h
Cn byte cao ca WORD1 cha 12h
K hiu a ch ca byte thp l WORD1
Cn k hiu a ch ca byte cao l WORD1+1 .
Bin son: L Minh Trit
Chui cc k t ( character strings) Chui cc k t ( character strings)
Mt mng cc m ASCII c th c nh ngha bng
mt chui cc k t .
V d : LETTERS DW 41h,42h,43h
tng ng vi
LETTERS DW ABC
Bn trong mt chui , ASM s phn bit ch hoa v ch
thng . V vy chui abc s c chuyn thnh 3 bytes :
61h, 62h v 63h.
Ta cng c th t hp cc k t v cc s trong mt nh
ngha.
V d : MSG DB HELLO, 0AH, 0DH, $
tng ng vi
MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H
Mt mng cc m ASCII c th c nh ngha bng
mt chui cc k t .
V d : LETTERS DW 41h,42h,43h
tng ng vi
LETTERS DW ABC
Bn trong mt chui , ASM s phn bit ch hoa v ch
thng . V vy chui abc s c chuyn thnh 3 bytes :
61h, 62h v 63h.
Ta cng c th t hp cc k t v cc s trong mt nh
ngha.
V d : MSG DB HELLO, 0AH, 0DH, $
tng ng vi
MSG DB 48H,45H,4CH,4Ch,4FH,0AH,0DH,24H
Bin son: L Minh Trit
3.4 Cc hng ( constants) 3.4 Cc hng ( constants)
Trong mt chng trnh cc hng c th c t tn nh ch dn
EQU (equates). C php ca EQU l :
NAME EQU constant
V d : LF EQU 0AH
sau khi c khai bo trn th LF c dng thay cho 0Ah trong chng
trnh. V vy ASMs chuyn cc lnh :
MOV DL,0Ah
v MOV DL,LF
thnh cng mt m my.
Cng c th dng EQU nh ngha mt chui
V d: PROMPT EQU TYPE YOUR NAME
Sau khi c khai bo ny, thay cho
MSG DB TYPE YOUR NAME
chng ta c th vit
MSG DB PROMPT
Trong mt chng trnh cc hng c th c t tn nh ch dn
EQU (equates). C php ca EQU l :
NAME EQU constant
V d : LF EQU 0AH
sau khi c khai bo trn th LF c dng thay cho 0Ah trong chng
trnh. V vy ASMs chuyn cc lnh :
MOV DL,0Ah
v MOV DL,LF
thnh cng mt m my.
Cng c th dng EQU nh ngha mt chui
V d: PROMPT EQU TYPE YOUR NAME
Sau khi c khai bo ny, thay cho
MSG DB TYPE YOUR NAME
chng ta c th vit
MSG DB PROMPT
Bin son: L Minh Trit
3.5. Cc lnh c bn 3.5. Cc lnh c bn
CPU 8086 c rt nhiu lnh, trong chng
ny, chng ta s xemxt 7 lnh n gin
ca 8086 m chng thng c dng
vi cc thao tc di chuyn s liu v thc
hin cc php ton s hc.
Trong phn sau y, WORD1 v WORD2
l cc bin kiu word, BYTE1 v BYTE2
l cc bin kiu byte .
CPU 8086 c rt nhiu lnh, trong chng
ny, chng ta s xemxt 7 lnh n gin
ca 8086 m chng thng c dng
vi cc thao tc di chuyn s liu v thc
hin cc php ton s hc.
Trong phn sau y, WORD1 v WORD2
l cc bin kiu word, BYTE1 v BYTE2
l cc bin kiu byte .
Bin son: L Minh Trit
3.5.1 Lnh MOV v XCHG 3.5.1 Lnh MOV v XCHG
Lnh MOV dng chuyn s liu gia cc thanh ghi, gia
1 thanh ghi v 1 v tr nh hoc di chuyn trc tip
mt s n mt thanh ghi hoc mt v tr nh.
C php ca lnh MOV l :
MOV Destination , Source
V d : MOV AX,WORD1
; ly ni dung ca WORD1 a vo thanh ghi AX
MOV AX,BX
; AX ly ni dung ca BX, BX khng thay i
MOV AH,A
; AX ly gi tr 41h
Lnh MOV dng chuyn s liu gia cc thanh ghi, gia
1 thanh ghi v 1 v tr nh hoc di chuyn trc tip
mt s n mt thanh ghi hoc mt v tr nh.
C php ca lnh MOV l :
MOV Destination , Source
V d : MOV AX,WORD1
; ly ni dung ca WORD1 a vo thanh ghi AX
MOV AX,BX
; AX ly ni dung ca BX, BX khng thay i
MOV AH,A
; AX ly gi tr 41h
Bin son: L Minh Trit
! Ch lnh MOV ! Ch lnh MOV
Lnh Mov khng lmnh hng thanh ghi c hiu
Khng th chuyn d liu trc tip gia 2 ton hng m
phi dng 1 thanh ghi trung gian
V d: Chuyn d liu 16bit t Var1 vo Var2
Mov AX,Var1
Mov Var2,AX
Khng th chuyn trc tip 1 hng vo 1 thanh ghi on,
mun chuyn ta phi dng 1 thanh ghi trung gian
V d: Mun chuyn gi tr B800h vo thanh ghi DS
Mov AX,0B800h
Mov DS,AX
Khngth chuyn trc tipgia hai thanh ghi on
Lnh Mov khng lmnh hng thanh ghi c hiu
Khng th chuyn d liu trc tip gia 2 ton hng m
phi dng 1 thanh ghi trung gian
V d: Chuyn d liu 16bit t Var1 vo Var2
Mov AX,Var1
Mov Var2,AX
Khng th chuyn trc tip 1 hng vo 1 thanh ghi on,
mun chuyn ta phi dng 1 thanh ghi trung gian
V d: Mun chuyn gi tr B800h vo thanh ghi DS
Mov AX,0B800h
Mov DS,AX
Khngth chuyn trc tipgia hai thanh ghi on
Bin son: L Minh Trit
Lnh XCHG Lnh XCHG
Lnh XCHG ( Exchange) dng trao i ni
dung ca 2 thanh ghi hoc ca mt thanh ghi v
mt nh.
V d : XCHG AH,BL
XCHG AX,WORD1
; trao i ni dung ca thanh ghi AX v bin
WORD1.
Khngth dnglnh ny vi cc thanh ghi on
Lnh XCHG ( Exchange) dng trao i ni
dung ca 2 thanh ghi hoc ca mt thanh ghi v
mt nh.
V d : XCHG AH,BL
XCHG AX,WORD1
; trao i ni dung ca thanh ghi AX v bin
WORD1.
Khngth dnglnh ny vi cc thanh ghi on
Bin son: L Minh Trit
3.5.2 Lnh ADD, SUB, INC, DEC 3.5.2 Lnh ADD, SUB, INC, DEC
Lnh ADD v SUB c dng cng v tr ni dung
ca 2 thanh ghi, ca mt thanh ghi v mt v tr nh, hoc
cng (tr) mt s vi mt thanh ghi hoc mt v tr nh.
C php:
ADD Destination , Source
SUB Destination , Source
V d :
ADD WORD1, AX
ADD BL , 5
SUB AX,DX ; AX=AX-DX
Khngth cngtrc tipthanh ghi on
Lnh ADD v SUB c dng cng v tr ni dung
ca 2 thanh ghi, ca mt thanh ghi v mt v tr nh, hoc
cng (tr) mt s vi mt thanh ghi hoc mt v tr nh.
C php:
ADD Destination , Source
SUB Destination , Source
V d :
ADD WORD1, AX
ADD BL , 5
SUB AX,DX ; AX=AX-DX
Khngth cngtrc tipthanh ghi on
Bin son: L Minh Trit
Lnh ADD, SUB Lnh ADD, SUB
Khng c php cng hoc tr trc tip
gia 2 v tr nh.
gii quyt vn ny ngi ta phi di chuyn
byte (word) nh n mt thanh ghi sau mi
cng hoc tr thanh ghi ny vi mt byte (word)
nh khc.
V d:
MOV AL, BYTE2
ADD BYTE1, AL
Khng c php cng hoc tr trc tip
gia 2 v tr nh.
gii quyt vn ny ngi ta phi di chuyn
byte (word) nh n mt thanh ghi sau mi
cng hoc tr thanh ghi ny vi mt byte (word)
nh khc.
V d:
MOV AL, BYTE2
ADD BYTE1, AL
Bin son: L Minh Trit
Lnh INC, DEC Lnh INC, DEC
Lnh INC (incremrent) cng 1 vo ni dung thanh ghi
hoc mt v tr nh.
Lnh DEC (decrement) gim bt 1 khi mt thanh ghi
hoc 1 v tr nh.
C php:
INC Destination
DEC Destination
V d :
INC WORD1
INC AX
DEC BL
Lnh INC (incremrent) cng 1 vo ni dung thanh ghi
hoc mt v tr nh.
Lnh DEC (decrement) gim bt 1 khi mt thanh ghi
hoc 1 v tr nh.
C php:
INC Destination
DEC Destination
V d :
INC WORD1
INC AX
DEC BL
Bin son: L Minh Trit
3.5.3 Lnh NEG ( negative) 3.5.3 Lnh NEG ( negative)
Lnh NEG i du ca mt thanh ghi hoc
mt v tr nh.
C php :
NEG destination
Cng dng thc hin php tr 1 hng vi 1
ton hng (hng khng th ng trc). V d:
SUB 100,AL ; ASM khng cho
php nn ta vit li nh sau:
SUB AL,100
NEG AL
Lnh NEG i du ca mt thanh ghi hoc
mt v tr nh.
C php :
NEG destination
Cng dng thc hin php tr 1 hng vi 1
ton hng (hng khng th ng trc). V d:
SUB 100,AL ; ASM khng cho
php nn ta vit li nh sau:
SUB AL,100
NEG AL
Bin son: L Minh Trit
3.6 Chuyn ngn ng cp cao
thnh ngn ng ASM
3.6 Chuyn ngn ng cp cao
thnh ngn ng ASM
Gi s A, B l 2 bin word. Anh/ch chuyn cc mnh sau ra ngn
ng ASM.
1.6.1 Mnh B=A
MOV AX,A ; a A vo AX
MOV B,AX ; a AX vo B
1.6.2 Mnh A=5-A
MOV AX,5 ; a 5 vo AX
SUB AX,A ; AX=5-A
MOV A,AX ; A=5-A
cch khc : NEG A ;A=-A
ADD A,5 ;A=5-A
1.6.3 Mnh A=B-2*A
MOV AX,B ;Ax=B
SUB AX,A ;AX=B-A
SUB AX,A ;AX=B-2*A
MOV A,AX ;A=B-2*A
Gi s A, B l 2 bin word. Anh/ch chuyn cc mnh sau ra ngn
ng ASM.
1.6.1 Mnh B=A
MOV AX,A ; a A vo AX
MOV B,AX ; a AX vo B
1.6.2 Mnh A=5-A
MOV AX,5 ; a 5 vo AX
SUB AX,A ; AX=5-A
MOV A,AX ; A=5-A
cch khc : NEG A ;A=-A
ADD A,5 ;A=5-A
1.6.3 Mnh A=B-2*A
MOV AX,B ;Ax=B
SUB AX,A ;AX=B-A
SUB AX,A ;AX=B-2*A
MOV A,AX ;A=B-2*A
Bin son: L Minh Trit
3.7 Cu trc ca mt
chng trnh hp ng
3.7 Cu trc ca mt
chng trnh hp ng
Mt chng trnh ngn ng my bao gm:
m (code)
s liu (data)
ngn xp (stack).
Mi mt phn chim mt on b nh.
Mi mt on chng trnh l c
chuyn thnh mt on b nh bi ASM.
Mt chng trnh ngn ng my bao gm:
m (code)
s liu (data)
ngn xp (stack).
Mi mt phn chim mt on b nh.
Mi mt on chng trnh l c
chuyn thnh mt on b nh bi ASM.
Bin son: L Minh Trit
3.7.1 Cc kiu b nh
(memory models)
3.7.1 Cc kiu b nh
(memory models)
ln ca m v s liu trong mt chng trnh c
quy nh bi ch dn MODEL nhm xc nh kiu b
nh dng vi chng trnh.
C php ca ch dn MODEL nh sau :
.MODEL memory_model
Bng sau cho thy cc kiu b nh :
ln ca m v s liu trong mt chng trnh c
quy nh bi ch dn MODEL nhm xc nh kiu b
nh dng vi chng trnh.
C php ca ch dn MODEL nh sau :
.MODEL memory_model
Bng sau cho thy cc kiu b nh :
MODEL DESCRITION
TINY
SMALL
MEDIUM
COMPACT
LARGE
HUGE
Code, data nm trong 1 on
Code nm trong 1 on, data nm trong 1 on
Code nhiu hn 1 on , data trong 1 on
Code trong 1 on, data nhiu hn 1 an
Code, data ln hn 1 on, array khng qu 64KB
Code, data ln hn 1 on, array ln hn 64KB
Bin son: L Minh Trit
3.7.2 on s liu 3.7.2 on s liu
on s liu ca chng trnh ch cc khai bo bin,
khai bo hng... bt u on s liu chng ta dng
ch dn DATA vi c php nh sau :
.DATA
;khai bo tn cc bin , hng v mng
V d :
.DATA
WORD1 DW 2 ; gn 2 vo word1
WORD2 DW 5
MSG DB THIS IS A MESSAGE
MASK EQU 10010010B ; hng
on s liu ca chng trnh ch cc khai bo bin,
khai bo hng... bt u on s liu chng ta dng
ch dn DATA vi c php nh sau :
.DATA
;khai bo tn cc bin , hng v mng
V d :
.DATA
WORD1 DW 2 ; gn 2 vo word1
WORD2 DW 5
MSG DB THIS IS A MESSAGE
MASK EQU 10010010B ; hng
Bin son: L Minh Trit
3.7.3 on ngn xp 3.7.3 on ngn xp
Mc ch ca vic khai bo on ngn xp
l dnh mt vng nh (vng stack) lu
tr cho stack.
C php:
.STACK size
nu khng khai bo size th 1KB c dnh
cho vng stack.
.STACK 100h
;dnh 256 bytes (=100h) cho vng stack
Mc ch ca vic khai bo on ngn xp
l dnh mt vng nh (vng stack) lu
tr cho stack.
C php:
.STACK size
nu khng khai bo size th 1KB c dnh
cho vng stack.
.STACK 100h
;dnh 256 bytes (=100h) cho vng stack
Bin son: L Minh Trit
3.7.4 on m 3.7.4 on m
Bt u on m ch cc lnh ca chng trnh:
.CODE
Bn trong on m cc lnh thng c t chc thnh th tc
(procedure), c cu trc nh sau:
name PROC
;thn ca th tc
name ENDP
Cu trc ca 1 chng trnh, phn CODE l th tc c tn MAIN:
.MODELSMALL
.STACK 100h
.DATA
.CODE ; nh ngha s liu ti y
MAIN PROC
;thn ca th tc MAIN
MAIN ENDP
; cc th tc khc nu c
END MAIN
Bt u on m ch cc lnh ca chng trnh:
.CODE
Bn trong on m cc lnh thng c t chc thnh th tc
(procedure), c cu trc nh sau:
name PROC
;thn ca th tc
name ENDP
Cu trc ca 1 chng trnh, phn CODE l th tc c tn MAIN:
.MODELSMALL
.STACK 100h
.DATA
.CODE ; nh ngha s liu ti y
MAIN PROC
;thn ca th tc MAIN
MAIN ENDP
; cc th tc khc nu c
END MAIN
Bin son: L Minh Trit
3.8 Cc lnh vo ra
Lnh INT (interrupt)
3.8 Cc lnh vo ra
Lnh INT (interrupt)
gi cc chng trnh con ca BIOS v DOS
c th dng lnh INT vi c php nh sau :
INT interrupt_number
y interrupt_number l mt s m n ch
nh mt routine.
V d: INT 16h
; gi routine thc hin vic nhp s liu t
Keyboard.
gi cc chng trnh con ca BIOS v DOS
c th dng lnh INT vi c php nh sau :
INT interrupt_number
y interrupt_number l mt s m n ch
nh mt routine.
V d: INT 16h
; gi routine thc hin vic nhp s liu t
Keyboard.
Bin son: L Minh Trit
3.8.1 Lnh INT 21h 3.8.1 Lnh INT 21h
INT 21h dng gi mt s ln cc cc hm
(function) ca DOS. Tu theo gi tr m chng ta
t vo thanh ghi AH, INT 21h s gi chy mt
routine tng ng .
Trong phn ny ta s quan tmn 2 hm:
FUNCTION NUMBER ROUTINE
1 Nhp t bn phmmt k t
2 Xut ra mn hnh 1 k t
INT 21h dng gi mt s ln cc cc hm
(function) ca DOS. Tu theo gi tr m chng ta
t vo thanh ghi AH, INT 21h s gi chy mt
routine tng ng .
Trong phn ny ta s quan tmn 2 hm:
FUNCTION NUMBER ROUTINE
1 Nhp t bn phmmt k t
2 Xut ra mn hnh 1 k t
Bin son: L Minh Trit
FUCNTION 1 :
Nhp t bn phm mt k t
FUCNTION 1 :
Nhp t bn phm mt k t
Input : AH=1
Output: AL=m ASCII ca k t va nhp
AL=0 nu khng nhn phm
gi routine ny thc hin cc lnh sau:
MOV AH,1 ; input key function
INT 21h ; AL cha m ASCII ca k t
va nhp v hin th ra mn hnh
Input : AH=1
Output: AL=m ASCII ca k t va nhp
AL=0 nu khng nhn phm
gi routine ny thc hin cc lnh sau:
MOV AH,1 ; input key function
INT 21h ; AL cha m ASCII ca k t
va nhp v hin th ra mn hnh
Bin son: L Minh Trit
FUNCTION 2 :
Xut ra mn hnh 1 k t
FUNCTION 2 :
Xut ra mn hnh 1 k t
Input : AH=2
DL=m ASCII ca k t cn xut
Output: AL=m ASCII ca k t cn xut
V d: MOV AH,2
MOV DL,? ; k t ?
INT 21H ; hin th k t ?
Nu DL cha ky t iu khin thi khi gi INT 21h,
ky t iu khin s c thc hin
Input : AH=2
DL=m ASCII ca k t cn xut
Output: AL=m ASCII ca k t cn xut
V d: MOV AH,2
MOV DL,? ; k t ?
INT 21H ; hin th k t ?
Nu DL cha ky t iu khin thi khi gi INT 21h,
ky t iu khin s c thc hin
Bin son: L Minh Trit
ASCII code (Hex) FUNCTION
7 beep
8 b.space nhp b.phm1 k t 0 h.th
9 tab xut mt chui k t ra mhnh
A line feed - nhp chui t bn phm
D carriage return (Enter)
ASCII code (Hex) FUNCTION
7 beep
8 b.space nhp b.phm1 k t 0 h.th
9 tab xut mt chui k t ra mhnh
A line feed - nhp chui t bn phm
D carriage return (Enter)
Bin son: L Minh Trit
3.9 Chng trnh v d: chng trnh c mt k
t t bn phmv in n trn u dng mi
3.9 Chng trnh v d: chng trnh c mt k
t t bn phmv in n trn u dng mi
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
; display du nhc
MOV AH,2
MOV DL,?
INT 21H
; nhp 1 k t
MOV AH,1 ; hmc k t
INT 21H ; k t c a vo AL
MOV BL,AL ; ct k t trong BL
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
; display du nhc
MOV AH,2
MOV DL,?
INT 21H
; nhp 1 k t
MOV AH,1 ; hmc k t
INT 21H ; k t c a vo AL
MOV BL,AL ; ct k t trong BL
; nhy n dng mi
MOV AH,2 ; hmxut 1 k t
MOV DL,0DH; k t carriage return
INT 21H ; thc hin c.r.
MOV DL,0AH; k t line feed
INT 21H ; thc hin line feed
; xut k t
MOV DL,BL ; a k t vo DL
INT 21H ; xut k t
; tr v DOS
MOV AH,4CH; hmthot v DOS
INT 21H ; exit to DOS
MAIN ENDP
END MAIN
Bin son: L Minh Trit
3.10 Xut mt chui k t 3.10 Xut mt chui k t
Trong chng trnh trn y ta dng INT
21H hm2 v 4 c v xut mt k t.
Hm9 ngt 21H c th dng xut mt chui
k t.
Input : DX=a ch ca chui
Chui kt thc bng du $
K t $ cui chui s khng c in ln mn
hnh. Nu chui c cha k t iu khin th
chc nng tng ng s thc hin.
Trong chng trnh trn y ta dng INT
21H hm2 v 4 c v xut mt k t.
Hm9 ngt 21H c th dng xut mt chui
k t.
Input : DX=a ch ca chui
Chui kt thc bng du $
K t $ cui chui s khng c in ln mn
hnh. Nu chui c cha k t iu khin th
chc nng tng ng s thc hin.
Bin son: L Minh Trit
Chng trnh in ln mn hnh chui HELLO!.
Chui HELLOc nh ngha nh sau:
MSG DB HELLO!$
Lnh LEA (Load Effective Address) np a ch
LEA destnation , source
Ngt 21h, hm s 9 s xut mt chui k t ra
mn hnh vi iu kin a ch ca bin chui phi
trn DX . C th thc hin iu ny bi lnh :
LEA DX,MSG
; a a ch offset ca bin MSGvo DX
Chng trnh in ln mn hnh chui HELLO!.
Chui HELLOc nh ngha nh sau:
MSG DB HELLO!$
Lnh LEA (Load Effective Address) np a ch
LEA destnation , source
Ngt 21h, hm s 9 s xut mt chui k t ra
mn hnh vi iu kin a ch ca bin chui phi
trn DX . C th thc hin iu ny bi lnh :
LEA DX,MSG
; a a ch offset ca bin MSGvo DX
Bin son: L Minh Trit
PRINT STRING PROGRAM PRINT STRING PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
MSG DB HELLO!$
.CODE
MAIN PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
; display message
LEA DX,MSG
MOV AH,9
INT 21H
; return to DOS
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
.MODEL SMALL
.STACK 100H
.DATA
MSG DB HELLO!$
.CODE
MAIN PROC
; initialize DS
MOV AX,@DATA
MOV DS,AX
; display message
LEA DX,MSG
MOV AH,9
INT 21H
; return to DOS
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
Bin son: L Minh Trit
CASE COVERT PROGRAM CASE COVERT PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
CR EQU 0DH
LF EQU 0AH
TB1 DB Nhap vao mot ky tu thuong:$
TB2 DB 0DH,0AH,Ky tu vua nhap viet hoa la :
CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha xc nh
.CODE
MAIN PROC
; INITIALIZE DS
MOV AX,@DATA
MOV DS,AX
;PRINT PROMPT USER
LEA DX,TB1 ; ly thng ip s 1
MOV AH,9
INT 21H ; xut n ra mn hnh
;nhp vo mt k t thng v i n thnh k t hoa
MOV AH,1 ; nhp vo 1 k t
INT 21H ; ct n trong AL
SUB AL,20H ; i thnh ch hoa v ct n trong AL
MOV CHAR, AL ; ct k t trong bin CHAR
; xut k t trn dng tip theo
LEA DX, TB2 ; ly thng ip th 2
MOV AH,9
INT 21H ; xut chui 2, v TB2 0 kt thc bi k t $ nn tip tc xut k t c trong bin CHAR
;dos exit
MOV AH,4CH
INT 21H ; dos exit
MAIN ENDP
END MAIN
.MODEL SMALL
.STACK 100H
.DATA
CR EQU 0DH
LF EQU 0AH
TB1 DB Nhap vao mot ky tu thuong:$
TB2 DB 0DH,0AH,Ky tu vua nhap viet hoa la :
CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha xc nh
.CODE
MAIN PROC
; INITIALIZE DS
MOV AX,@DATA
MOV DS,AX
;PRINT PROMPT USER
LEA DX,TB1 ; ly thng ip s 1
MOV AH,9
INT 21H ; xut n ra mn hnh
;nhp vo mt k t thng v i n thnh k t hoa
MOV AH,1 ; nhp vo 1 k t
INT 21H ; ct n trong AL
SUB AL,20H ; i thnh ch hoa v ct n trong AL
MOV CHAR, AL ; ct k t trong bin CHAR
; xut k t trn dng tip theo
LEA DX, TB2 ; ly thng ip th 2
MOV AH,9
INT 21H ; xut chui 2, v TB2 0 kt thc bi k t $ nn tip tc xut k t c trong bin CHAR
;dos exit
MOV AH,4CH
INT 21H ; dos exit
MAIN ENDP
END MAIN
Bin son: L Minh Trit
Yu cu nhp 1 k t, sau thay i k
t nhp thnh k t i lin trc theo
th t ASCII v in ra mn hnh
Yu cu nhp 1 k t, sau thay i k
t nhp thnh k t i lin trc theo
th t ASCII v in ra mn hnh
Bin son: L Minh Trit
CASE PREVIOUS PROGRAM CASE PREVIOUS PROGRAM
.MODEL SMALL
.STACK 100H
.DATA
CR EQU 0DH
LF EQU 0AH
MSG1 DB Nhap vao 1 ky tu:$
MSG2 DB 0DH,0AH,Ky tu lien truoc no la :
CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha xc nh
.CODE
MAIN PROC
; INITIALIZE DS
MOV AX,@DATA
MOV DS,AX
;PRINT PROMPT USER
LEA DX,MSG1 ; ly thng ip s 1
MOV AH,9
INT 21H ; xut n ra mn hnh
;nhp vo mt k t thng v i n thnh k t hoa
MOV AH,1 ; nhp vo 1 k t
INT 21H ; ct n trong AL
DEC AL ;
MOV CHAR, AL ; ct k t trong bin CHAR
; xut k t trn dng tip theo
LEA DX, MSG2 ; ly thng ip th 2
MOV AH,9
INT 21H ; xut chui 2, v MSG2 0 kt thc bi k t $ nn tip tc xut k t c trong bin CHAR
;dos exit
MOV AH,4CH
INT 21H ; dos exit
MAIN ENDP
END MAIN
.MODEL SMALL
.STACK 100H
.DATA
CR EQU 0DH
LF EQU 0AH
MSG1 DB Nhap vao 1 ky tu:$
MSG2 DB 0DH,0AH,Ky tu lien truoc no la :
CHAR DB ?,$ ; nh ngha bin CHAR c gi tr ban u cha xc nh
.CODE
MAIN PROC
; INITIALIZE DS
MOV AX,@DATA
MOV DS,AX
;PRINT PROMPT USER
LEA DX,MSG1 ; ly thng ip s 1
MOV AH,9
INT 21H ; xut n ra mn hnh
;nhp vo mt k t thng v i n thnh k t hoa
MOV AH,1 ; nhp vo 1 k t
INT 21H ; ct n trong AL
DEC AL ;
MOV CHAR, AL ; ct k t trong bin CHAR
; xut k t trn dng tip theo
LEA DX, MSG2 ; ly thng ip th 2
MOV AH,9
INT 21H ; xut chui 2, v MSG2 0 kt thc bi k t $ nn tip tc xut k t c trong bin CHAR
;dos exit
MOV AH,4CH
INT 21H ; dos exit
MAIN ENDP
END MAIN
Bin son: L Minh Trit
3.1 V d v lnh nhy 3.1 V d v lnh nhy
hnh dung c lnh nhy lmvic nh th no chng ta hy vit
chng trnh in ra ton b tp cc k t IBM .
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH,2 ; hmxut k t
MOV CX,256 ; s k t cn xut
MOV DL,0 ; DL gi m ASCII ca k t NUL
PRINT_LOOP :
INT 21H ;display character
INC DL
DEC CX
J NZ PRINT_LOOP ;nhy n print_loop nu CX#0
;DOS EXIT
MOV AH,4CH
INT 21H
MAINENDP
END MAIN
hnh dung c lnh nhy lmvic nh th no chng ta hy vit
chng trnh in ra ton b tp cc k t IBM .
.MODEL SMALL
.STACK 100H
.CODE
MAIN PROC
MOV AH,2 ; hmxut k t
MOV CX,256 ; s k t cn xut
MOV DL,0 ; DL gi m ASCII ca k t NUL
PRINT_LOOP :
INT 21H ;display character
INC DL
DEC CX
J NZ PRINT_LOOP ;nhy n print_loop nu CX#0
;DOS EXIT
MOV AH,4CH
INT 21H
MAINENDP
END MAIN
Bin son: L Minh Trit
Nhy c du Nhy c du
SYMBOL DESCRITION CONDITION FOR J UMPS
J G/J NLE jump if greater than ZF=0 and SF=OF
jump if not less than or equal to
J GE/J NL jump if greater than or equal to SF=OF
jupm if not less or equal to
J L/J NGE jump if less than
jump if not greater or equal SF<>OF
J LE/J NG jump if less than or equal ZF=1 or SF<>OF
jump if not greater
SYMBOL DESCRITION CONDITION FOR J UMPS
J G/J NLE jump if greater than ZF=0 and SF=OF
jump if not less than or equal to
J GE/J NL jump if greater than or equal to SF=OF
jupm if not less or equal to
J L/J NGE jump if less than
jump if not greater or equal SF<>OF
J LE/J NG jump if less than or equal ZF=1 or SF<>OF
jump if not greater
Bin son: L Minh Trit
Lnh CMP ( Compare) Lnh CMP ( Compare)
Cc lnh nhy thng ly kt qa ca lnh
Compare nh l iu kin. C php ca lnh CMP
l :
CMP destination, source
Lnh ny so snh ton hng ngun v ton hng
ch bng cch tnh hiu Dest - Src. Kt qa khng
c ct gi . Lnh CMP ging nh lnh SUB, ch
khc: lnh CMP ton hng ch khng thay i.
Cc lnh nhy thng ly kt qa ca lnh
Compare nh l iu kin. C php ca lnh CMP
l :
CMP destination, source
Lnh ny so snh ton hng ngun v ton hng
ch bng cch tnh hiu Dest - Src. Kt qa khng
c ct gi . Lnh CMP ging nh lnh SUB, ch
khc: lnh CMP ton hng ch khng thay i.
Bin son: L Minh Trit
Hin th cu hi Is if after 12 noon (Y/N)? v ch ta bm mt phm,
nu ta bm y hay Y thng bo Good afternoon!,
cn bmn hay N (hay bt k phm) thng bo Good morning!
Hin th cu hi Is if after 12 noon (Y/N)? v ch ta bm mt phm,
nu ta bm y hay Y thng bo Good afternoon!,
cn bmn hay N (hay bt k phm) thng bo Good morning!
.MODEL SMALL
.STACK 100h
.DATA
TimePrompt DB Is it after 12 noon (Y/N)?$
GoodMorningMsg LABEL BYTE
DB 0Dh,0Ah, Good morning!,0Dh,0Ah,$
GoodAfternoonMsg LABEL BYTE
DB 0Dh,0Ah, Good afternoon!,0Dh,0Ah,$
.CODE
Begin:
MOV AX, @DATA
MOV DS, AX
LEA DX,TimePrompt
MOV AH, 09h
INT 21h
MOV AH, 01h ;Nhp mt k t cha vo AL
INT 21h
CMP AL, y ; K t g l y?
J Z IsAfternoon ; ng, nhy ti IsAfternoon
CMP AL, Y ;K t g l Y?
J NZ IsMorning ;Khng nhy ti IsMorning
.MODEL SMALL
.STACK 100h
.DATA
TimePrompt DB Is it after 12 noon (Y/N)?$
GoodMorningMsg LABEL BYTE
DB 0Dh,0Ah, Good morning!,0Dh,0Ah,$
GoodAfternoonMsg LABEL BYTE
DB 0Dh,0Ah, Good afternoon!,0Dh,0Ah,$
.CODE
Begin:
MOV AX, @DATA
MOV DS, AX
LEA DX,TimePrompt
MOV AH, 09h
INT 21h
MOV AH, 01h ;Nhp mt k t cha vo AL
INT 21h
CMP AL, y ; K t g l y?
J Z IsAfternoon ; ng, nhy ti IsAfternoon
CMP AL, Y ;K t g l Y?
J NZ IsMorning ;Khng nhy ti IsMorning
IsAfternoon:
;Khng g y hay Y
LEA DX,GoodAfternoonMsg
J MP DisplayGreeting
IsMorning:
LEA DX,GoodMorningMsg
DisplayGreenting:
MOV AH, 09h
INT 21h
MOV AX,4C00h
INT 21h
END Begin
Bin son: L Minh Trit
Din dch lnh nhy c iu kin Din dch lnh nhy c iu kin
V d trn y v lnh CMP cho php lnh
nhy sau n chuyn iu khin n nhn
BELOWcc lnh
CMP AX,BX
J G BELOW
c ngha l nu AX>BX th nhy n nhn
BELOW
V d trn y v lnh CMP cho php lnh
nhy sau n chuyn iu khin n nhn
BELOWcc lnh
CMP AX,BX
J G BELOW
c ngha l nu AX>BX th nhy n nhn
BELOW
Bin son: L Minh Trit
Mc d lnh CMP c thit k cho cc
lnh nhy. Nhng lnh nhy c th ng
trc 1 lnh khc, chng hn :
DEC AX
J L THERE
c ngha l nu AX trong din dch c du
< 0 th iu khin c chuyn cho
THERE
Mc d lnh CMP c thit k cho cc
lnh nhy. Nhng lnh nhy c th ng
trc 1 lnh khc, chng hn :
DEC AX
J L THERE
c ngha l nu AX trong din dch c du
< 0 th iu khin c chuyn cho
THERE
Bin son: L Minh Trit
3.11 Lnh J MP 3.11 Lnh J MP
Lnh J MP ( jump) l lnh nhy khng iu kin.
C php:
J MP destination
Trong destination l mt nhn trong
cng 1 an vi lnh J MP.
Lnh J MP dng khc phc hn ch ca cc
lnh nhy c iu kin (khng qu 126 bytes k
t v tr ca lnh nhy c iu kin)
Lnh J MP ( jump) l lnh nhy khng iu kin.
C php:
J MP destination
Trong destination l mt nhn trong
cng 1 an vi lnh J MP.
Lnh J MP dng khc phc hn ch ca cc
lnh nhy c iu kin (khng qu 126 bytes k
t v tr ca lnh nhy c iu kin)
Bin son: L Minh Trit
V d chng ta c on chng
trnh sau :
V d chng ta c on chng
trnh sau :
TOP:
; thn vng lp
DEC CX
J NZ TOP ; nu CX>0 tip tc lp
MOV AX,BX
gi s thn vng lp cha nhiu lnh m n vt khi 126 bytes trc
lnh J NZ TOP . C th gii quyt tnh trng ny bng cc lnh sau :
TOP:
; thn vng lp
DEC CX
J NZ BOTTOM ; nu CX>0 tip tc lp
J MP EXIT
BOTTOM:
J MP TOP
EXIT:
MOV AX,BX
TOP:
; thn vng lp
DEC CX
J NZ TOP ; nu CX>0 tip tc lp
MOV AX,BX
gi s thn vng lp cha nhiu lnh m n vt khi 126 bytes trc
lnh J NZ TOP . C th gii quyt tnh trng ny bng cc lnh sau :
TOP:
; thn vng lp
DEC CX
J NZ BOTTOM ; nu CX>0 tip tc lp
J MP EXIT
BOTTOM:
J MP TOP
EXIT:
MOV AX,BX
Bin son: L Minh Trit
3.12 Cu trc r nhnh 3.12 Cu trc r nhnh
Trong ngn ng cp cao cu trc r nhnh
cho php mt chng trnh r nhnh n
nhng on khc nhau tu thuc vo cc
iu kin . Trong phn ny chng ta s xem
xt 3 cu trc
a. IF-THEN
b. IF_THEN_ELSE
c. CASE
Trong ngn ng cp cao cu trc r nhnh
cho php mt chng trnh r nhnh n
nhng on khc nhau tu thuc vo cc
iu kin . Trong phn ny chng ta s xem
xt 3 cu trc
a. IF-THEN
b. IF_THEN_ELSE
c. CASE
Bin son: L Minh Trit
a. IF-THEN a. IF-THEN
Cu trc IF-THENc th din t nh sau :
IF condition is true
THEN
execute true branch statements
END IF
V d : Thay th gi tr trn AX bng gi tr tuyt i ca n
IF AX<0
THEN
replace AX by -AX
END-IF
C th m ho nh sau :
; if AX<0
CMP AX,0
J NL END_IF ; no, exit
;then
NEG AX ; yes, i du
END_IF :
Cu trc IF-THENc th din t nh sau :
IF condition is true
THEN
execute true branch statements
END IF
V d : Thay th gi tr trn AX bng gi tr tuyt i ca n
IF AX<0
THEN
replace AX by -AX
END-IF
C th m ho nh sau :
; if AX<0
CMP AX,0
J NL END_IF ; no, exit
;then
NEG AX ; yes, i du
END_IF :
Bin son: L Minh Trit
b. IF_THEN_ELSE b. IF_THEN_ELSE
IF condition is true
THEN
execute true branch statements
ELSE
execute false branch statements
END_IF
V d : gi s AL v BL cha ASCII code
ca 1 k t. Hy xut ra mn hnh k t
trc (theo th t k t ). Thut ton
IF AL<= BL
THEN
display AL
ELSE
display character in BL
END_IF
IF condition is true
THEN
execute true branch statements
ELSE
execute false branch statements
END_IF
V d : gi s AL v BL cha ASCII code
ca 1 k t. Hy xut ra mn hnh k t
trc (theo th t k t ). Thut ton
IF AL<= BL
THEN
display AL
ELSE
display character in BL
END_IF
C th m ho nh sau :
MOV AH,2
; chun b xut k t
;if AL<=BL
CMP AL,BL ;AL<=BL?
J NBE ELSE_
; nu khng nh hn hay = BL
;then
MOV DL,AL
J MP DISPLAY
ELSE_:
MOV DL,BL
DISPLAY:
INT 21H
END_IF :
C th m ho nh sau :
MOV AH,2
; chun b xut k t
;if AL<=BL
CMP AL,BL ;AL<=BL?
J NBE ELSE_
; nu khng nh hn hay = BL
;then
MOV DL,AL
J MP DISPLAY
ELSE_:
MOV DL,BL
DISPLAY:
INT 21H
END_IF :
Bin son: L Minh Trit
c. CASE c. CASE
Case l mt cu trc r nhnh nhiu
hng. Cu trc ca CASE nh sau :
CASE expression
value_1 : Statements_1
value_2 : Statements_2

value_n : Statements_n
V d : Nu AX <0 th t -1 vo BX
Nu AX =0 th t 0 vo BX
Nu AX >0 th t 1 vo BX
Thut ton :
CASE AX
<0 put -1 in BX
=0 put 0 in BX
>0 put 1 in BX
Case l mt cu trc r nhnh nhiu
hng. Cu trc ca CASE nh sau :
CASE expression
value_1 : Statements_1
value_2 : Statements_2

value_n : Statements_n
V d : Nu AX <0 th t -1 vo BX
Nu AX =0 th t 0 vo BX
Nu AX >0 th t 1 vo BX
Thut ton :
CASE AX
<0 put -1 in BX
=0 put 0 in BX
>0 put 1 in BX
C th m ho nh sau :
; case AX
CMP AX,0 ;test AX
J L NEGATIVE ;AX<0
J E ZERO ;AX=0
J G positive ;AX>0
NEGATIVE:
MOV BX,-1
J MP END_CASE
ZERO:
MOV BX,0
J MP END_CASE
POSITIVE:
MOV BX,1
J MP END_CASE
END_CASE :
C th m ho nh sau :
; case AX
CMP AX,0 ;test AX
J L NEGATIVE ;AX<0
J E ZERO ;AX=0
J G positive ;AX>0
NEGATIVE:
MOV BX,-1
J MP END_CASE
ZERO:
MOV BX,0
J MP END_CASE
POSITIVE:
MOV BX,1
J MP END_CASE
END_CASE :
Bin son: L Minh Trit
R nhnh vi t hp cc iu kin R nhnh vi t hp cc iu kin
i khi tnh trng r nhnh trong cc
lnh IF ,CASE cn mt t hp cc
iu kin di dng :
Condition_1 AND Condition_2
Condition_1 OR Condition_2
i khi tnh trng r nhnh trong cc
lnh IF ,CASE cn mt t hp cc
iu kin di dng :
Condition_1 AND Condition_2
Condition_1 OR Condition_2
Bin son: L Minh Trit
V d v iu kin AND : V d v iu kin AND :
c 1 k t v nu l k t hoa th in ra MH.
Thut ton :
Read a character ( into AL)
IF ( A<= character ) AND ( charater <= Z)
THEN
display character
END_IF
c 1 k t v nu l k t hoa th in ra MH.
Thut ton :
Read a character ( into AL)
IF ( A<= character ) AND ( charater <= Z)
THEN
display character
END_IF
Bin son: L Minh Trit
V d v iu kin AND:
c 1 k t v nu l k t hoa th in ra MH.
V d v iu kin AND:
c 1 k t v nu l k t hoa th in ra MH.
; read a character
MOV AH,1
INT 21H ; character in AL
; IF ( A<= character ) AND ( charater <= Z)
CMP AL,A ; char >=A?
J NGE END_IF ;no, exit
CMP AL,Z ; char <=Z?
J NLE END_IF ; no exit
; then display it
MOV DL,AL
MOV AH,2
INT 21H
END_IF :
; read a character
MOV AH,1
INT 21H ; character in AL
; IF ( A<= character ) AND ( charater <= Z)
CMP AL,A ; char >=A?
J NGE END_IF ;no, exit
CMP AL,Z ; char <=Z?
J NLE END_IF ; no exit
; then display it
MOV DL,AL
MOV AH,2
INT 21H
END_IF :
Bin son: L Minh Trit
V d v iu kin OR : c mt k t , nu k t l Y hoc y
th in n ln mn hnh , ngc li th kt thc chng trnh .
V d v iu kin OR : c mt k t , nu k t l Y hoc y
th in n ln mn hnh , ngc li th kt thc chng trnh .
Thut ton
Read a charcter ( into AL)
IF ( chr =Y) OR ( chr=y)
THEN
dispplay it
ELSE
terminate the program
END_IF
Code
;read a character
MOV AH,1
INT 21H
; character in AL
Thut ton
Read a charcter ( into AL)
IF ( chr =Y) OR ( chr=y)
THEN
dispplay it
ELSE
terminate the program
END_IF
Code
;read a character
MOV AH,1
INT 21H
; character in AL
;IF ( chr =y ) OR ( chr = Y)
CMP AL,y ; chr =y?
J E THEN ;=, in Chr
CMP AL,Y ; chr =Y?
J E THEN ;=, in Chr
J MP ELSE_ ;<> , terminate
THEN :
MOV DL,AL
MOV AH,2
INT 21H
J MP END_IF
ELSE_:
MOV AH,4CH
INT 21h
END_IF :
;IF ( chr =y ) OR ( chr = Y)
CMP AL,y ; chr =y?
J E THEN ;=, in Chr
CMP AL,Y ; chr =Y?
J E THEN ;=, in Chr
J MP ELSE_ ;<> , terminate
THEN :
MOV DL,AL
MOV AH,2
INT 21H
J MP END_IF
ELSE_:
MOV AH,4CH
INT 21h
END_IF :
Bin son: L Minh Trit
3.13 Cu trc lp 3.13 Cu trc lp
Mt vng lp gm nhiu lnh c
lp li, s ln lp ph thuc iu kin.
a. Vng FOR
b. Vng WHI LE
c. Vng REPEAT
Mt vng lp gm nhiu lnh c
lp li, s ln lp ph thuc iu kin.
a. Vng FOR
b. Vng WHI LE
c. Vng REPEAT
Bin son: L Minh Trit
a. Vng FOR a. Vng FOR
Lnh LOOP c th dng thc hin vng FOR.
C php :
LOOP destination_label
S m cho vng lp l thanh ghi CX m ban u n
c gn 1 gi tr no . Khi lnh LOOP c thc hin
CX s t ng gim i 1. Nu CX cha bng 0 th vng
lp c thc hin tip tc. Nu CX=0 lnh sau lnh LOOP
c thc hin
Dng lnh LOOP , vng FOR c th thc hin nh sau :
; gn cho cho CX s ln lp
TOP:
; thn ca vng lp
LOOP TOP
Lnh LOOP c th dng thc hin vng FOR.
C php :
LOOP destination_label
S m cho vng lp l thanh ghi CX m ban u n
c gn 1 gi tr no . Khi lnh LOOP c thc hin
CX s t ng gim i 1. Nu CX cha bng 0 th vng
lp c thc hin tip tc. Nu CX=0 lnh sau lnh LOOP
c thc hin
Dng lnh LOOP , vng FOR c th thc hin nh sau :
; gn cho cho CX s ln lp
TOP:
; thn ca vng lp
LOOP TOP
Bin son: L Minh Trit
V d : Dng vng lp in ra 1
hng 80 du *
V d : Dng vng lp in ra 1
hng 80 du *
MOV CX,80 ; CX ch s ln lp
MOV AH,2 ; hmxut k t
MOV DL,* ;DL ch k t *
TOP:
INT 21h ; in du *
LOOPTOP ; lp 80 ln
Lu rng vng FOR cng nh lnh LOOP thc
hin t nht l 1 ln. Do o nu ban u CX=0 th
vng lp s thc hin lp n 65535 ln.
trnh tnh trng ny, lnh J CXZ (J ump if CX is
zero) phi c dng trc vng lp.
MOV CX,80 ; CX ch s ln lp
MOV AH,2 ; hmxut k t
MOV DL,* ;DL ch k t *
TOP:
INT 21h ; in du *
LOOPTOP ; lp 80 ln
Lu rng vng FOR cng nh lnh LOOP thc
hin t nht l 1 ln. Do o nu ban u CX=0 th
vng lp s thc hin lp n 65535 ln.
trnh tnh trng ny, lnh J CXZ (J ump if CX is
zero) phi c dng trc vng lp.
Bin son: L Minh Trit
Lnh J XCZc c php nh sau :
J CXZ destination_label
Nu CX=0 iu khin c chuyn cho
destination_label. Cc lnh sau y s mbo
vng lp khng thc hin nu CX=0
J CXZ SKIP
TOP :
; thn vng lp
LOOPTOP
SKIP :
Lnh J XCZc c php nh sau :
J CXZ destination_label
Nu CX=0 iu khin c chuyn cho
destination_label. Cc lnh sau y s mbo
vng lp khng thc hin nu CX=0
J CXZ SKIP
TOP :
; thn vng lp
LOOPTOP
SKIP :
Bin son: L Minh Trit
b. Vng WHILE b. Vng WHILE
Vng WHILE phu thuc vo 1 iu kin. Nu iu kin
ng thi thc hin vng WHILE. V vy nu iu kin sai
thi vng WHILE khng thc hin gi c .
V d : Vit on m m s ky t c nhp vo trn
cng mt hng .
MOV DX,0 ; DX ms ky t
MOV AH,1 ;hmc 1 ky t
INT 21h ; c ky t vo AL
WHILE_:
CMP AL,0DH ; c phi l ky t CR?
J E END_WHILE ; ng , thot
INC DX ;tng DX ln 1
INT 21h ; c ky t
J MP WHILE_ ; lp
END_WHILE :
Vng WHILE phu thuc vo 1 iu kin. Nu iu kin
ng thi thc hin vng WHILE. V vy nu iu kin sai
thi vng WHILE khng thc hin gi c .
V d : Vit on m m s ky t c nhp vo trn
cng mt hng .
MOV DX,0 ; DX ms ky t
MOV AH,1 ;hmc 1 ky t
INT 21h ; c ky t vo AL
WHILE_:
CMP AL,0DH ; c phi l ky t CR?
J E END_WHILE ; ng , thot
INC DX ;tng DX ln 1
INT 21h ; c ky t
J MP WHILE_ ; lp
END_WHILE :
Bin son: L Minh Trit
c. Vng REPEAT c. Vng REPEAT
Cu trc REPEAT: repeat statements
until condition
Trong cu trc repeat mnh c thi hnh ng thi iu
kin c kimtra. Nu iu kin ng th vng lp kt thc.
V d : Vit on m c vo cc k t cho n khi gp k t trng .
MOV AH,1 ; c k t
REPEAT:
INT 21h ; k t trn AL
;until
CMP AL, ; AL= ?
J NE REPEAT
Lu : REPEAT tin hnh t nht 1 ln, trong khi WHILE c th
khng tin hnh ln no nu t u iu kin b sai.
Cu trc REPEAT: repeat statements
until condition
Trong cu trc repeat mnh c thi hnh ng thi iu
kin c kimtra. Nu iu kin ng th vng lp kt thc.
V d : Vit on m c vo cc k t cho n khi gp k t trng .
MOV AH,1 ; c k t
REPEAT:
INT 21h ; k t trn AL
;until
CMP AL, ; AL= ?
J NE REPEAT
Lu : REPEAT tin hnh t nht 1 ln, trong khi WHILE c th
khng tin hnh ln no nu t u iu kin b sai.
Bin son: L Minh Trit
3.14 Lp trnh vi cu trc cp cao 3.14 Lp trnh vi cu trc cp cao
Bi ton : Vit chng trnh nhc ngi dng
g vo mt dng vn bn. m s k t va
nhp vo v in ra kt qu
Kt qa chy chng trnh s nh sau :
Nhapvao 1 dongky tu:
SUPHAM
So ky tu nhap vao =7
Bi ton : Vit chng trnh nhc ngi dng
g vo mt dng vn bn. m s k t va
nhp vo v in ra kt qu
Kt qa chy chng trnh s nh sau :
Nhapvao 1 dongky tu:
SUPHAM
So ky tu nhap vao =7
Bin son: L Minh Trit
.MODEL SMALL
.STACK 100h
.DATA
Tbao DB Nhap vao 1 dong ky tu:$
Tbao2 DB 0Dh,0Ah, So ky tu ban nhap vao la:
Sokt DB ?,$
.CODE
Begin:
MOV AX, @DATA
MOV DS, AX
LEA DX,Tbao
MOV AH, 09h
INT 21h
MOV DX,0 ; DX ms ky t
MOV AH,1 ;hmc 1 ky t
INT 21h ; c ky t vo AL
.MODEL SMALL
.STACK 100h
.DATA
Tbao DB Nhap vao 1 dong ky tu:$
Tbao2 DB 0Dh,0Ah, So ky tu ban nhap vao la:
Sokt DB ?,$
.CODE
Begin:
MOV AX, @DATA
MOV DS, AX
LEA DX,Tbao
MOV AH, 09h
INT 21h
MOV DX,0 ; DX ms ky t
MOV AH,1 ;hmc 1 ky t
INT 21h ; c ky t vo AL
WHILE_:
CMP AL,0DH
; c phi l ky t CR?
J E END_WHILE;
ng , thot
INC DX
;tng DX ln 1
INT 21h
; c ky t
J MP WHILE_
; lp
END_WHILE :
MOV Sokt,DX
LEA DX,Tbao2
MOV AH, 09h
INT 21h
MOV AX,4C00h
INT 21h
END Begin
Bin son: L Minh Trit
3.14 Lp trnh vi cu trc cp cao 3.14 Lp trnh vi cu trc cp cao
Bi ton : Vit chng trnh nhc ngi dng
g vo mt dng vn bn. Trn 2 dng tip
theo in ra k t vit hoa u tin v k t vit
hoa cui cng theo th t alphabetical. Nu
ngi dng g vo mt k t thng, my s
thng bo No capitals
Kt qa chy chng trnh s nh sau :
Type a line of text :
TRUONGDAI HOC SUPHAM
First capital =A
Last capital =U
Bi ton : Vit chng trnh nhc ngi dng
g vo mt dng vn bn. Trn 2 dng tip
theo in ra k t vit hoa u tin v k t vit
hoa cui cng theo th t alphabetical. Nu
ngi dng g vo mt k t thng, my s
thng bo No capitals
Kt qa chy chng trnh s nh sau :
Type a line of text :
TRUONGDAI HOC SUPHAM
First capital =A
Last capital =U
Bin son: L Minh Trit
gii bi ton ny ta dng k thut lp
trnh TOP-DOWN, ngha l chia nh bi
ton thnh nhiu bi ton con. C th
chia bi ton thnh 3 bi ton con nh
sau :
1. Xut 1 chui k t ( li nhc)
2. c v x l 1 dng vn bn
3. In kt qa
gii bi ton ny ta dng k thut lp
trnh TOP-DOWN, ngha l chia nh bi
ton thnh nhiu bi ton con. C th
chia bi ton thnh 3 bi ton con nh
sau :
1. Xut 1 chui k t ( li nhc)
2. c v x l 1 dng vn bn
3. In kt qa
Bin son: L Minh Trit
Bc 1: Hin du nhc . Bc 1: Hin du nhc .
Bc ny c th m ho nh sau :
MOV AH,9 ; hmxut chui
LEA DX,PRMOPT ;ly a ch chui vo DX
INT 21H ; xut chui
Du nhc c th m ho nh sau trong on s liu .
PROMPT DB Type a line of text:,0DH,0AH,$
Bc ny c th m ho nh sau :
MOV AH,9 ; hmxut chui
LEA DX,PRMOPT ;ly a ch chui vo DX
INT 21H ; xut chui
Du nhc c th m ho nh sau trong on s liu .
PROMPT DB Type a line of text:,0DH,0AH,$
Bin son: L Minh Trit
Bc 2 : c v x l mt
dng vn bn
Bc 2 : c v x l mt
dng vn bn
c cc k t t bn phm , tm ra k t u v k t cui , nhc nh ngi dng
nu k t g vo khng phi l k t hoa.
C th biu din bc ny bi thut ton sau :
Read a character
WHILE character is not a carrige return DO
IF character is a capital (*)
THEN
IF character precedes first capital
Then
first capital=character
End_if
IF character follows last character
Then
last character =character
End_if
END_IF
Read a character
END_WHILE
Trong dng (*) c ngha l iu kin k t l hoa l iu kin AND
IF ( A<=character ) AND( character <=Z)
c cc k t t bn phm , tm ra k t u v k t cui , nhc nh ngi dng
nu k t g vo khng phi l k t hoa.
C th biu din bc ny bi thut ton sau :
Read a character
WHILE character is not a carrige return DO
IF character is a capital (*)
THEN
IF character precedes first capital
Then
first capital=character
End_if
IF character follows last character
Then
last character =character
End_if
END_IF
Read a character
END_WHILE
Trong dng (*) c ngha l iu kin k t l hoa l iu kin AND
IF ( A<=character ) AND( character <=Z)
Bin son: L Minh Trit
MOV AH,1 ; c k t
INT 21H ; k t trn AL
WHILE :
;trong khi k t g vo khng phi l CR th
thc hin
CMP AL,0DH ; CR?
J E END_WHILE ;yes, thot
; nu k t l hoa
CMP AL,A ; char >=A?
J NGE END_IF
;khng phi k t hoa th nhy n END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF
; khng phi k t hoa th nhy n END_IF
; th
; nu k t nmtrc bin FIRST (gi tr ban
u l[ : k t sau Z )
CMP AL,FISRT ; char <FIRST ?
J NL CHECK_LAST; >=
; th k t vit hoa u tin =k t
MOV FIRST,AL ;FIRST=chr.
;end_if
MOV AH,1 ; c k t
INT 21H ; k t trn AL
WHILE :
;trong khi k t g vo khng phi l CR th
thc hin
CMP AL,0DH ; CR?
J E END_WHILE ;yes, thot
; nu k t l hoa
CMP AL,A ; char >=A?
J NGE END_IF
;khng phi k t hoa th nhy n END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF
; khng phi k t hoa th nhy n END_IF
; th
; nu k t nmtrc bin FIRST (gi tr ban
u l[ : k t sau Z )
CMP AL,FISRT ; char <FIRST ?
J NL CHECK_LAST; >=
; th k t vit hoa u tin =k t
MOV FIRST,AL ;FIRST=chr.
;end_if
CHECK_LAST:
; nu k t l sau bin LAST ( gi tr ban u l
@: k t trc A)
CMP AL,LAST ; char > LAST ?
J NG END_IF ; <=
;th k t cui cng =k t
MOV LAST, AL ;LAST = character
;end_if
END_IF :
; c mt k t
INT 21H ; k t trn AL
J MP WHILE_ ; lp
END_WHILE:
Cc bin FIRST v LAST nh ngha nh sau:
FIRST DB [ $ ;[ l k t sau Z
LAST DB @ $ ;@ l k t trc A
CHECK_LAST:
; nu k t l sau bin LAST ( gi tr ban u l
@: k t trc A)
CMP AL,LAST ; char > LAST ?
J NG END_IF ; <=
;th k t cui cng =k t
MOV LAST, AL ;LAST = character
;end_if
END_IF :
; c mt k t
INT 21H ; k t trn AL
J MP WHILE_ ; lp
END_WHILE:
Cc bin FIRST v LAST nh ngha nh sau:
FIRST DB [ $ ;[ l k t sau Z
LAST DB @ $ ;@ l k t trc A
Bin son: L Minh Trit
MOV AH,1 ; c k t
INT 21H ; k t trn AL
;trong khi k t g vo khng phi l CR
th thc hin
CMP AL,0DH ; CR?
J E END_IF ; thot
;Xet ktu in hoa
CMP AL,A ; char >=A?
J NGE END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF ; khng phi
k t hoa th nhy n END_IF
; nu tha th
;Thong bao ra MH la kt in hoa
Else_:
;Thong bao ra MH o la kt in hoa
END_IF :
MOV AH,1 ; c k t
INT 21H ; k t trn AL
;trong khi k t g vo khng phi l CR
th thc hin
CMP AL,0DH ; CR?
J E END_IF ; thot
;Xet ktu in hoa
CMP AL,A ; char >=A?
J NGE END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF ; khng phi
k t hoa th nhy n END_IF
; nu tha th
;Thong bao ra MH la kt in hoa
Else_:
;Thong bao ra MH o la kt in hoa
END_IF :
Bin son: L Minh Trit
Bc 3 : In kt qa Bc 3 : In kt qa
Thut ton
IF no capital were typed
THEN
display No capital
ELSE
display first capital and last capital
END_IF
Bc 3 s phi in ra cc thng bo :
NOCAP_MSGnu khng phi ch in
CAP1_MSG ch in u tin
CAP2_MSG ch in cui cng
Chng c nh ngha nh sau trong on s liu .
NOCAP_MSG DB 0DH,0AH,No capitals $
CAP1_MSG DB 0DH,0AH, First capital=
FIRST DB [ $
CAP2_MSG DB 0DH,0AH,Last capital=
LAST DB @ $
Thut ton
IF no capital were typed
THEN
display No capital
ELSE
display first capital and last capital
END_IF
Bc 3 s phi in ra cc thng bo :
NOCAP_MSGnu khng phi ch in
CAP1_MSG ch in u tin
CAP2_MSG ch in cui cng
Chng c nh ngha nh sau trong on s liu .
NOCAP_MSG DB 0DH,0AH,No capitals $
CAP1_MSG DB 0DH,0AH, First capital=
FIRST DB [ $
CAP2_MSG DB 0DH,0AH,Last capital=
LAST DB @ $
Bin son: L Minh Trit
Bc 3 c th m ho nh sau : Bc 3 c th m ho nh sau :
;in kt qu
MOV AH,9 ; hmxut k t
; IF khng c ch hoa no c nhp th FIRST =[
CMP FIRST,[ ; FIRST=[ ?
J NECAPS ; khng , in kt qa
;THEN
LEADX,NOCAP_MSG
INT 21H
CAPS:
LEADX,CAP1_MSG
INT 21H
LEADX,CAP2_MSG
INT 21H
; end_if
;in kt qu
MOV AH,9 ; hmxut k t
; IF khng c ch hoa no c nhp th FIRST =[
CMP FIRST,[ ; FIRST=[ ?
J NECAPS ; khng , in kt qa
;THEN
LEADX,NOCAP_MSG
INT 21H
CAPS:
LEADX,CAP1_MSG
INT 21H
LEADX,CAP2_MSG
INT 21H
; end_if
Bin son: L Minh Trit
Chng trnh c th vit nh sau: Chng trnh c th vit nh sau:
.MODEL SMALL
.STACK 100h
.DATA
PROMPT DB Type a line of text, 0DH, AH, $
NOCAP_MSG DB 0DH,0AH, No capitals $
CAP1_MSGDB 0DH,0AH, First capital=
FIRST DB [ $
CAP2_MSGDB Last capital =
LAST DB @ $
.CODE
MAIN PROC
; khi to DS
MOV AX,@DATA
MOV DS,AX
; in du nhc
MOV AH,9 ; hmxut chui
LEA DX,PROMPT ;ly a ch chui vo DX
INT 21H ; xut chui
.MODEL SMALL
.STACK 100h
.DATA
PROMPT DB Type a line of text, 0DH, AH, $
NOCAP_MSG DB 0DH,0AH, No capitals $
CAP1_MSGDB 0DH,0AH, First capital=
FIRST DB [ $
CAP2_MSGDB Last capital =
LAST DB @ $
.CODE
MAIN PROC
; khi to DS
MOV AX,@DATA
MOV DS,AX
; in du nhc
MOV AH,9 ; hmxut chui
LEA DX,PROMPT ;ly a ch chui vo DX
INT 21H ; xut chui
Bin son: L Minh Trit
;c v x l 1 dng vn bn
MOV AH,1 ; c k t
INT 21H ; k t trn AL
WHILE :
;trong khi k t g vo khng phi l CR th thc hin
CMP AL,0DH ; CR?
J E END_WHILE ;yes, thot
; nu k t l hoa
CMP AL,A ; char >=A?
J NGE END_IF ;0 phi K.t hoa, nhy n END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF ; 0 phi k.t hoa, nhy n END_IF
; th
; nu k t nmtrc bin FIRST
CMP AL,FISRT ; char < FIRST ?
J NL CHECK_LAST ; >=
; th k t vit hoa u tin =k t
MOV FIRST,AL ; FIRST=character
;end_if
;c v x l 1 dng vn bn
MOV AH,1 ; c k t
INT 21H ; k t trn AL
WHILE :
;trong khi k t g vo khng phi l CR th thc hin
CMP AL,0DH ; CR?
J E END_WHILE ;yes, thot
; nu k t l hoa
CMP AL,A ; char >=A?
J NGE END_IF ;0 phi K.t hoa, nhy n END_IF
CMP AL,Z ; char <= Z?
J NLE END_IF ; 0 phi k.t hoa, nhy n END_IF
; th
; nu k t nmtrc bin FIRST
CMP AL,FISRT ; char < FIRST ?
J NL CHECK_LAST ; >=
; th k t vit hoa u tin =k t
MOV FIRST,AL ; FIRST=character
;end_if
Bin son: L Minh Trit
CHECK_LAST:
; nu k t l sau bin LAST
CMP AL,LAST ; char > LAST ?
J NG END_IF ; <=
;th k t cui cng =k t
MOV LAST, AL ;LAST = character
;end_if
END_IF :
; c mt k t
INT 21H ; k t trn AL
J MP WHILE_ ; lp
END_WHILE:
CHECK_LAST:
; nu k t l sau bin LAST
CMP AL,LAST ; char > LAST ?
J NG END_IF ; <=
;th k t cui cng =k t
MOV LAST, AL ;LAST = character
;end_if
END_IF :
; c mt k t
INT 21H ; k t trn AL
J MP WHILE_ ; lp
END_WHILE:
Bin son: L Minh Trit
;in kt qu
MOV AH,9 ; hmxut k t
; IF khng c ch hoa no c nhp th FIRST =[
CMP FIRST,[ ; FIRST=[ ?
J NE CAPS ; khng , in kt qa
;Then
LEA DX,NOCAP_MSG
INT 21H
CAPS:
LEA DX,CAP1_MSG
INT 21H
LEA DX,CAP2_MSG
INT 21H
; end_if
; dos exit
MOV AH,4CH
INT 21h
MAIN ENDP
END MAIN
;in kt qu
MOV AH,9 ; hmxut k t
; IF khng c ch hoa no c nhp th FIRST =[
CMP FIRST,[ ; FIRST=[ ?
J NE CAPS ; khng , in kt qa
;Then
LEA DX,NOCAP_MSG
INT 21H
CAPS:
LEA DX,CAP1_MSG
INT 21H
LEA DX,CAP2_MSG
INT 21H
; end_if
; dos exit
MOV AH,4CH
INT 21h
MAIN ENDP
END MAIN
Bin son: L Minh Trit
Bi tp1:
Vit chng trnh nhp vo 2 s (0-9), tnh tng,
hiu 2 s .
Bi tp2:
Nhp vo 1 s nguyn n, khng du (1-9)
Tnh tng=1+2+..+N
Bi tp3:
Nhp vo 1 dy s Vd: 23145. ms k s c
trong dy Vd: Day co 5 ky so.
Bi tp4:
Nhp vo 1 k t hoa ( A<=gi s <= Z).
In dy k t t n Z
Bi tp1:
Vit chng trnh nhp vo 2 s (0-9), tnh tng,
hiu 2 s .
Bi tp2:
Nhp vo 1 s nguyn n, khng du (1-9)
Tnh tng=1+2+..+N
Bi tp3:
Nhp vo 1 dy s Vd: 23145. ms k s c
trong dy Vd: Day co 5 ky so.
Bi tp4:
Nhp vo 1 k t hoa ( A<=gi s <= Z).
In dy k t t n Z
Bin son: L Minh Trit
Mul desc
Desc l thanh ghi bt k, nhn vi gi tr
trong thanh ghi AL
Kt qu lu vo AX
AAM
AH,AL
Mul desc
Desc l thanh ghi bt k, nhn vi gi tr
trong thanh ghi AL
Kt qu lu vo AX
AAM
AH,AL

You might also like