intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng hợp ngữ - Chương 7

Chia sẻ: Nguyen Nhi | Ngày: | Loại File: PDF | Số trang:10

103
lượt xem
21
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tài liệu tham khảo Bài giảng hợp ngữ gồm 9 chương - Chương 7 Mảng và các lệnh thao tác chuỗi

Chủ đề:
Lưu

Nội dung Text: Bài giảng hợp ngữ - Chương 7

  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: DB 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: DB 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: DW Cách 2: DW 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 t iên c a m ng. Các ph n t ti p t heo 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 t r c ti p t i các ph n t c a m ng thông qua cách vi t: + (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 ho c ch a a ch c a t ng ph n t . B ng vi c t hay 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 o ffset 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 o ffset 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 t heo LOOP Lap Cách vi t nh t rên c g i là Ch a ch gián ti p thanh ghi. b) Dùng thanh ghi ch a 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 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: [Thanh ghi] Trong ó Thanh ghi s ch a 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 . N u BX = 0 thì A[BX] chính là ph n t u t iê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 ; = 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 tr t i ph n t ti p t heo 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 o ffset 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 g i 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 c h DS:SI sang ô nh có a c h 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 t iê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 t heo. 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 D F = 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 nd li u MOV CX, 10 ;S lnlp 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 t rong 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 t h 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 nd 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 t a 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 t i p t heo. 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 nd 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 ct 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 t iê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 nd 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 ct 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2