80x86系统微处理器简介

时间:2022-11-21 18:34:57

80X86微处理器

1.8086/8088简介

  • 8086/8088是Intel系列的16位微处理器,有16根数据引脚,一次可以存取8位或者16位的数据。

数据总线:计算机各个组成部件进行数据传送时的公共通道。8086和8088唯一区别是:8088的外部数据总线为8位,而8086为16位。
地址总线:对存储器或IO端口进行访问时,传送由CPU提供的要访问的存储单元或IO端口的地址信息总线。8086有20根地址线,可一次直接访问2^20=1M大小的存储单元。

2. 8086/8088内部结构

80x86系统微处理器简介

2.1 总线接口单元BIU

  • 总线接口单元BIU是负责完成CPU和存储器或IO设备之间的数据传送。具体任务如下:
    1. 读指令。当指令队列未满时,BIU从内存取出后续指令,同时不影响执行单元EU的执行,两者并行工作,提高了CPU执行速度。
    2. 读操作数。BIU根据EU给出的地址从内存或者外设端口读取数据供EU使用。
    3. 写操作数。EU将执行结果有BIU送往指定的内存单元或者外设端口。

2.2总线结构单元的结构

  • 总线接口单元有4个16位段寄存器,分别为代码段寄存器CS(code segment),数据段寄存器DS(data segment),堆栈段寄存器,和附加数据段寄存器ES(extra segment),1个16位的指令指针寄存器*IP(instruction pointer),1个20位的地址加法器,1个6字节指令队列缓冲器*,一个与执行单元EU通信的内部寄存器以及总线控制电路。

2.2.1 指令指针寄存器IP(instruction pointer)

  • 指令指针寄存器IP用来存放下一条要读取的指令在代码段中的偏移地址
  • IP在程序运行中能自动加1修正,从而使其始终存放下一条要读取的指令在代码段的偏移地址。
  • 用户程序不能读和写的IP的值。

2.2.2 地址加法器

地址加法器产生20位的地址信息,以便访问1M大小的内存空间。

- 逻辑地址:表达式为”段地址:段内偏移地址”。段内偏移地址又称为“有效地址”(EA, effective address)。
1. 在读指令时,段地址由代码段寄存器CS提供,当前要读取指令在代码段中的偏移位置由指令指针寄存器IP提供。
2. 在读取或存储操作数时,段地址由DS、ES、SS提供,段内偏移地址由指令给出。
- 物理地址:物理地址 = 段地址 × 10H + 段内偏移地址。段地址乘以10H相当于将其左移4位,在加上四位的段内偏移地址,就可以得到内存的准确物理地址。

2.2.3 指令队列缓冲器

8086的指令队列有6个字节,8088有4个字节,当其未满时,则将下一条要执行的指令从内存单元读入指令队列,然后以“先进先出”的原则,按顺序存放并按顺序取到执行单元EU中去执行。

2.2.4 段寄存器

8086CPU有20根地址引脚而用来提供地址信息的段寄存器都是16位的,所以8086采用段结构的内存管理方法。

将指令代码和数据分别存储在代码段,数据端,堆栈段,附加数据段中,分别由CS、DS、SS、ES提供,而代码或数据在段内的偏移地址则由有关寄存器或立即数形式的偏移地址给出。
  • CS(code segment)称为代码段寄存器,用来存储程序当前使用的代码段的段地址。CS**左移四位加上指令中存储器IP**的内容就是下一条要读取指令在存储器中的物理位置。 CS复位后的状态为FFFFH
  • DS(data segment)称为数据段寄存器,用来存放程序当前使用的数据段的段地址。DS**左移四位加上指令中存储器的寻址方式给出的偏移地址**得到数据段指定单元进行读写的位置。
  • SS(stack segment)称为堆栈段寄存器,用来存放程序当前使用的堆栈段的段地址。SS按照“先入后出”的原则,用于调用子程序或者执行中断服务程序时保护断点和现场
  • ES(extra segment)称为附加数据段寄存器,用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放字符串操作时的目的字符串。

3. 8086/8088寄存器结构

8086/8088CPU内部有14个16为寄存器,分为通用寄存器(8个),段寄存器(4个),控制寄存器(2个)。上面介绍过段寄存器了,下面介绍剩余的寄存器。

3.1 通用寄存器

通用寄存器包括4个数据寄存器、两个地址指针寄存器和两个变址寄存器。

3.1.1 数据寄存器AX、BX、CX、DX

数据寄存器一般用来存放参与运算的操作数和运算结果。每个寄存器都是16位,但是又可以分为高8位和低8位作为两个寄存器来使用。高8位为AH、BH、CH、DH,低8位分别为AL、BL、CL、DL。虽然这四个数据寄存器都是用来存放数据,但是都有自己的特定用途。

  • AX(Accumulate)称为累加器。用于存放运算结果可使指令简化,提高指令的执行速度。另外,所有的IO指令都使用该寄存器与端口交换信息。
  • BX(Base)称为基址寄存器。用于存放操作数在内存中数据段内的偏移地址。8086 CPU还有一个基址寄存器叫BP(base pointer),用于存放操作数在堆栈段内的偏移地址。
  • CX(Counter)称为计数器。用于存放循环程序的循环次数,可是程序指令简化,提高程序的运行速度。
  • DX(Data)称为数据寄存器。用于存放IO端口地址。还可以与AX一起存放一个双字长的操作数,DX存放高16位。

3.1.2地址指针寄存器SP、BP

  • SP(stack pointer)称为堆栈指针寄存器。在对堆栈进行操作时,每一次进栈或出栈操作,系统都会将SP的内容减2或者加2,使其始终指向栈顶
  • BP(base pointer)称为基址寄存器。可以用来存放数据,跟重要用来存放堆栈段内的偏移地址。(BX也被称为基址寄存器)

3.1.3变址寄存器SI、DI

  • SI(source index)称为源变址寄存器。通常存放源串数据段内的偏移地址。
  • DI(destination index)称为目的变址寄存器通常存放目的串附加数据段内的偏移地址。

3.2控制寄存器

  • 控制寄存器就是指令指针寄存器IP(instruction pointer),用来存放下一条要读取的指令咋代码段内的偏移地址。
  • FLAGES称为标志寄存器,是一个16位的寄存器,只用其中9位,包括6位状态标志位和3位控制标志位