1. Trang chủ
  2. » Giáo Dục - Đào Tạo

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

10 333 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 111,98 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

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 (?)

Trang 2

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

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

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

Trang 3

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

Trang 4

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 n d

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

Trang 5

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’

‘$’

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 c t 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

Trang 6

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

Trang 7

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:

Trang 8

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

Trang 9

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 :

Trang 10

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

Ngày đăng: 21/07/2014, 17:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w