16 位暫存器

當英特爾定義原始 8086 時,它是一個帶有 20 位地址匯流排的 16 位處理器(見下文)。他們定義了 8 個通用 16 位暫存器 - 但它們為某些指令賦予了它們特定的作用:

  • AX 累加器暫存器。
    許多操作碼要麼假設這個暫存器,要麼如果指定則更快。
  • DX 資料暫存器。
    這有時被組合為 32 位值的高 16 位與 AX - 例如,作為乘法的結果。
  • CX 計數暫存器。
    這被用在許多面向迴圈的指令中作為這些迴圈的隱式計數器 - 例如 LOOPNE(迴圈如果不相等)和 REP(重複移動/比較)
  • BX 基本暫存器。
    這可以用於索引記憶體中結構的基礎 - 上述暫存器都不能用於直接索引到記憶體中。
  • SI 源索引暫存器。
    對於某些移動和比較操作,這是記憶體的隱式源索引。
  • DI 目的地索引暫存器。
    對於某些移動和比較操作,這是記憶體的隱式目標索引。
  • SP 堆疊指標暫存器。
    這是集合中最不通用的暫存器! 它指向堆疊中的當前位置,該位置明確用於 PUSHPOP 操作,隱含地用於具有子例程的 CALLRET,並且在中斷期間隱式地使用。因此,將其用於其他任何事情都會對你的程式造成危害!
  • BP 基本指標暫存器。
    當子程式呼叫其他子程式時,堆疊會儲存多個堆疊幀BP 可以用來儲存當前的堆疊幀,然後當一個新的子程式被呼叫時,它可以儲存在堆疊上,新的堆疊幀被建立和使用,並且從內部子程式返回時,舊的堆疊幀值可以恢復。

筆記:

  1. 前三個暫存器不能用於索引到記憶體中。

  2. BXSIDI 預設索引到當前資料段(見下文)。

     MOV    AX, [BX+5]     ; Point into Data Segment
     MOV    AX, ES:[DI+5]  ; Override into Extra Segment
    
  3. DI 在用於記憶體到記憶體的操作(如 MOVSCMPS)時,僅使用 Extra Segment(見下文)。這不能被覆蓋。

  4. SPBP 預設使用 Stack Segment(見下文)。