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

Toán tử giạ INCLUDE

7.2.1 Chê đ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

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)

Tải bản đầy đủ (PDF)

(108 trang)