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(见下文)。