彙編語言之寄存器使用(bx,si,di,bp)

轉載:http://www.cnblogs.com/huzhongzhong/archive/2011/08/01/2123743.html

這裏對這幾個寄存器總結一下。

通用寄存器的主要用途

寄存器的分類 寄存器

主 要 用 途

數據

 

寄存器

AX

乘、除運算,字的輸入輸出,中間結果的緩存

AL

字節的乘、除運算,字節的輸入輸出,十進制算術運算

AH

字節的乘、除運算,存放中斷的功能號

BX

存儲器指針

CX

串操作、循環控制的計數器

CL

移位操作的計數器

DX

字的乘、除運算,間接的輸入輸出

變址
寄存器
SI

存儲器指針、串指令中的源操作數指針

DI

存儲器指針、串指令中的目的操作數指針

變址
寄存器
BP

存儲器指針、存取堆棧的指針

SP

堆棧的棧頂指針

指令指針

IP/EIP  
標誌位寄存器 Flag/EFlag  
32位

CPU的

段寄存器

16位CPU的

段寄存器

ES  附加段寄存器
CS  代碼段寄存器
SS  堆棧段寄存器
DS  數據段寄存器
新增加的
段寄存器
FS  附加段寄存器
GS  附加段寄存器
這張表用來參照。
(1)在8086CPU中只有這四個寄存器可以在[...]中進行內存單元的尋址。
比如,下面的指令都是正確的:
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]
而下面都是錯誤的:
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]
(2).在[...]中,這四個寄存器可以單獨出現,或者只能以四種組合出現:bx和si、bx和di、bp和si、bp和di。
比如下面都是正確的
mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mpv ax,[bp+di]
mov ax,[bx+si+idata]
mov ax,[bx+si+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]
下面就是錯誤的
mov ax,[bx+bp]
mov ax,[si+di]
(3)只要在[....]中使用寄存器bp,而指令彙總沒有顯示給出段地址,段地址就默認在ss中。 比如下面的指令。
mov ax,[bp] 含義:(ax)=((ss)*16+(bp))
mov ax,[bp+idata] 含義:(ax)=((ss)*16+(bp)+idata)
mov ax,[bp+si] 含義:(ax)=((ss)*16+(bp)+(si))
mov ax,[bp+si+idata] 含義:(ax)=((ss)*16+(bp)+(si)+idata)
發佈了50 篇原創文章 · 獲贊 5 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章