1、第2章 微处理器,应重点掌握和理解的知识 (1)重点掌握8086/8088CPU的内部结构特征及外部应用特征 (2)重点掌握内部寄存器的构成及应用特点 (3)重点掌握8086/8088系统中存储器的组织特点以及物理地址的计算方法 (4)掌握8086/8088系统中I/O组织特点及端口的编址方式 (5)掌握8086/8088CPU的最大最小两种工作模式 (6)理解8086/8088CPU工作周期的相关概念以及CPU外部操作的典型工作时序,8086/8088微处理器的编程结构8086/8088的存储器组织8086/8088的I/O组织8086/8088微处理器的引脚功能和工作模式8086/8088
2、的典型时序分析,2.1 8086/8088微处理器的编程结构,主要内容:,8086CPU的内部结构8086CPU的寄存器结构,2.1.1 8086CPU的内部结构,8086CPU是Intel系列的16位微处理器 8086CPU和8088CPU内部结构基本相同,都由两大功能部件组成: 执行部件(EU) 总线接口部件(BIU),2.1.1 8086CPU的内部结构,AX,BX,CX,DX,指令译码,总线控制逻辑,总线控制逻辑决定对内存或对I/O接口读或写控制,寄存器是CPU内的组成部分,寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。 指令:确定运算与操作 数据:运算或读写操作
3、的对象 地址:标记和确定内存空间中具体的存储位置,指令队列的设置使指令的取出与执行并行进行,以提高了程序的运行速度,地址加法器的作用是根据段寄存器存放的段基地址与EU送出的16位偏移地址计算得到20位的实际地址,8088CPU外部数据总线为8位、指令队列为4字节,取指令、指令译码、产生并传送操作控制信号,总线接口部件BIU的组成及功能,20位物理地址加法器 6字节指令队列缓冲器 4个16位段寄存器(CS、DS、SS、ES) 16位指令指针寄存器(IP) 总线控制逻辑,总线控制逻辑,BIU是CPU与外部存储器及I/O部件的接口,负责完成CPU与存储器和I/O系统的数据交换(传输),算术逻辑单元(
4、ALU)(运算器) 8个通用寄存器 运算寄存器(暂存器) 1个标志寄存器(FR) EU控制电路,执行部件EU的组成及功能,取指令,指令译码 执行指令,完成运算,指令译码,指令队列缓冲器,是EU与BIU之间的“桥梁”!实现CPU的并行流水线处理操作 组成 8086 的指令队列为6个字节 8088 的指令队列为4个字节 指令队列缓冲器的指令存放状态 顺序指令执行:指令队列存放紧接在执行指令后面的那一条指令 执行转移指令:立即清除指令队列中的内容,从新的地址取入指令,并立即送往执行单元,然后再从新单元开始重新填满队列,8086CPU对指令的执行过程,EU与BIU之间采用并行流水线方式 BIU从内存取
5、指令,送到指令队列缓冲器 EU从BIU中的指令队列缓冲器中不断地取指令并执行指令,省去了访问内存取指令的时间,加快了程序运行速度 EU需要内存操作数或存结果时: 向BIU发请求,并提供有数据的效地址(16位) BIU计算出内存物理地址(20位),启动一个总线读/写周期,从指定的内存单元或I/O端口读/写数据,2.1.2 8086CPU的寄存器结构,包括14个16位的寄存器4个数据寄存器2个地址指针寄存器2个变址寄存器2个控制寄存器4个段寄存器,D15,D0,D8 D7,数据寄存器,指针寄存器,变址寄存器,控制寄存器,段寄存器,1. 数据寄存器,含4个16位寄存器:AX、BX、CX、DX 常用来
6、存放参与运算的操作数、中间结果和地址 既可作为16位寄存器使用,也可分别作为2个独立的8位寄存器使用 例如:若BX=1234H,则BH=12H,BL=34H;反之,若BH=56H,BL=78H,则BX=5678HAX(Accumulator)(AH、AL)累加寄存器 常用于数据运算或与外设交换数据BX(Base)(BH、BL)基址寄存器 在间接寻址中用于存放内存的基地址CX(Count)(CH、CL) 计数寄存器 在循环、移位等操作中用于计数DX(Data)(DH、DL) 数据寄存器 常用于数据的传送或配合AX进行双字节运算,2.指针寄存器,有两个:SP、BP SP:堆栈指针寄存器,存放当前堆
7、栈段中栈顶的偏移地址 BP:基址指针寄存器,存放位于堆栈段中的某个存储单元的偏移地址(基地址) SP和BP通常与SS搭配使用,3. 变址寄存器,有两个:SI(源变址寄存器)、DI(目标变址寄存器) 通常存放操作数在数据段内某个单元的偏移地址(也可作为一般数据寄存器使用,存放操作数或运算结果) 与DS配合使用 特定作用:在串操作中 用SI存放源串的偏移地址 用DI存放目标串的偏移地址,4. 段寄存器,4个16位段寄存器,用于存放各逻辑段的段基地址;不可互换使用CS(Code Segment ):代码段寄存器用于存放当前执行程序所在段的段基地址DS(Data Segment ):数据段寄存器用于存
8、放当前使用数据所在段的段基地址ES(Extra Segment ):附加段寄存器用于存放当前附加数据段的段基地址SS(Stack Segment ):堆栈段寄存器 用于存放当前堆栈段的段基地址,IP寄存器 指令指针寄存器,存放下一次要取出执行的指令的偏移地址(类似程序计数器PC) 执行部件EU每取走1条指令,BIU自动将IP的值修改为下一条要执行指令的地址。 当执行转移指令、调用指令时,BIU将转移的目标地址装入IP。 与CS结合使用构成指令物理地址 用户不能直接更新它,只能由系统自动更新,5. 指令指针寄存器,部分寄存器一般用途示意,代码段,段基地址CS,某指令地址IP,数据段或附加数据段,
9、段基地址DS或ES,某数据地址DI,某数据地址SI,堆栈段,段基地址SS,堆栈顶地址SP,栈内某数据地址BP,6. 标志寄存器,FR(FLAGS) 状态标志寄存器,16位 用途:反映指令执行结果的特征或控制CPU的工作状态 只用了9位 6个状态标志位(也称为条件码)-自动寄存ALU运算结果的特征信息3个控制标志-寄存CPU的工作状态信息(可由用户设置或改变),标志寄存器图示,溢出标志位OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0,方向标志DF位用来决定在“数据串操作”指令执行时的步进方向;DF=1
10、表示由高字节向低字节方向进行称为递减方式,中断允许标志IF位用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断请求,以及CPU内部产生的中断请求;IF=1表示开中断,状态控制标志TF位用来控制CPU是正常(TF=0)执行,还是单步(TF=1)执行,符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。对于有符号数就反映运算结果的正负号。运算结果为正数时,SF的值为0,零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,在运算过程中,如果发生低4位向高4位的进位或借位时,辅助进位标志AF的值将被置为1,
11、奇偶标志PF用于标志运算结果的低8位中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,此时其值为1,标志寄存器置位问题,状态标志位的置1或置0由ALU运算的结果自动置位(但CF可用专门指令设置或改变) 控制标志位需要在程序中用专门的指令设置,状态标志位设置举例(右图): 以8位系统为例。,运算对标志位的影响的例,运算对标志位的影响的例,2.2 存储器及I/O端口的组织与管理,主要内容:,数据存储格式 存储器的分段 物理地址的形成,存储器结构,8086/8088系统中,存储器按字节(8位)编址
12、,即一个存储单元存放一个字节的数据 存储单元编号,称为地址 8086/8088系统每个存储单元的地址均为20位(但一般用5个十六进制数书写,如12C50H),1. 字数据的存储,存储在一个存储单元中的数据称为字节数据(8位) 字节数据的存储:按顺序存放 其存储单元的地址,叫做该字节数据的存储地址 需要存储在相邻两个存储单元中的数据称为一个“字” ,叫做字数据(16位) 字数据的存储:字的低字节存于低地址单元,字的高字节存于高地址单元 存放该字数据低字节的存储单元的地址,叫做该字数据的存储地址,即字地址。,1. 字数据的存储,存储单元地址,00A22H,00B06H,00B07H,03A03H,
13、03A04H,问:字数据325EH的地址是?,字的规则存放与非规则存放,若一个字从偶数地址开始存放,则称为“规则存放”,该字也称为“规则字” 若一个字从奇数地址开始存放,则称为“非规则存放”,该字称为“非规则字” 存取“规则字”与“非规则字”,其操作过程不同(即所使用的总线周期数不同): 存取1个规则字用1个总线周期,非规则字用2个总线周期,字的存储举例,例2.1 图2.5中,字单元00200H和字节单元00200H存放的内容是什么?字数据5678H的存储地址是什么?说明字1234H和5678H是否为规则存放(是否为规则字)?,2. 存储器的分段,为什么需要分段? (1)8086CPU有20根
14、地址线,每个存储单元有20位的物理地址,CPU可寻址 220 = 1 MB个存储单元(内存空间)(2)CPU 的寄存器、ALU都是16位,送出的也只能是16位的地址数据。最多能直接寻址 216 = 64 KB 个单元 就是说:16位的寄存器和ALU不能直接存放和处理20位的地址数据,因此8086CPU对1MB的存储器引入了存储器分段以及相应段基址的概念,存储器的逻辑段,程序员在编制程序时把存储器划分成段,又称为逻辑段(形式上的段) 一个程序分为:代码段、数据段、堆栈段等 每个逻辑段长度64 KB(实际使用时根据需要来确定段大小) 逻辑段的划分原则上不受限制,逻辑段可在整个1MB存储空间内浮动,
15、各段之间可连续、可分开、可部分重叠、还可完全重叠,段基址与段起始地址,段起始地址:每个段第一个存储单元的物理地址 规定:段起始地址必须能被16整除,即其20位物理地址中的低4位为0000 段基地址(简称“段基址”):段起始地址的高16位。 例如:某段的段起始地址为12340H,则该段的段基址为1234H 段基址被存入段寄存器(CS、DS、SS、ES),存储器段的分配和相应段寄存器的关系(示例),每段最大64KB,最小16B,0200H,0400H,0480H,CS,DS,SS,8KB代码,存储器,2KB数据,256B堆栈,02000H,04000H,04800H,段寄存器,代码段段起始地址,偏
16、移地址、逻辑地址,在段内,某个存储单元距离该段起始地址的字节单元个数,称为该存储单元的偏移地址(段内偏移量、段内地址)或有效地址EA 偏移地址是16位的,可以放在寄存器如SI等中 存储单元可以由段基址和段内偏移地址来定位,形式为“段基址:偏移地址”逻辑地址 给出逻辑地址就可确定存储单元的位置 若段的划分不同,同一个单元的逻辑地址会不同! 每个存储单元在存储器中的位置可以用逻辑地址表示,也可以用物理地址表示。,段起始地址、段基址、偏移地址、逻辑地址(小结),60002H,12H,60000H,0 0 0 0,段基址(16位),段起始地址(20位), , ,偏移地址=0002H,00H,低4位一定
17、为0,60002H单元的逻辑地址可写为: 6000H:0002H,3. 物理地址的形成,CPU访问存储器时,必须先确定所要访问的存储单元的物理地址。 由逻辑地址(即段基地址和偏移地址)通过计算得到,注意:段基址10H=段起始地址(20位),例如: 某指令在代码段中的段基址CS=3000H,段内 偏移地址IP=5F62H,则该指令所在存储单元的 物理地址为: CS10H+IP=3000H10H+5F62H=30000H+5F62H=35F62H,逻辑地址到物理地址的形成,BIU中的地址加法器,实现逻辑地址到物理地址的变换,段寄存器,有效地址EA,偏移地址,段基址左移4位,地址加法器,20位物理地
18、址,19,0,15,0,19,0,段寄存器的选择,取指令时: 由CS和IP的内容构造物理地址 入栈或出栈操作: 由SS和SP构造物理地址 读/写内存数据时: 通常由DS(或ES)和指令中给出的有效地址EA构造物理地址,例,在内存中某数据区内,连续存放27个字数据。首字的存储地址为 BA00H:1BA0H。计算该数据区的首末存储单元的物理地址首地址为:BA00H*10H+1BA0H=BBBA0H 末地址为:BBBA0H+35H(27*2-1)=BBBD5H 最后一个字数据的存储地址=BBBD5H-1H=BBBD4H,4. 8086/8088的I/O组织,CPU与外部设备通过I/O接口芯片连接 每个I/O接口芯片上都有一定数目的端口(即寄存器)暂存信息 系统为每个端口分配一个地址,称端口号 8086CPU用低16位地址(A15A0)访问端口,可以访问216=64K个8位端口 两个相邻8位端口可以合并为一个16位端口使用,可有32K个16位端口,接口与端口问题示意,端口 30B0H,端口 30B1H,端口 50A0H,端口 50A1H,端口 41C0H,端口 41C1H,CPU,打印机,显示器,外设,