Chê đoơ địa chư gián tiêp baỉng thanh gh

Một phần của tài liệu Giáo trình hợp ngữ (Trang 91 - 93)

DIV BX OVERFLOW

7.2.1Chê đoơ địa chư gián tiêp baỉng thanh gh

Toán tử giạ INCLUDE

7.2.1Chê đoơ địa chư gián tiêp baỉng thanh gh

Trong chê đoơ địa chư gián tiêp baỉng thanh ghi , địa chư offset cụa toán háng được chưá trong 1 thanh ghi . Chúng ta nói raỉng thanh ghi là con trỏ ( pointer) cụa vị trí nhớ . Dáng toán háng là [register]. Trong đó register là các thanh ghi BX, SI , DI , BP. Đôi với các thanh ghi BX , SI , DI thì thanh ghi đốn là DS . Còn thanh ghi đốn cụa BP là SS .

Ví dú : giạ sử raỉng SI = 100h và từ nhớ tái địa chư DS:0100h có noơi dung là 1234h . Leơnh MOV AX,[SI] sẽ copy 1234h vào AX .

Giạ sử raỉng noơi dung các thanh ghi và noơi dung cụa boơ nhớ tương ứng là như sau :

Thanh ghi noơi dung offset noơi dung boơ nhớ AX 1000h 1000h 1BACh

SI 2000h 2000h 20FFh DI 3000h 3000h 031Dh Ví dú 1:

Hãy cho biêt leơnh nào sau đađy là hợp lý , offset nguoăn và kêt qụa cụa các leơnh hợp lý . a. MOV BX,[BX] b. MOV CX,[SI] c. MOV BX,[AX] d. ADD [SI],[DI] e. INC [DI]

Chương 7 : Mạng và các chê đoơ địa chư 83 Lời giại :

Source offset Result

a. 1000h 1BACh

b. 2000h 20FFh

c. illegal source register ( must be BX,SI,DI) d. illegal memory-memory add

e. 3000h 031Eh

Ví dú 2 : Viêt đốn mã đeơ coơng vào AX 10 phaăn tử cụa moơt mạng W định nghĩa như sau :

W DW 10,20,30,40,50,60,70,80,90,100 Giại : Giại :

XOR AX,AX ; xoá AX

LEA SI,W ; SI trỏ tới địa chư cơ sở ( base) cụa mạmg W . MOV CX,10 ; CX chưá sô phaăn tử cụa mạng

ADDITION:

ADD AX,[SI] ; AX=AX + phaăn tử thứ nhât ADD SI,2 ; taíng con trỏ leđn 2

LOOP ADDITION ; laịp

Ví dú 3 : Viêt thụ túc đeơ đạo ngược moơt mạng n từ . Đieău này có nghĩa là phaăn tử thứ nhât sẽ đoơi thành phaăn tử thứ n , phaăn tử thứ hai sẽ thành phaăn tử thứ n-1 ... Chúng ta sẽ dùng SI như là con trỏ cụa mạng còn BX chứa sô phaăn tử cụa mạng ( n từ ) .

Giại : Sô laăn trao đoơi là N/2 laăn . Nhớ raỉng phaăn tử thứ N cụa mạng có địa chư A+2x(N-1)

Đốn mã như sau : REVERSE PROC ; input: SI= offset of array ; BX= number of elements ; output : reverse array

PUSH AX ; cât các thanh ghi PUSH BX

PUSH CX PUSH SI PUSH DI ; DI chư tới phaăn tử thứ n

Chương 7 : Mạng và các chê đoơ địa chư 84 MOV DI,SI ; DI trỏ tới từ thứ nhât

MOV CX,BX ; CX=BX=n : sô phaăn tử DEC BX ; BX=n-1

SHL BX,1 ;BX=2x(n-1)

ADD DI,BX ;DI = 2x(n-1) + offset cụa mạng : chư tới phaăn tử ; thứ n

SHR CX,1 ;CX=n/2 : sô laăn trao đoơi ; trao đoơi các phaăn tử

XCHG_LOOP:

MOV AX,[SI] ; lây 1 phaăn tử ở nửa thâp cụa mạng XCHG AX,[DI] ; đưa nó leđn nửa cao cụa mạng MOV [SI],AX ; hoàn thành trao đoơi (adsbygoogle = window.adsbygoogle || []).push({});

ADD SI,2 ; SI chư tới phaăn tử tiêp theo cụa mạng SUB DI,2 ; DI chư tới phaăn tử thứ n-1

LOOP XCHG_LOOP POP DI POP SI POP CX POP BX POP AX RET REVERSE ENDP

Một phần của tài liệu Giáo trình hợp ngữ (Trang 91 - 93)