轉載: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)