16 位暫存器
當英特爾定義原始 8086 時,它是一個帶有 20 位地址匯流排的 16 位處理器(見下文)。他們定義了 8 個通用 16 位暫存器 - 但它們為某些指令賦予了它們特定的作用:
AX
累加器暫存器。
許多操作碼要麼假設這個暫存器,要麼如果指定則更快。DX
資料暫存器。
這有時被組合為 32 位值的高 16 位與AX
- 例如,作為乘法的結果。CX
計數暫存器。
這被用在許多面向迴圈的指令中作為這些迴圈的隱式計數器 - 例如LOOPNE
(迴圈如果不相等)和REP
(重複移動/比較)BX
基本暫存器。
這可以用於索引記憶體中結構的基礎 - 上述暫存器都不能用於直接索引到記憶體中。SI
源索引暫存器。
對於某些移動和比較操作,這是記憶體的隱式源索引。DI
目的地索引暫存器。
對於某些移動和比較操作,這是記憶體的隱式目標索引。SP
堆疊指標暫存器。
這是集合中最不通用的暫存器! 它指向堆疊中的當前位置,該位置明確用於PUSH
和POP
操作,隱含地用於具有子例程的CALL
和RET
,並且在中斷期間隱式地使用。因此,將其用於其他任何事情都會對你的程式造成危害!BP
基本指標暫存器。
當子程式呼叫其他子程式時,堆疊會儲存多個堆疊幀。BP
可以用來儲存當前的堆疊幀,然後當一個新的子程式被呼叫時,它可以儲存在堆疊上,新的堆疊幀被建立和使用,並且從內部子程式返回時,舊的堆疊幀值可以恢復。
筆記:
-
前三個暫存器不能用於索引到記憶體中。
-
BX
,SI
和DI
預設索引到當前資料段(見下文)。MOV AX, [BX+5] ; Point into Data Segment MOV AX, ES:[DI+5] ; Override into Extra Segment
-
DI
在用於記憶體到記憶體的操作(如MOVS
和CMPS
)時,僅使用 Extra Segment(見下文)。這不能被覆蓋。 -
SP
和BP
預設使用 Stack Segment(見下文)。