8088/8086微处理器
Last updated
Last updated
所谓微处理器的编程结构,即是在编程人员眼中看到的微处理器的软件结构模型。
8086:16位微处理器;8088:准16位
采用高速运算性能的HMOS工艺制造,芯片上集成了2.9万只晶体管
使用单一的+5V电源,40条引脚双列直插式封装
时钟频率为5MHz10MHz,基本指令执行时间为0.3ms0.6ms
16根数据线和20根地址线,可寻址的地址空间达1MB
8088/8086可以和浮点运算器、I/O处理器或其他处理器组成多处理器系统,从而极大地提高了系统的数据吞吐能力和数据处理能力
执行部件EU
执行部件中包含一个16位的算术逻辑单元(ALU),8个16位的通用寄存器,一个16位的状态标志寄存器,一个数据暂存寄存器和执行部件的控制电路。
功能:从BIU的指令队列中取出指令代码,经指令译码器译码后执行指令所规定的全部功能。执行指令所得结果或执行指令所需的数据,都由EU向BIU发出命令,对存储器或I/O接口进行读/写操作。
总线接口部件BIU
总线接口部件BIU内部设有四个16位段地址寄存器:代码段寄存器CS、数据段寄存器DS、堆栈段寄存器SS和附加段寄存器ES,一个16位指令指针寄存器IP,一个6字节指令队列缓冲器,20位地址加法器和总线控制电路。
主要功能:根据执行部件EU的请求,负责完成CPU与存储器或I/O设备之间的数据传送。
通用寄存器
通用寄存器分为数据寄存器与指针和变址寄存器两组。
数据寄存器包括4个16位的寄存器AX、BX、CX和DX,一般用来存放16位数据,故称为数据寄存器。其中的每一个又可根据需要将高8位和8位分成独立的两个8位寄存器来使用,即AH、BH、CH、DH和AL、BL、CL、DL两组,用于存放8位数据,它们均可独立寻址、独立使用。
指针和变址寄存器包括指针寄存器SP、BP和变址寄存器SI、DI,都是16位寄存器, ,一般用来存放地址的偏移量。
这8个16位通用寄存器都具有通用性,从而提高了指令系统的灵活性。
控制寄存器
指令指针寄存器IP :是一个16位的寄存器, 存放EU要执行的下一条指令的偏移地址,用以控制程序中指令的执行顺序,实现对代码段指令的跟踪 。
标志寄存器PSW :是一个16位的寄存器,共9个标志,其中6个用作状态标志,3个用作控制标志。
状态标志反映微处理器的工作状态,如执行加法运算时是否产生进位,执行减法运算时是否产生借位,运算结果是否为零等;
控制标志对微处理器的运行起特定的控制作用,如以单步方式运行还是以连续方式运行,在程序执行过程中是否允许响应外部中断请求等。
段寄存器
8086CPU共有4个16位的段寄存器,用来存放每一个逻辑段的段起始地址。
代码段寄存器CS
数据段寄存器DS
堆栈段寄存器SS
附加段寄存器ES
进位标志CF(Carry Flag):
当执行算术运算指令时,其结果的最高位有进位或借位时将CF置1;否则将CF置0。
奇偶标志PF(Parity Flag):
该标志位反映操作结果中“1”的个数情况,若为偶数个“1”,则将PF置“1”;若为奇数个“1”,则将PF置“0”。
辅助进位标志AF(Auxiliary carry Flag):
也称“半进位”标志。AF=1,表示本次运算的低4位中的最高位有进位(加法运算时)或有借位(减法运算时)。
AF一般用于BCD运算中是否进行十进制调整的依据。十进制调整指令DAA和DAS测试这个标志位。
零标志ZF(Zero Flag):
反映运算结果是否为零。若结果为零,则ZF=1;若结果不为零,则ZF=0。
符号标志SF(Sign Flag):
反映带符号数(以二进制补码表示)运算结果符号位的情况。
若结果为负数,则SF=1;若结果为正数,则SF=0。
SF的取值总是与运算结果的最高位(字节操作为D7,字操作为D15,双字操作为D31)取值一致。
溢出标志OF(Overflow Flag):
反映有符号数运算结果是否发生溢出。若发生溢出,则OF=1;否则,OF=0。
所谓溢出,是指运算结果超出了计算装置所能表示的数值范围。
存储器的地址空间为1M字节单元,其地址范围为00000H~FFFFFH。
存储器地址空间被分为通用和专用两种存储区。
从地址00000H~003FFH这第一个1024个字节单元是专用的。这个存储区为中断向量表区,专门用来存放256个中断服务程序的入口地址(也称中断向量),每个入口地址占4个字节单元。
从地址FFFF0H~FFFFFH这16个字节单元保留给系统的初始化代码。
当处理器加电或复位(Reset)时,CPU执行的第一条指令就是起始于地址FFFF0H的。
通常是在FFFF0H处存放一条无条件转移指令,以转移到系统程序的入口处。
采用存储器“分段”技术原因: CPU需输出20位地址信息才能实现对1M字节单元存储空间的寻址。但实模式下CPU中所使用的寄存器均是16位的,内部ALU也只能进行16位运算,其寻址范围局限在 216=65536(64K)字节单元。为了实现对1M字节单元的寻址,8086系统采用了存储器分段技术。
物理地址与逻辑地址 在有地址变换机构的计算机系统中,每个存储单元可以看成具有两种地址:物理地址和逻辑地址。
物理地址是信息在存储器中实际存放的地址,它是CPU访问存储器时实际输出的地址。
CPU对存储器进行读写操作时所使用的就是这样的物理地址。
逻辑地址是编程时所使用的地址。
换句话说,程序设计时所涉及的地址是逻辑地址而不是物理地址。
编程时不需要知道产生的代码或数据在存储器中的具体物理位置。这样可以简化存储资源的动态管理。
在8086微机系统中,逻辑地址由“段地址”和“偏移地址”两部分构成,“段地址”和“偏移地址”均是16位的。
逻辑地址转换为物理地址计算公式:物理地址=段地址×10H+偏移地址。
四种类型的段:代码段,数据段,附加数据段,堆栈段。
CS – 代码段寄存器,保存代码段段地址
DS – 数据段寄存器,保存数据段段地址
ES – 附加数据段寄存器,保存附加数据段段地址
SS – 堆栈段寄存器,保存堆栈段段地址
需注意的是,每个存储单元有惟一的物理地址,但该存储单元的“段地址”和“偏移地址”是相对的。换句话说,同一个物理地址与多个逻辑地址相对应。
堆栈定义:堆栈是存储器中的一个特定的存储区,它的一端(栈底) 是固定的,另一端(栈顶)是浮动的,信息的存入和取出都只能在浮动的一端进行,并且遵循后进先出(Last In First Out)的原则。
堆栈是一种后进先出型数据结构。
堆栈是插入和删除操作都只能在一端进行的线性表。
堆栈的用途:
堆栈主要用来暂时保存程序运行时的一些地址或数据信息。 例如,当CPU执行调用(Call)指令时,用堆栈保存程序的返回地址(亦称断点地址);
在中断响应及中断处理时,通过堆栈“保存现场”和“恢复现场”;
有时也利用堆栈为子程序传递参数。
堆栈的结构:
堆栈是在存储器中实现的,并由堆栈段寄存器SS和堆栈指针寄存器SP来定位。
SS寄存器中存放的是堆栈段的段基值,它确定了堆栈段的起始位置。
堆栈的操作特点:
8086管理的堆栈为16位宽(字宽),堆栈操作指令(PUSH指令或POP指令)对堆栈的操作总是以字为单位进行。
8086对堆栈的操作是“向下生长的(下推式)”,可概括为: “压栈时, 先修改栈指针后压入数据”, “弹栈时, 先弹出数据后修改栈指针”。
堆栈为空, SP指向栈底; SP=0, SP指向栈顶,此时若对堆栈进行“写”操作,将产生“溢出”。
优点:可以用访向存储器的指令来访问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控制信号线,因而增加了微处理器本身控制逻辑的复杂性。
8088/8086 引脚定义的方法大致分为五类:
每个引脚只传送一种信息。
每个引脚电平的高低代表不同的信号。
在两种不同的工作方式下有不同的名称和定义。
分时复用,即在不同的时间可以传送不同的信息。
输入和输出分别传送不同的信息。
最小工作方式
当33脚接+5V时,系统就处于最小工作方式。所谓最小工作方式,就是系统中只有8088/8086一个微处理器,是一个单微处理器系统。 在最小工作方式,总线控制信号都直接由8088/8086CPU产生,系统中的总线控制逻辑电路被减到最少。
最大工作方式
当33脚接地时,这时的系统处于最大工作方式。在最大方式系统中,总是包含有两个或多个微处理器,其中必有一个主处理器8086,其他的处理器称为协处理器 。在最大工作方式,总线控制信号主要由总线控制器8288形成。
《IBM-PC汇编语言程序设计(第2版)》沈美明 温冬婵 著
8088/8086CPU中可供编程使用的有14个16位寄存器,按其用途可分为3类:通用寄存器、段寄存器、指针和标志寄存器
8086/8088标志寄存器的格式及各位的功能 六个状态标志的功能
通用区域用来存储一般的程序指令和数据。它的地址范围为00400H~FFFEFH。
具体做法是,将1M字节的存储空间分成许多逻辑段,每段最长64K字节单元,可以用16位地址码进行寻址。每个逻辑段在实际存储空间中的位置是可以浮动的,其起始地址的低4位必须是0。段寄存器中存放的是段起始地址的高16位,称之为“段地址” 。“偏移量”(offset)也称偏移地址,它是所访问的存储单元距段的起始地址之间的字节距离。段地址和偏移地址均是16位的。
SP寄存器中存放的是堆栈操作单元的偏移量,SP总是指向栈顶。
I/O接口的基本结构如下图所示 常见的I/O端口编址方式有两种:
一种是I/O端口和存储器统一编址,也称存储器映像的I/O(MemoryMapped I/O)方式
另一种是I/O端口和存储器独立编址,也称I/O映像的I/O(I/O Mapped I/O)方式