8086处理器的结构

8086处理器内部结构有两个功能模块,完成一条指令的取值和执行:

  • 总线接口单元BIU,主要负责读取指令和操作数;
  • 执行单元EU,主要负责指令译码和执行。

8086处理器的寄存器:

  • 8个通用寄存器(以16位为例)

    • 数据寄存器

      • AX:累加器(Accumulate Rerister),使用频度最高,用于算术、逻辑运算以及与外设传送信息等;

      • BX:基址寄存器(Base Rerister),常用做存放存储器地址;

      • CX:计数器(Counter Rerister),作为循环和串操作等指令中的隐含计数器;
      • DX:数据寄存器(Data Rerister),常用来存放双字长数据的高16位,或存放外设端口地址。
    • 变址寄存器(常用于存储器寻址时提供地址)

      • SI:源变址寄存器 (Source index)
      • DI:目的变址寄存器(Destination index)
    • 指针寄存器(用于寻址内存堆栈内的数据)

- SP:堆栈指针寄存器(Stack Pointer),指示栈顶的偏移地址
- BP:基址指针寄存器(Base Pointer),表示数据在堆栈段中的基地址
SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址
  • 1个指令指针寄存器

    指令指针寄存器IP,指示代码段中指令的偏移地址。它与代码段寄存器CS联用,确定下一条指令的物理地址

    计算机通过CS : IP寄存器来控制指令序列的执行流程

    IP寄存器是一个专用寄存器

  • 1个标志寄存器

    标志(Flag)用于反映指令执行结果或控制指令执行形式

    8086处理器的各种标志形成了一个16位的标志寄存器FLAGS(程序状态字PSW寄存器)

    程序设计需要利用标志的状态,比如C语言里的条件语句,if (a=b) {…}

  • 1个段寄存器

  • 32位通用寄存器

    EAX EBX ECX EDX

    ESI EDI EBP ESP

标志的分类:

  • 状态标志

    用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它

    • CF 对于无符号数运算,当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。Debug表示: CY(Carry) CF = 1; NC(No Carry) CF = 0

    • ZF若运算结果为0,则ZF = 1;否则ZF = 0.Debug表示: ZR(Zero) ZF = 1; NZ(No Zero) ZF = 0

    • SF 运算结果最高位为1,则SF = 1;否则SF = 0.Debug表示: NG(Negative) SF = 1; PL(Plus) SF = 0

    • PF

    • OF 对于有符号数运算,若算术运算的结果有溢出,则OF=1;否则 OF=0

      Debug表示: OV(Overflow) OF = 1; NV(No Overflow) OF = 0

    • AF

  • 控制标志

    可由程序根据需要用指令设置,用于控制处理器执行指令的方式

    • DF
    • IF
    • TF

    Debug中对标志位不同状态的表示:

    NV UP DI PL NZ NA PO NC 状态为 0

    OV DN EI NG ZR AC PE CY 状态为 1

CPU五类指令:

  • 访问存储器指令

​ 处理器和存储器间数据传送

  • I/O指令

    处理器和I/O模块间数据传送和命令发送

  • 算数逻辑指令

    执行数据算数和逻辑操作

  • 控制转移指令

    指定一个新的指令的执行起点

  • 处理器控制指令

    修改处理器状态,该边处理器工作方式。

数据信息的表达单位:

  • 二进制位bit:存储一位二进制数,0或者1
  • 字节Byte:8个二进制位,D7~D0
  • 字Word:16位,2个字节,D15~D0
  • 双字DWord:32位,4个字节,D31~D0

8086的寻址(数据存取)方式

立即数寻址方式

指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)

这种操作数被称为立即数imm

它可以是8位数值i8(00H~FFH)

也可以是16位数值i16(0000H~FFFFH)

立即数寻址方式常用来给寄存器赋值

寄存器寻址方式

操作数存放在CPU的内部寄存器reg中,可以是:

8位寄存器r8:

AH、AL、BH、BL、CH、CL、DH、DL

16位寄存器r16:

AX、BX、CX、DX、SI、DI、BP、SP

4个段寄存器seg:

CS、DS、SS、ES

存储器寻址方式

指令中给出操作数的主存地址信息(偏移地址,称之为有效地址EA),而段地址在默认的或用段超越前缀指定的段寄存器中

8086设计了多种存储器寻址方式

直接寻址方式

有效地址在指令中直接给出

默认的段地址在DS段寄存器,可使用段超越前缀改变

MOV AX,[2000H]

;AX←DS:[2000H]

;指令代码:A10020

MOV AX,ES:[2000H]

;AX←ES:[2000H]

;指令代码:26A10020

寄存器间接寻址方式

有效地址存放在基址寄存器BX或变址寄存器SI、DI中

默认的段地址在DS段寄存器,可使用段超越前缀改变

MOV AX,[SI] ;AX←DS:[SI]

寄存器相对寻址方式

有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI

有效地址=BX/BP/SI/DI+8/16位位移量

段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变.

寄存器相对寻址指令

MOV AX,[DI+06H]

;AX←DS:[DI+06H]

MOV AX,[BP+06H]

;AX←SS:[BP+06H]

基址变址寻址方式

有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:

有效地址=BX/BP+SI/DI

段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

相对基址变址寻址方式

有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:

有效地址=BX/BP+SI/DI+8/16位位移量

段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变

相对基址变址寻址指令

MOV AX,[BX+SI+06H]

;AX←DS:[BX+SI+06H]

中断机制

CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序。

特点:

1) 中断是随机的
2) 中断是可恢复的
3) 中断是自动处理的

引入中断的目的:

解决主机与外设的并行工作问题

实现实时控制

I/O系统

I/O控制使用下面几种技术:

程序控制

中断驱动

直接存储器存取(DMA)

通道

程序控制I/O技术

由处理器提供I/O相关指令来实现

  • I/O处理单元处理请求并设置I/O状态寄存器相关位

  • 不中断处理器,也不给处理器警告信息

  • 处理器定期轮询I/O单元的状态,直到处理完毕

I/O软件包含直接操纵I/O的指令

  • 控制指令: 用于激活外设,并告诉它做什么

  • 状态指令: 用于测试I/O控制中的各种状态和条件

  • 数据传送指令: 用于在设备和主存之间来回传送数据

主要缺陷:处理器必须关注I/O处理单元的状态,因而耗费大量时间轮询信息,严重地降低了系统性能

中断驱动I/O技术

为了解决程序控制I/O方法的主要问题

  • 应该让处理器从轮询任务中解放出来

  • 使I/O操作和指令执行并行起来

具体作法:

  • 当I/O处理单元准备好与设备交互的时候

  • 通过物理信号通知处理器,即中断处理器的执行

DMA技术

中断的引入大大地提高了处理器处理I/O的效率,但是当处理器和I/O间传送数据时,效率仍旧不高。

解决方法:

——直接存储器访问(DMA:Direct Memory Access)

通过系统总线中一独立控制单元——DMA控制器,自动控制成块数据在内存和I/O单元间的传送。

大大提高处理I/O的效能。

通道

通道又称为I/O处理机,独立于中央处理器,是专门负责数据I/O传输的处理机。

  • 它对外设实现统一管理

  • 代替CPU对I/O操作进行控制

  • 使CPU和外设可以并行工作

引入通道的目的:

  • 为了使CPU从I/O事务中解脱出来

  • 同时为了提高CPU/设备、设备/设备之间的并行度