文章目录
参考
综述
8086 CPU有14个16位寄存器,分别为
AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES
其逻辑结构如下图
数据在其中的存放情况如下
1. 通用寄存器
用于存放一般性的数据,其下又分为数据寄存器(AX、BX、CX、DX)、指针寄存器(SP、BP)和变址寄存器(SI、DI),共8个。
1.1 数据寄存器
AX (Accumulator):累加寄存器,也称之为累加器;
BX (Base):基地址寄存器;
CX (Count):计数器寄存器;
DX (Data):数据寄存器;
这四个寄存器都可分为独立的两个8位寄存器使用(如AX可分为AH和AL,其他同)
1.2 指针寄存器
SP (Stack Pointer):堆栈指针寄存器;
BP (Base Pointer):基指针寄存器;
1.3 变址寄存器
SI (Source Index):源变址寄存器;
DI (Destination Index):目的变址寄存器;
2. 控制寄存器
IP (Instruction Pointer):指令指针寄存器;
FLAG:标志寄存器;
3. 段寄存器
CS (Code Segment):代码段寄存器;
DS (Data Segment):数据段寄存器;
SS (Stack Segment):堆栈段寄存器;
ES (Extra Segment):附加段寄存器;
段地址*16+偏移地址=物理地址
8086 CPU在访问内存时,采用此种方式计算内存单元的物理地址,因为其有20位地址总线,寻址能力为1M,但其内部是16位结构,如果仅将地址从内部直接发出,则只能寻址64KB,所以有一个地址加法器负责进行 从段地址(16位)+偏移地址(16位)到物理地址(20位)的转换。
其中:段地址由代码段寄存器CS给出,偏移地址由指令指针寄存器IP给出。
实际上,PC与CS:IP是一回事。
CPU取指、执行流程
- 将CS、IP中的内容送到地址加法器,产生一个20位的物理地址。
- 地址加法器将物理地址送往I/O控制电路,进而送往地址总线。
- 内存对此物理地址进行读操作,读出一条完整的汇编指令,送上数据总线。
- I/O控制电路将指令送到指令缓冲器。
- IP的内容自增,增量为此条指令的长度。
- 执行指令。
在CPU加电启动或复位时,CS和IP分别被置为FFFFH和0000H,即其第一次取指并执行的物理地址在FFFF0H。
CPU如何取一条完整指令
汇编指令的长度不定,比如有的是2B,有的是3B。
但地址总线只是传过来一个20位的物理地址,那CPU是如何知道从这个地址开始取多少位的内容呢?这与指令格式有关。
参考:计算机是如何知道取出来的一条指令的操作码有多少位
使用jmp指令改变CS、IP的内容
指令格式如下。
jmp 段地址:偏移地址
可同时修改CS、IP。
jmp 寄存器
可用寄存器中内容修改IP