8086介绍

内部结构

在这里插入图片描述

执行部件EU(Execution Unit)

包含运算器、通用寄存器组、EU控制单元。
只负责控制,不和外部总线打交道

总线接口部件BIU(Bus Interface Unit)

包含指令队列缓冲器、16位指令指针寄存器IP、16位段寄存器,20位地址产生器,总线控制逻辑。
进行存储器和I/O的读写总写操作。

工作流程

从BIU的指令队列缓冲器中取得指令,译码,根据指令要求向EU内部各部件发出控制命令,完成执行指令的功能。若执行指令需要访问存储器或I/O端口,则EU将操作数的偏移地址送给BIU,由BIU取得操作数送给EU。

由段寄存器与IP形成20位物理地址送地址总线,由总线控制电路发出存储器“读”信号,按给定的地址从存储器中取出指令,送到指令队列中等待执行。

寄存器

共14个寄存器。

  • 8个通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI)
  • 4个段寄存器(CS,DS,SS,ES)
  • 1个指令指针寄存器(IP)
  • 1个状态标志寄存器(FX)

通用寄存器

  • AX

    字 乘/除指令中作为累加器,字I/O 指令中作为数据寄存器

  • AL

    字节乘/除指令,字节 I/O的数据寄存器,查表转移XLAT的偏移地址和结果,十进制运算的结果

  • AH

    字节乘/除指令(高八位/余数)

  • BX

    作为地址/基址寄存器

  • CX

    串操作时,循环计数器,自动自增

  • CL

    变量位移或循环操作时用作计数器

  • DX

    字乘/除指令(高十六位/余数),短格式I/O的间接寻址

  • 基址指针寄存器
    • SP:堆栈指针寄存器,其内容为栈顶的偏移地址;
    • BP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。
  • 变址寄存器
    • SI:源变址寄存器,存放源操作数的偏移地址
    • DI:目标变址寄存器,存放目标操作数的偏移地址

段寄存器

CS: 代码段
DS:数据段
ES:附加段
SS:堆栈段

IP指令指针寄存器

其内容为下一条要执行的指令的偏移地址,引导程序顺序执行
自动加2,或者转移

FX状态标志寄存器

有9个标志位
在这里插入图片描述

  • 进位CF(Carry Flag):

最高位是否有进位(CF=1 有进位/借位;CF=0 无进位/借位)

  • 辅助进位AF(Auxiliary Carry Flag):

表示低4位有无进位或借位(AF=1 有进位/借位;AF=0 无进位/借位)

  • 溢出标志OF(Overflow Flag):

带符号数是否溢出 [ 最高位和次高位的进位异或 ](OF=1 有溢出;OF=0 无溢出)

  • 零标志位ZF(Zero Flag):

ZF=1 运算结果为0;ZF=0 运算结果不为0

  • 符号标志位SF(Sign Flag)

结果的最高位为1,SF=1 负数;结果的最高位为0,SF=0 正数

  • 奇偶标志PF(Parity Flag)

PF=1 运算结果1的个数为偶数;PF=0 运算结果1的个数为奇数

  • 方向标志DF(Direction Flag):

控制数据串操作指令的步进方向(DF=1 减址方式(STD指令);DF=0 增址方式(CLD指令))

  • 中断允许标志IF(Interrupt Enable Flag):对可屏蔽中断

IF=1 开中断(STI指令),允许接受外部从INRT引脚发来的中断请求
IF=0 关中断(CLI指令),不接受外部从INRT引脚发来的中断请求
注意:IF的设置不影响非屏蔽中断NMI的请求,不影响CPU响应内部产生的中断

  • 陷阱标志TF(Trap Flag):方便程序调试

TF=1 单步执行,以便检查程序;TF=0 连续正常执行

存储器(内存)

存储格式

  • 规则字:从偶地址开始存放的字
  • 非规则字:从奇地址开始存放的字

规则字的存取在一个总线周期内即可完成;非规则字的存取则需2个总线周期

  • 低位库:8086CPU的低位库与数据总线的D7~D0相连,库中的每个单元的地址均为偶数。
  • 高位库:8086CPU的高位库与数据总线的D15~D8相连,库中的每个单元的地址均为奇数

8086将内存分成两部分,由两个512B的存储器组成,一个存放16位数的高位,另一个存放低位。
在这里插入图片描述

  • 一个字的存储

高八位在高地址,低八位在低地址。
低八位永远从偶地址在开始。 即低地址是偶的。
低地址j就是描述字的存储地址。

数据地址
BB03H
AA02H

BBAA储存在02H地址上

存储器分段

8086有20位的地址信号,需要5位16进制数表示。所以才有分逻辑段的概念。

各逻辑段可连续可分开可重叠。
导致一个实际地址可对应多个逻辑地址。

地址

  • 段基地址:来源于四个段寄存器(SS,DS,CS,ES)。
  • 偏移地址:相对于段基址的偏移,16位数,最大可到64kB(0000H~FFFFH)来源于SP,BP,SI,DI,有效地址。
  • 有效地址EA:在指令中用SP,BP,SI,DI和立即数计算出的偏移地址,它不是实际地址。
    逻辑地址:产生实际地址用到的两个地址(段首址:偏移地址);
    实际地址(物理地址)PA:CPU和存储器进行数据交换时使用的地址;
    实际地址 = 段基址 << 4 + 偏移地址

段基地址是低地址,向高处偏移。
段基地址偏移是0;数偏移量,要从0开始。

堆栈操作

  • 堆栈段的最大围为16bit~64KB
  • 栈顶在高地址,SS存放栈基址,SP存放偏移量
  • 只能操作一个字的数据,即16位
  • 栈首址:SS<<4;栈顶:SS<<4+SP;栈底:SS<<4+FFFFH

请添加图片描述

工作模式

时钟周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值