SÁNG KIẾN ÁP DỤNG CLT (COMMUNICATIVE LANGUAGE TEACHING) VÀO QUÁ TRÌNH DẠY - H...
Bg hop ngu-chuong7
1. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
CH NG VII: M NG VÀ CÁC L NH THAO TÁC CHU I
7.1 M ng m t chi u (chu i)
7.1.1 Khai báo m ng
M ng m t chi u g m m t chu i liên ti p các byte hay word trong b nh .
ch ng II ta ã t ng s d ng khai báo:
.DATA
ChuoiKT DB ‘KHOA CONG NGHE THONG TIN$’
Th c ch t khai báo này s chi m m t vùng 25 ô nh trong n d li u và t vào ó
các kí t t ng ng:
‘K’
‘H’
‘O’
‘A’
‘’
‘C’
…
Cách khai báo nh trên t ng ng v i cách khai báo sau ây:
.DATA
ChuoiKT DB ‘K’, ‘H’, ‘O’, ‘A’, ‘CONG’, ‘NGHE’, ‘THONG TIN$’
Và c ng t ng ng v i:
.DATA
ChuoiKT DB 4Bh, 48h, 4Fh, 41h, ‘CONG’, ‘NGHE’, ‘THONG TIN$’
Các khai báo ó c g i là khai báo li t kê, t c là s t o ra trong b nh m t m ng có
l ng ph n t xác nh, ng th i kh i t o luôn giá tr cho t ng ph n t . D i ây s
c p t i các ph ng pháp khai báo t ng quát.
a) Khai báo m ng Byte:
M ng Byte là m ng mà m i ph n t có kích th c 1 byte.
Cách 1: <Tên m ng> DB <li t kê các ph n t c a m ng>
Ví d :
A DB 10h, 12h, 30, 40
Khai báo trên t o ra m ng A có 4 ph n t , m i ph n t chi m 1 byte nh .
Cách 2: <Tên m ng> DB <S ph n t c a m ng> DUP (Giá tr kh i t o)
Ví d 1:
A DB 50 DUP (0)
Khai báo trên t o ra m ng A có 50 ph n t , giá tr ban u c a các ph n t b ng 0.
Ví d 2:
B DB 100 DUP (?)
50
2. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
Khai báo trên t o ra m ng B có 100 ph n t , không kh i t o giá tr ban u cho các
ph n t .
b) Khai báo m ng Word:
M ng Word là m ng mà m i ph n t có kích th c 1 word.
Cách 1: <Tên m ng> DW <li t kê các ph n t c a m ng>
Cách 2: <Tên m ng> DW <S ph n t c a m ng> DUP (Giá tr kh i t o)
Ví d 1:
A DW 10h, 12h, 30, 40
Khai báo trên t o ra m ng A có 4 ph n t , m i ph n t dài 16 bít.
Ví d 2:
B DW 50 DUP (?)
7.1.2 Các ph n t c a m ng m t chi u
Tên m ng chính là m t bi n ng v i ph n t u tiên c a m ng. Các ph n t ti p theo
có th c xác nh b ng cách l y a ch ph n t ng tr c c ng v i kích th c c a
nó.
Ví d 1:
M DB 10, 20, 30, 40
Các ph n t c a m ng có th kí hi u nh sau (chú ý: kích th c c a m i ph n t trong
ng này là 1 byte):
Kí hi u Giá tr
Ph n t 1 M 10
Ph n t 2 M+1 20
Ph n t 3 M+2 30
Ph n t 4 M+3 40
Ví d 2:
N DW 1, 6, 20, 10, 15
Các ph n t c a m ng có th kí hi u nh sau (chú ý: kích th c c a m i ph n t trong
ng này là 2 byte):
Kí hi u Giá tr
Ph n t 1 N 1
Ph n t 2 N+2 6
Ph n t 3 N+4 20
Ph n t 4 N+6 10
Ph n t 5 N+8 15
Ví d 3:
Cho m ng A g m 12 ph n t , các ph n t có ki u là Byte. Hãy i ch ph n t u
tiên và ph n t cu i cùng c a m ng cho nhau.
Gi i:
Ph n t u tiên là: A
Ph n t cu i cùng là: A + 11
MOV AL, A
MOV BL, A + 11
51
3. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
MOV A, BL
MOV A+11, AL
7.1.3 Các ch a ch
Vi c truy nh p tr c ti p t i các ph n t c a m ng thông qua cách vi t:<Tên m ng> +
<Kho ng cách> (nh trong ph n 7.1.2) gây r t nhi u b t ti n trong l p trình. M t ph ng
pháp khác, m m d o h n, là s d ng các thanh ghi ch a <Kho ng cách> ho c ch a
a ch c a t ng ph n t . B ng vi c thay i n i dung các thanh ghi có th truy nh p
vào các ph n t khác nhau c a m ng.
Các thanh ghi có th c s d ng là BX, BP, SI, DI.
a) Dùng thanh ghi ch a a ch c a ph n t :
Gi s thanh ghi SI ang ch a a ch offset c a m t ô nh nào ó, cách vi t: [SI] s
tr v n i dung c a ô nh ó.
N u s d ng các thanh ghi BX, DI và SI ch a a ch offset thì a ch segment s
c ch a trong DS. Còn n u s d ng thanh ghi BP thì SS s ch a segment.
Ví d :
Cho m ng sau:
A DB 10, 12, 3, 4, 9, 5, 7, 6
Hãy tính t ng các ph n t c a m ng (c t t ng vào AL).
Gi i:
Ta s s d ng thanh ghi SI l n l t tr t i t ng ph n t c a m ng th c hi n phép
tính t ng.
XOR AL, AL ;Xoá AL chu n b ch a t ng
LEA SI, A ;SI ch a a ch offset ph n t u tiên c a m ng
MOV CX, 8 ;S l n l p (m ng có 8 ph n t )
Lap:
ADD AL, [SI] ;C ng ph n t c a m ng vào AL
INC SI ;SI tr t i ph n t ti p theo
LOOP Lap
Cách vi t nh trên c g i là Ch a ch gián ti p thanh ghi.
b) Dùng thanh ghi ch a <Kho ng cách>
Trong ph ng pháp này, mu n truy nh p vào m t ph n t c a m ng thì c n ph i bi t
c <Kho ng cách> t ph n t ó t i u m ng. Các ph n t c a m ng s c kí hi u
nh sau:
<Tên m ng> [Thanh ghi]
Trong ó Thanh ghi s ch a <Kho ng cách> c a ph n t tính t u m ng.
Ví d 1:
Kí hi u: A[BX]
A: là tên m ng
BX: là thanh ghi ch a <Kho ng cách>. N u BX = 0 thì A[BX] chính là ph n t u tiên
a m ng.
52
4. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
Ví d 2:
Ta s vi t l i n ch ng trình ph n a b ng m t cách khác.
Cho m ng sau:
A DB 10, 12, 3, 4, 9, 5, 7, 6
Hãy tính t ng các ph n t c a m ng (c t t ng vào AL).
Gi i:
XOR AL, AL ;Xoá AL chu n b ch a t ng
XOR BX, BX ;<Kho ng cách> = 0: ph n t u tiên c a m ng
MOV CX, 8 ;S l n l p (m ng có 8 ph n t )
Lap:
ADD AL, A[BX] ;C ng ph n t c a m ng vào AL
INC BX ;t ng <Kho ng cách> tr t i ph n t ti p theo
LOOP Lap
Ngoài cách kí hi u A[BX] còn có th s d ng các kí hi u khác t ng ng nh [A +
BX], [BX + A], A + [BX], [BX] + A.
N u s d ng các thanh ghi BX (Base Register) hay BP (Base Pointer) trong cách vi t
trên thì g i là Ch a ch c s , còn n u s d ng SI (Source Index) hay DI
(Destination Index) thì g i là Ch a ch ch s .
7.2 Các l nh thao tác v i chu i
Nh ã nói ph n tr c, khi khai báo m ng m t chi u thì nó s chi m m t chu i liên
ti p các byte hay word trong n d li u. Mu n truy nh p vào các ô nh trong nd
li u c n ph i xác nh c a ch segment và offset c a chúng.
a ch segment c a d li u c ch a trong thanh ghi DS. Trong các thao tác gi a hai
ng d li u khác nhau, ng i ta th ng s d ng thêm thanh ghi n ES (Extra
Segment) ch a segment c a các ô nh .
a ch offset có th c ch a trong nhi u thanh ghi khác nhau. Trong các l nh thao
tác v i chu i s p trình bày, có hai c p thanh ghi hay c s d ng là DS:SI và ES:DI.
Ngh a là: N u dùng DS ch a segment thì SI s ch a offset, và n u ES ch a segment
thì DI s ch a offset.
ES c ng ch a a ch c a n d li u gi ng nh DS thì u c a ch ng trình
chính ph i có các l nh:
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
7.2.1 L nh chuy n chu i (Moving a String)
L nh này còn c g i là l nh sao chép chu i.
a) Chuy n m t l n:
Cú pháp l nh:
ng 1: MOVSB
L nh trên sao chép 1 byte d li u t ô nh có a ch DS:SI sang ô nh có a ch
ES:DI.
ng 2: MOVSW
53
5. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
L nh trên sao chép 1 word d li u t ô nh có a ch DS:SI sang ô nh có a ch
ES:DI.
Ví d 1:
Xét hai chu i c khai báo nh sau:
.DATA
Chuoi1 DB ‘Khoa CNTT$’
Chuoi2 DB 10 DUP (?)
Hãy sao chép n i dung c a Chuoi1 sang Chuoi2.
Gi i:
th c hi n yêu c u trên ta s l n l t sao chép t ng byte c a Chuoi1 sang Chuoi2.
‘K’ DS:SI
Chuoi1 ‘h’
10 byte ‘o’
‘a’
‘’
‘C’
‘N’
‘T’
‘T’
‘$’
? ES:DI
Chuoi2 ?
10 byte ...
Mu n sao chép byte u tiên (kí t ‘K’) thì DS:SI ph i ch a a ch u c a Chuoi1,
ES:DI ph i ch a a ch u c a Chuoi2. u này c th c hi n b i các l nh sau:
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
MOVSB ;Chuy n 1 byte
M i chu i có dài 10 byte nên ph i l p l i quá trình trên 10 l n thì m i sao chép
xong.
• u ý:
+ M i khi sao chép xong 1 byte thì ph i t ng SI và DI lên 1 nó tr t i ô nh ti p theo.
Sau m i l nh MOVSB thì SI và DI s ct ng t ng lên 1 n u c DF = 0 (SI và DI s
ng gi m i 1 n u c DF = 1). Nh v y v n là ph i xoá c c DF tr c khi thi
hành l nh MOVSB. u này c th c hi n nh l nh CLD (Clear Direction Flag):
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
CLD ;Xoá c nh h ng: DF = 0
MOVSB ;Chuy n 1 byte
+ Ng c l i v i l nh CLD là l nh STD (Set Direction Flag), l nh này s thi t l p c
DF=1. Ta có th s d ng l nh STD chuy n các byte d li u theo chi u ng c l i.
54
6. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
Ch ng trình y nh sau:
TITLE Vi du Chuoi
.MODEL SMALL
.STACK 100H
.DATA
Chuoi1 DB Khoa CNTT$
Chuoi2 DB 10 DUP (?)
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV ES, AX ;DS và ES ch a segment c a n d li u
MOV CX, 10 ;S l n l p
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
CLD ;Xoá c nh h ng: DF = 0
Lap:
MOVSB ;Th c hi n l p 10 l n
LOOP Lap
MOV AH, 9h ;Hi n th chu i 2 ki m tra k t qu
LEA DX, Chuoi2
INT 21h
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
Ví d 2:
Làm l i ví d 1 b ng cách dùng l nh MOVSW.
Gi i:
Do l nh MOVSW m i l n sao chép c 2 byte nên ch ph i th c hi n l p 5 l n, các
nh c th nh sau:
MOV CX, 5 ;S l n l p
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
CLD ;Xoá c nh h ng: DF = 0
Lap:
MOVSW ;Th c hi n l p 5 l n
LOOP Lap
55
7. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
b) Chuy n nhi u l n:
Các l nh MOVSB và MOVSW m i l n ch chuy n c 1 byte hay 1 word, do ó khi
n chuy n nhi u d li u thì ph i s d ng vòng l p, u này làm ch ng trình ph c t p
thêm. Thay vì s d ng vòng l p, ta có th s d ng các l nh chuy n nhi u l n d i ây.
Cú pháp l nh:
ng 1: REP MOVSB
L nh trên sao chép nhi u byte d li u t ô nh có a ch DS:SI sang ô nh có a ch
ES:DI, s byte c n chuy n ch a trong thanh ghi CX.
ng 2: REP MOVSW
L nh trên sao chép nhi u word d li u t ô nh có a ch DS:SI sang ô nh có a ch
ES:DI, s word c n chuy n ch a trong thanh ghi CX.
Ví d :
th c hi n vi c sao chép n i dung c a Chuoi1 sang Chuoi2 trong ví d tr c, ta có
th vi t l i các l nh nh sau:
MOV CX, 10 ;S byte c n chuy n
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
CLD ;Xoá c nh h ng: DF = 0
REP MOVSB
ho c:
MOV CX, 5 ;S word c n chuy n
LEA SI, Chuoi1 ;SI ch a offset c a Chuoi1
LEA DI, Chuoi2 ;DI ch a offset c a Chuoi2
CLD ;Xoá c nh h ng: DF = 0
REP MOVSW
7.2.2 L nh chuy n d li u t thanh ghi vào chu i (Store a String)
L nh này còn c g i là l nh l u chu i.
Cú pháp l nh:
ng 1: STOSB
L nh trên chuy n n i dung c a thanh ghi AL (1 byte) t i ô nh có a ch ES:DI.
ng 2: STOSW
L nh trên chuy n n i dung c a thanh ghi AX (2 byte) t i ô nh có a ch ES:DI.
Ví d 1:
Xét chu i sau ây:
.DATA
ChuoiKT DB 6 DUP (?)
Hãy nh p m t kí t t bàn phím r i t kí t ó vào ph n t u tiên c a chu i.
Gi i:
56
8. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
Ta s s d ng ch c n ng s 1 c a ng t 21h nh p kí t , thanh ghi AL s ch a mã
ASCII c a kí t ó. Mu n chuy n kí t t AL vào ph n t u tiên c a chu i b ng l nh
STOSB thì ES:DI ph i ch a a ch u c a ChuoiKT, u ó c th c hi n nh l nh
sau:
LEA DI, ChuoiKT ;DI ch a offset c a ChuoiKT
Ch ng trình y :
TITLE Vi du Chuoi
.MODEL SMALL
.STACK 100H
.DATA
ChuoiKT DB 6 DUP (?)
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV ES, AX ;DS và ES ch a segment c a n d li u
MOV AH, 1 ;Ch c n ng nh p kí t c a ng t 21h
INT 21h
LEA DI, ChuoiKT ;DI ch a offset c a ChuoiKT
STOSB ;Chuy n kí t t AL vào u chu i
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
Ví d 2:
Nh p m t chu i kí 10 t t bàn phím.
Gi i:
nh p 10 kí t và c t nó vào m t chu i trong b nh ta v n s d ng ph ng pháp
nh ví d 1. Có m t s m khác bi t nh sau:
+ Ph i có m t vòng l p v i s l n l p b ng 10.
+ Sau m i l nh l u chu i (STOSB) thì DI ph i c t ng lên 1 tr t i ô nh ti p theo.
u này c th c hi n nh l nh xoá c nh h ng (CLD).
Ch ng trình y :
TITLE Vi du 2
.MODEL SMALL
.STACK 100H
.DATA
ChuoiKT DB 10 DUP (?)
57
9. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV ES, AX ;DS và ES ch a segment c a n d li u
MOV CX, 10 ;S l n l p b ng 10
LEA DI, ChuoiKT ;DI ch a offset c a ChuoiKT
CLD ;Xoá c nh h ng: DF = 0
Lap:
MOV AH, 1 ;Ch c n ng nh p kí t c a ng t 21h
INT 21h
STOSB ;Chuy n kí t t AL vào u chu i
;DI c t ng t ng lên 1
LOOP Lap
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
7.2.3 L nh chuy n d li u t chu i vào thanh ghi (Load a String)
L nh này còn c g i là l nh n p chu i.
Cú pháp l nh:
ng 1: LODSB
L nh trên chuy n 1 byte d li u t ô nh có a ch DS:SI vào thanh ghi AL.
ng 2: LODSW
L nh trên chuy n 1 word d li u t ô nh có a ch DS:SI vào thanh ghi AX.
Ví d :
Xét chu i sau ây:
.DATA
ChuoiKT DB ‘Viet Nam’
Hãy hi n th chu i ra màn hình.
Gi i:
Vì chu i không k t thúc b ng d u ‘$’ nên không th hi n chu i b ng ch c n ng s 9
a ng t 21h. Ta s cho hi n l n l t các kí t c a chu i b ng ch c n ng s 2 c a ng t
21h (các tham s : AH = 2, DL = Mã ASCII c a kí t c n hi n th ). Chu i có 8 kí t nên
n 8 l n l p.
u tiên c n chuy n t ng kí t t chu i vào thanh ghi AL b ng l nh LODSB, sau ó
chuy n t AL sang DL, r i g i ch c n ng s 2 c a ng t 21h.
Ch ng trình y :
58
10. Bài gi ng h p ng Ch ng VII: M ng và các l nh thao tác chu i
TITLE Vi du
.MODEL SMALL
.STACK 100H
.DATA
ChuoiKT DB Viet Nam
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX ;DS ch a segment c a n d li u
MOV CX, 8 ;S l n l p b ng 8
LEA SI, ChuoiKT ;SI ch a offset c a ChuoiKT
CLD ;Xoá c nh h ng: DF = 0
Lap:
LODSB ;Chuy n kí t t chu i vào AL
;SI c t ng t ng lên 1 (
;tr t i kí t ti p theo)
MOV DL, AL ;Chuy n kí t vào DL
MOV AH, 2 ;Hi n th kí t
INT 21h
LOOP Lap
MOV AH, 4Ch ;K t thúc
INT 21h
MAIN ENDP
END MAIN
59