Intel x86 Assembly& Microarchitecture 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] ;PointintoDataSegment
MOV AX,ES:[DI+5] ;OverrideintoExtraSegment
DI在诸如存储器到存储器操作时MOVS和CMPS,单独使用附加段(参见下文)。这不能被覆盖。
SP并BP默认使用堆栈段(请参见下文)。