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