如:mov ax, [2a78]
表示將乙個記憶體單元中的資料送入ax,這個記憶體單元的長度為2位元組(字單元),存放乙個字,偏移位址為2a78h,段位址
在ds中。
如:mov al, [10f3]
表示將乙個記憶體單元中的資料送入al,這個記憶體單元的長度為1位元組(位元組單元),存放乙個位元組,偏移位址為10f3h,段
位址在ds中。
乙個記憶體單元,段位址預設在ds中,偏移位址可以直接給出,單元的長度可以由具體指令中的其它操作物件(比如說寄存
器)指出。
上面兩條指令中,記憶體單元[2a78]和[10f3],它們的偏移位址分別是2a78h和10f3h,第一條指令中,ax為16位暫存器,
這意味著[2a78]是字單元;第二條指令,al為8位暫存器,這意味著[10f3]是位元組單元(8位相當於單位元組,16位相當於雙字
節)。再看下面兩條指令:
mov ax, [bx] mov al, [bx]
[bx]同樣也表示乙個記憶體單元,它的偏移位址就是bx的數值。
請看下面的指令:
mov ax, [127a] mov ax, [30e0] mov ax, [c950]
指令中的127a、30e0、c950都是常量,我們可以用idata來表示:mov ax, [idata]。
再看下面的指令:
mov bx, 123ah mov bx, 8762h mov bx, 4c0eh
指令中的123ah、8762h、4c0eh都是常量,我們可以用idata來表示:mov bx, idata。
idata是常量的代表。
它的偏移位址為bx中的數值加上idata。
我們看一下指令mov ax, [bx+200]的含義。將記憶體單元[bx+200]中的資料送入ax,長度為2個位元組(字單元),偏移位址
為bx中的數值加上200,段位址在ds中。
該指令也可以寫成如下常用格式:
mov ax, [200+bx] mov ax, 200[bx] mov ax, [bx].200
si是源變址暫存器,di是目的變址暫存器,它們的功能與bx相近,但它們不能分成兩個8位暫存器。
指令:mov bx, 13b2h
mov ax, [bx] ;把記憶體單元[13b2]中的資料送入ax。
同樣地,可以:mov si, 13b2h
mov ax, [si] ;把記憶體單元[13b2]中的資料送入ax。
也可以:mov di, 13b2h
mov ax, [di] ;把記憶體單元[13b2]中的資料送入ax。
指令:mov bx, 2a7ch
mov ax, [bx+123] ;把記憶體單元[2a7c+123]中的資料送入ax。
同樣地,可以:mov si, 2a7ch
mov ax, [si+123] ;把記憶體單元[2a7c+123]中的資料送入ax。
也可以:mov di, 2a7ch
mov ax, [di+123] ;把記憶體單元[2a7c+123]中的資料送入ax。
4.1節我們用[bx]的方式來指明乙個記憶體單元,同樣地我們可以用[si]或[di]的方式來指明乙個記憶體單元,它們的含義基本相同。
4.2節我們用[bx+idata]的方式來指明乙個記憶體單元,同樣地我們可以用[si+idata]或[di+idata]的方式來指明乙個記憶體單元,它
們的含義基本相同。
本節我們學習比前面幾節講解的更為靈活的指明乙個記憶體單元的方式:[bx+si]和[bx+di]。
[bx+si]和[bx+di]的含義相似,我們以[bx+si]為例進行講解。
[bx+si]表示乙個記憶體單元,它的偏移位址為bx的數值加上si的數值。
指令mov ax, [bx+si]的含義如下:
將乙個記憶體單元[bx+si]中的資料送入ax,這個記憶體單元的長度為2位元組(字單元),存放乙個字,偏移位址為bx的數值加上
si的數值,段位址在ds中。
該指令也可以寫成如下常用格式:mov ax, [bx][si]
本節講解一種最為靈活的指明乙個記憶體單元的方式:[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+200]的含義如下:
將乙個記憶體單元[bx+si+200]中的資料送入ax,這個記憶體單元的長度為2位元組(字單元),存放乙個字,偏移位址為bx的
數值加上si的數值再加上200的和,段位址在ds中。
該指令也可以寫成如下常用格式:
mov ax, [bx+200+si]
mov ax, [200+bx+si]
mov ax, 200[bx][si]
mov ax, [bx].200[si]
mov ax, [bx][si].200
1.[idata]用乙個常量來表示位址,可用於直接定位乙個記憶體單元。
2.[bx]用乙個變數來表示記憶體位址,可用於間接定位乙個記憶體單元。
3.[bx+idata]用乙個變數和常量表示位址,可在乙個起始位址的基礎上用變數間接定位乙個記憶體單元。
4.[bx+si]用兩個變數表示位址。
5.[bx+si+idata]用兩個變數和乙個常量表示位址。
可以看到,從[idata]一直到[bx+si+idata],我們可以用更加靈活的方式來定位乙個記憶體單元的位址。以上這幾種定位記憶體地
址的方法就稱作定址方式。
組合語言之定址方式
1 固定定址 inherent addressing 特定的單運算元指令,運算元隱含在操作碼中,在固定定址的指令中,運算元被隱含在指令中,不需要執行匯流排週期,執行速度快 例子 1.1 cbw命令,將al中的符號位擴充套件到ah中,形成16位的運算元。比如al中的符號位是1,則執行cbw命令後,ah...
組合語言之定址方式
目錄 定址方式 立即數定址方式 暫存器定址方式 儲存器定址方式 轉移位址定址 參照自 立即數 imm 可以是8位數值,也可以16位數值。立即數定址方式常用來給暫存器賦值 mov ax,1234h 運算元存放在cpu的內部暫存器中,通用暫存器 ax,bx,cx,dx,si,di,bp,sp 段暫存器 ...
組合語言之定址方式
1 固定定址 inherent addressing 特定的單運算元指令,運算元隱含在操作碼中,在固定定址的指令中,運算元被隱含在指令中,不需要執行匯流排週期,執行速度快 例子 1.1 cbw命令,將al中的符號位擴充套件到ah中,形成16位的運算元。比如al中的符號位是1,則執行cbw命令後,ah...