80x86微处理器是美国Intel 公司生产的系列微处理器。本章主要介绍的就是Intel公司在1978年退出的16位8086微处理器芯片。
微处理器(CPU)是计算机系统的核心部件,控制和协调着整个计算机系统的工作,主要具有以下几项基本功能:
(1)能够进行算数运算和逻辑运算
(2)能够对指令进行译码、寄存并执行执行所规定的操作
(3)具有与存储器和I/O接口进行数据通信的能力
(4)少量数据的暂存
(5)能够提供这个系统所需的定时和控制信号
(6)能够相应I/O设备发出的中断请求
集成度: 指CPU芯片中所包含的晶体管数。
主频: 指芯片所使用的主时钟频率,它直接影响计算机的运行速度。
数据总线: 计算机中各个组成部件间进行数据传送时的公共通道。数据总线位数越多,数据交换的速度就越快。
内数据总线宽度: CPU芯片内部数据传送的宽度(位数);
外数据总线宽度”: CPU与外部交换数据时的数据宽度 ;
地址总线: 对存储器或I/O端口进行访问时,传送 由CPU提供的要访问的存储单元或I/O端口的地址信息的总线,其宽度决定了处理器能直接访问的主存容量大小。
(如8086有20根地址线,使用这20根地址线上不同地址信息的组合,可直接对2^20=1M个存储单元进行访问;Pentium II有36根地址线,因此它可直接寻址的最大地址范围为2^36=64G)
高速缓冲存储器Cache: 大大减少了CPU读取指令和操作数所需的时间,使CPU的执行速度显著提高。
(1) 主频从8086的4.77MHz到 Pentium(80586)的166MHz, Pentium D(双核)和酷睿2双核(core Duo)则更高。
(2) 数据总线从8086的16位到Pentium的64位。
(3) 地址总线从8086的20条到Pentium的32条。
(4) 高速缓冲存储器Cache(其最大的特点是存取速度快,但容量较小) 的使用,大大减少了CPU读取指令和操作数所需要的时间,使CPU的执行速度显著提高,从80386以后增加了高速缓冲存储器Cache。
8086CPU为了充分使用总线以提高程序的执行速度被设计成两个独立的功能部件,总线接口单元BIU(Bus Interface Unit)和执行单元 EU(Execution Unit)。
功能:负责完成CPU与存储器或I/O设备之间的数据传送。
总线接口单元内包括:
(1)4个16位段寄存器CS、DS、ES、SS
在8086/8088采用了段结构的内存管理
原因:
8086CPU的地址引脚有20根,能提供20位的地址信息,可直接对1M个存储单元进行访问,但CPU内部可用来提供地址信息的寄存器都是16位的
(2)一个16位的指令指针寄存器IP(Instruction Pointer)
CS和IP的内容决定了程序的执行顺序
(3)一个20位地址加法器
CPU提供的用来对存储单元进行访问的20位地址是由BIU中的地址加法器产生的。
(4)6字节指令队列缓冲器
8086的指令队列有6个字节,8088的指令队列有4个字节
指令队列: 采用“先进先出”原则,按顺序存放预执行指令的缓冲器称为指令队列
指令队列的作用:存放EU将要执行的指令,使CPU的取指令和执行指令能并行工作,减少了CPU为取指令的而等待的时间,提高了CPU的利用率,加快了整机的运行速度。
(5)一个与EU通讯的内部寄存器以及总线控制电路等。
主要功能:执行指令、分析指令、暂存运算结果并保留结果
执行单元EU包括:
(1)算数逻辑单元(运算器)ALU
用于进行算数和逻辑运算
(2)通用寄存器
4个16位数据寄存器和4个16位指令指针与变址寄存器
(3)标志寄存器
用来存放CPU运算的状态特征和控制标志。
(4)数据暂存寄存器
协助ALU完成运算,暂存参加运算的数据
(5)EU电路:
是控制、定时与状态逻辑电路,接收从BIU中指令队列取来的指令,经过指令译码形成各种定时控制信号,对EU的各个部件实现特定的定时操作
8088CPU内部结构与8086基本相似,两者的执行单元EU完全相同,其指令系统,寻址方式及程序设计方法都相同,所以两种CPU完全兼容。
区别仅在于总线接口单元BIU,归纳起来主要有以下几个方面的差异:
(1) 外部数据总线位数不同。8086外部数据总线16位,在一个总线周期内可以输入/输出一个字(16位数据),而8088外部数据总线8位,在一个总线周期内只能输入/输出一个字节(8位数据)。
(2) 指令队列缓冲器大小不同。8086指令队列可容纳6个字节,且在每一个总线周期中从存储器取出2个字节的指令代码填入指令队列;而8088指令队列只能容纳4个字节,在一个机器周期中取出一个字节的指令代码送指令队列。
(3) 部分引脚的功能定义有所区别
(1)四个数据寄存器
累加器AX: 用该寄存器存放运算结果可使指令简化,提高指令的执行速度。此外,所有的I/O指令都使用该寄存器与外设端口交换信息。
基址寄存器BX: 8086/8088CPU中有两个基址寄存器BX和BP。BX用来存放操作数在内存中数据段内的偏移地址,BP用来存放操作数在堆栈段内的偏移地址。
计数器CX: 在设计循环程序时使用该寄存器存放循环次数,可使程序指令简化,有利于提高程序的运行速度。
数据寄存器DX: 在寄存器间接寻址的I/O指令中存放I/O端口地址;在做双字长乘、除法运算时,DX与AX一起存放一个双字长操作数,其中DX存放高16位数。
数据寄存器一般用于存放参与运算的操作数或运算结果
每个数据寄存器都是16位的
数据寄存器可将高、低8位分别作为两个独立的8位寄存器来用。高8位分别记作AH、BH、CH、DH,低8位分别记作AL,BL,CL,DL。
(2)两个地址指针寄存器
堆栈指针寄存器SP: 在使用堆栈操作指令(PUSH或POP)对堆栈进行操作时,每执行一次进栈或出栈操作,系统会自动将SP的内容减2或加2,以使其始终指向栈顶。
基址寄存器BP: 作为通用寄存器,它可以用来存放数据,但更经常更重要的用途是存放操作数在堆栈段内的偏移地址。
(3)两个变址寄存器
源变址寄存器SI: SI存放源串在数据段内的偏移地址
目的变址寄存器DI: DI存放目的串在附加数据段内的偏移地址
代码段寄存器CS:用来存储程序当前使用的代码段的段地址。
(CS的内容左移四位再加上指令指针寄存器IP的内容就是下一条要读取的指令在存储器中的物理地址)
数据段寄存器DS:用来存放程序当前使用的数据段的段地址。
(DS的内容左移四位再加上按指令中存储器寻址方式给出的偏移地址即得到对数据段指定单元进行读写的物理地址)
堆栈段寄存器:用来存放程序当前所使用的堆栈段的段地址。
(堆栈是存储器中开辟的按先进后出原则组织的一个特殊存储区,主要用于调用子程序或执行中断服务程序时保护断点和现场)
附加数据段寄存器ES:用来存放程序当前使用的附加数据段的段地址。附加数据段用来存放字符串操作时的目的字符串。
指令指针寄存器IP: 用来存放下一条要读取的指令在代码段内的偏移地址。用户程序不能直接访问IP。
标志寄存器FLAGS:它是一个16位的寄存器,但只用了其中9位,这9位包括6个状态标志位,3个控制标志位。
进位标志CF: 进行加减运算时,若最高位发生进位或借位则CF为1,否则为0。通常用于判断无符号数运算结果是否超出了计算机所能表示的无符号数的范围。
奇偶标志位PF: 指令执行结果的低8位中含有偶数个1时,PF为1,否则为0。
辅助进位标志位AF: 执行一条加法或减法运算指令时,若结果的低字节的低4位向高4位有进位或借位,则AF为1,否则为0。
零标志位ZF: 运算结果为0,则ZF为1,否则为0。
符号标志位SF: 运算结果的最高位为1时,SF=1,否则为0。
溢出标志位OF: 运算结果超出了带符号数所能表示的数值范围,即溢出时,OF=1,否则为0。用来判断带符号数运算结果是否溢出。
(2) 控制标志位(3个)
跟踪(陷阱)标志位TF: 是为测试程序的方便而设置的。若将TF置1,8086/8088CPU处于单步工作方式,CPU每执行完一条指令,便自动产生一个内部中断,对程序进行逐条检查, 常用于程序的调试.
中断允许标志位IF: 是用来控制可屏蔽中断的控制标志位。若用STI指令将IF置1,表示允许CPU接受外部从INTR引脚上发来的可屏蔽中断请求信号;若用CLI指令将IF清0,则禁止CPU接受可屏蔽中断请求信号。IF的状态对非屏蔽中断及内部中断没有影响。
方向标志位DF: 若用STD将DF置1,串操作按减地址方式进行,也就是说,从高地址开始,每操作一次地址自动递减;若用CLD将DF清0,则串操作按增地址方式进行,即每操作一次地址自动递增
为了满足微型计算机对存储器系统高速度、大容量、低成本的要求,微型计算机系统采用三级存储器组织结构,即由如图所示的高速缓冲存储器Cache、主存和外存组成
存储器中每个存储单元的地址可有以下两种表示方式:
通过段地址和偏移地址来表示的存储单元的地址称为逻辑地址
它是在程序中使用的地址,其表达形式为“段地址:段内偏移地址”。段内偏移地址又称为“有效地址EA(Effective Address)。其表示该存储单元相对于该段起点字节的距离。
CPU对存储器进行访问时实际寻址所使用的20位地址称为物理地址。
要访问物理存储器,逻辑地址必须转换为物理地址。
当由IP提供或由EU根据指令所提供寻址方式计算出寻址单元的16位段内偏移地址后,把该偏移地址和段寄存器内容左移四位后(相当于乘以10H)得到的段基址(段内第一个存储单元的物理地址)同时送到BIU中的地址加法器,形成一个20位的物理地址,从而实现对存储单元的访问。
由逻辑地址求物理地址的公式为:物理地址=段地址×10H+段内偏移地址