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

轉載自:https://www.cnblogs.com/youxin/archive/2012/05/29/2524780.htmlhtml

 

若是你看到這篇博客時正在作第七章問題,強烈建議先去把8.1~8.4看了,由於你在這章寫代碼踩的有關[...]的坑,在8.1~8.4都有說明, 下面都是8.1的內容緩存

 

通用寄存器的主要用途

寄存器的分類 寄存器

主 要 用 途spa

指針

htm

blog

內存

數據

 

寄存器ci

AX

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

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)

相關文章
相關標籤/搜索