彙編 7 1 靈活定位記憶體位址的方法

2021-08-21 17:45:44 字數 2027 閱讀 2948

1.[bx+idata]

我們用[bx]的方式來指明乙個記憶體單元,還可以用一種更靈活的方式來指明記憶體單元:[bx+idata]表示乙個記憶體單元,它的偏移位址為(bx)+idata(bx中的數值加上idata)。

如:mov ax,[bx+200]

數學化的描述為:(ax)=((ds)*16+(bx)+200)

2.用[bx+idata]的方式進行陣列的處理

原來定位字串的字元:

start:

mov ax,datasg

mov ds,ax ;設定ds指向datasg

mov bx,0

;設定(bx)=0,ds:bx指向'basic'的第乙個字母

mov cx,5

;設定迴圈次數5,'basic'有5個字母

s: mov al,[bx] ;將assii碼從ds:bx所指的單元取出

and al,11011111b;將al中的ascii碼第五位置0,變為大寫字母

mov [bx],al ;將轉變後的ascii碼寫回原單元

inc bx ;(bx)加1,ds:bx指向下乙個字母

loop s

mov bx,5

;設定(bx)=5,ds:bx指向 'information'的第乙個字母

mov cx,11

;設定迴圈次數11,因為 'information'有11個字母

s0:mov al,[bx]

or al,00100000b ;將al中的ascii碼的第五位置1,變為小寫字母

mov [bx],al

inc bx

loop s0

datasg中的兩個字串,乙個起始位址是0,乙個起始位址為5;

將兩個字串看作是兩個陣列,乙個從0開始存放,乙個從5開始存放。這樣就可以用[0+bx],[5+bx]的方式在同乙個迴圈中定位這兩個字串中的字元。0,5給定了兩個字串的起始偏移位址,bx中給出了從起始偏移位址開始的相對位址。

如:

或:

3.si和di

si和di是8086cpu中和bx功能近似的暫存器,si和di不能夠分成兩個8位暫存器來使用。

4.[bx+si]和[bx+di]

[bx(si或di)]和[bx(si或di)+]可以用來指明乙個記憶體單元。或者更為靈活的方式:[bx+si]和[bx+di]。

如:mov ax,[bx+si](等於mov ax,[bx] [si])

數學化描述為:(ax)=((ds)*16+(bx)+(si))

5.[bx+si+idata]和[bx+di+idata]

[bx+si+idata]和[bx+di+idata]含義近似;

[bx+si+idata]表示乙個記憶體單元,它的偏移位址為(bx)+(si)+idata(即bx中的資料值加上si的數值再加上idata).

如:mov ax,[bx+si+idata]

數學描述為:(ax)=((ds)*16+(bx)+(si)+idata)

該指令也可以寫成如下格式:

6.不同定址方式的應用

(1).[idata]用乙個常量來表示位址,可用於直接定位乙個記憶體單元;

(2).[bx]用乙個變數來表示記憶體的位址,可用於間接定位乙個記憶體單元;

(3).[bx+idata]用乙個變數和乙個常量表示位址,可在乙個起始位址的基礎上用變數間接定位乙個記憶體單元;

(4).[bx+si]用兩個變數表示位址;

(5).[bx+si+idata]用兩個變數和乙個常量表示位址。

彙編 更靈活的定位記憶體位址

and 按位與 or 按位或 db unix db 75h,6eh,49h,58h 大小寫轉換 第5位置0,變大寫,第5位置1,變小寫 assume cs codesg,ds datasg datasg segment db bssic db minix datasg ends codesg seg...

靈活定位記憶體位址

assume cs code,ds data,es table,ss stack data segment db 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 db 2001 2002 2003 2004 2005 2006 2007 ...

六 彙編 更靈活的定位記憶體位址的方法

可以用 0 bx 的方法訪問記憶體的指令中,定位記憶體單元的位址。a.and 指令,按位進行與運算。b.or 指令,邏輯或指令,按位進行或運算。a.計算機中所有的資訊都是二進位制的,而人能理解的資訊是已經具有約定意義的字元。編碼儲存資訊,解碼展示資訊。b.目前計算機通常採用的編碼方式 ascii編碼...