第2章微处理器与总线微机原理与接口技术主要内容8088/8086微处理器结构与工作机制总线的形成与标准主流微处理器介绍64位计算机结构主要内容典型微处理器的基本结构8088/8086CPU的内部寄存器存储器结构及寻址机制CPU的引线及其功能CPU的工作时序8088/8086CPU的特性为学习指令系统打好基础2.18088/8086微处理器结构与工作机制微处理器的基本结构EU和BIU8088的内部结构1234内部暂存器IPESSSDSCS输入/输出控制电路总线执行部分控制电路∑ALU标志寄存器AHALBHBLCHCLDHDLSPBPSIDI通用寄存器地址加法器指令队列执行部件(EU)总线接口部件(BIU)16位20位8位8位8088/8086的功能结构8088的内部结构从功能上分成两个单元1.执行单元EU负责指令的译码、执行和数据的运算,并对寄存器和标识寄存器进行管理,向BIU输出数据。2.总线接口单元BIU管理8088与系统总线的接口负责CPU对存储器和外设进行访问两个单元在大多数情况下独立操作,也可以并行执行两大部件的工作过程1.执行单元EU从BIU的指令队列中取出指令操作码-译码-控制操作-操作数经过暂存寄存器送入ALU-结果经“ALU数据总线”送往相应寄存器-运算结果改变标志寄存器FR的相应标志位。如果需要的数据来源于外部,则向BIU发出请求,BIU通过外部数据总线访问存储器和外设,通过“内部通信寄存器”向ALU数据总线提供数据。2.总线接口单元BIUBIU负责与“外部”的交流。当EU执行要求与内存或IO传送数据时,BIU将段寄存器中的段基地址和偏移量寄存器中的偏移地址送到加法器,形成20位的地址。由总线控制逻辑,发出总线控制信号。取出的指令放指令队列中;取出的数,放到内部通信寄存器中,供EU使用。8088/8086CPU的内部寄存器8088/8086的寄存器组有8个通用寄存器4个段寄存器1个标志寄存器1个指令指针寄存器均为16位!图见P32图2-21.通用寄存器8088有8个通用的16位寄存器(1)数据寄存器:AXBXCXDX(2)变址寄存器:SIDI(3)指针寄存器:BPSP4个数据寄存器可分成高8位和低8位两个独立的寄存器:AX:AHALBX:BHBLCX:CHCLDX:DHDL(1)数据寄存器用来存放操作数和中间结果AX:累加器(Accumulator)使用频度最高,用于算术、逻辑运算以及与外设传送信息等。BX:基址寄存器(BaseaddressRegister)可在计算地址时用作基地址寄存器。CX:计数器(Counter)循环、串操作等指令中的隐含计数器。DX:数据寄存器(Dataregister)存放双字长数据的高16位,或外设端口地址。具体使用,详见P32表2-1。了解,汇编语言用到。(2)变址寄存器16位变址寄存器SI和DI常用于存储器变址寻址方式时提供地址SI:源地址寄存器(SourceIndex)通常指向原操作数DI:目的地址寄存器(DestinationIndex)通常指向目的操作数在串操作类指令中,SI、DI有特殊用法(3)指针寄存器指针寄存器用于寻址内存堆栈内的数据SP:堆栈指针寄存器(StackPointer),指示堆栈段栈顶的位置(偏移地址)BP:基址指针寄存器(BasePointer),表示数据在堆栈段中的基地址SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址堆栈(Stack)是主存中一个特殊的区域,采用“先进后出”或“后进先出”存取操作方式。用8088/8086形成的微机系统中,堆栈区域被称为堆栈段。2.指令指针寄存器IP(InstructionPointer):指令指针寄存器,指示主存储器指令的位置随着指令的执行,IP将自动修改以指示下一条指令所在的存储器位置IP寄存器是一个专用寄存器IP寄存器与CS段寄存器联合使用以确定下一条指令的存储单元地址IP单独改变,会发生段内的转移;IP+CS变化会产生段间的程序转移。3.标志寄存器FR标志(Flag)用于反映指令执行结果(状态)或控制指令执行形式8088处理器的各种标志形成了一个16位的标志寄存器FLAGS(也叫程序状态字PSW寄存器)程序设计需要利用标志的状态标志寄存器-分类状态标志—记录程序运行结果的状态,许多指令的执行都将相应地设置它们:CFZFSFPFOFAF控制标志—可由程序根据需要用指令设置,用于控制处理器执行指令的方式:DFIFTFOF111512DF10IF9TF8SF7ZF65AF43PF21CF0标志寄存器FLAGS空着的暂时未用进位标志CF(CarryFlag)当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=03AH+7CH=B6H,没有进位:CF=0AAH+7CH=(1)26H,有进位:CF=1零标志ZF(ZeroFlag)若运算结果为0,则ZF=1;否则ZF=03AH+7CH=B6H,结果不是零:ZF=084H+7CH=(1)00H,结果是零:ZF=1符号标志SF(SignFlag)运算结果最高位为1,则SF=1;否则SF=03AH+7CH=B6H,最高位D7=1:SF=184H+7CH=(1)00H,最高位D7=0:SF=0奇偶标志PF(ParityFlag)当运算结果最低字节(低8位)中“1”的个数为零或偶数时,PF=1;否则PF=03AH+7CH=B6H=10110110B结果中有5个“1”,是奇数,∴PF=0溢出标志OF(OverflowFlag)若算术运算的结果有溢出(运算结果超出了所能表达的最大范围,-128到127,-32768到32767),则OF=1;否则OF=03AH+7CH=B6H,产生溢出:OF=1AAH+7CH=(1)26H,没有溢出:OF=0辅助进位标志AF(AuxiliaryCarryFlag)3AH+7CH=B6H,D3有进位:AF=1运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0方向标志DF(DirectionFlag)用于串操作指令中,控制地址的变化方向:设置DF=0,存储器地址自动增加;设置DF=1,存储器地址自动减少CLD指令复位方向标志:DF=0STD指令置位方向标志:DF=1中断允许标志IF(Interrupt-enableFlag)控制可屏蔽中断是否可以被处理器响应:设置IF=1,则允许中断;设置IF=0,则禁止中断CLI指令复位中断标志:IF=0STI指令置位中断标志:IF=1陷阱标志TF(TrapFlag)单步标志位用于控制处理器进入单步操作方式:设置TF=0,处理器正常工作;设置TF=1,处理器单步执行指令单步执行指令——处理器cpu在每条指令执行结束时,测试T标志,如果为1,便产生一个编号为1的内部中断(陷阱单步中断)从而执行陷阱中断的服务程序。利用单步中断可对程序进行逐条指令的调试——单步调试存储器结构及寻址机制存储器是计算机存储信息的地方。掌握数据存储格式,以及存储器的分段管理对汇编程序设计非常重要。数据的存储格式计算机中信息的单位二进制位Bit:存储一位二进制数:0或1字节Byte:8个二进制位,D7~D0字Word:16位,2个字节,D15~D0双字DWord:32位,4个字节,D31~D0最低有效位LSB:数据最低位,D0位最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位存储单元及其存储内容每个存储单元都有一个存储器地址每个存储单元存放一个字节的内容多字节数据在存储器中占连续多个存储单元低字节存入低地址,高字节存入高地址0002H单元存放有一个数据34H表达为:[0002H]=34H存储器的分段管理原因:16位寄存器但20位地址线;内存中存放三类信息,代码、数据和临时保存的返回地址(中间结果)8088CPU有20条地址线最大可寻址空间为220=1MB物理地址范围从00000H~FFFFFH8088CPU将1MB空间从逻辑分成许多段(Segment)每个段最大限制为64KB段基地址的低4位为0000B(0H)这样,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址物理地址和逻辑地址8088CPU存储系统中,对应每个物理存储单元都有一个唯一的20位编号,就是物理地址,从00000H~FFFFFH分段后在用户编程时,采用逻辑地址,形式为:段基地址:段内偏移地址物理地址14700H逻辑地址1460H:100H逻辑地址段基地址说明逻辑段在主存中的起始位置8088规定段基地址必须是16的整数倍:xxxx0H省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址物理地址和逻辑地址的转换将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址一个物理地址可以有多个逻辑地址逻辑地址1460:0100、1380:0F00物理地址14700H14700H14600H+100H14700H13800H+F00H14700H段寄存器8088有4个16位段寄存器CS(代码段)指明当前代码段的起始地址SS(堆栈段)指明当前堆栈段的起始地址DS(数据段)指明当前数据段的起始地址ES(附加段)指明当前附加段的起始地址访问存储器的类型不同,寄存器的使用也不一样P35表2-2每个段寄存器用来确定一个逻辑段的起始地址8088CPU的引线及其功能12345678910111213141516171819204039383736353433323130292827262524232221GNDA14A13A12A11A10A9A8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCCAD15AD16/S3AD17/S4AD18/S5AD19/S6SS0*MN/MX*RD*HOLD(RQ)*/GT0*)HLDA(RQ1*/GT1*)WR*(LOCK*)M/IO(S2*)DT/R*(S1*)DEN(S0)ALEINTATEST*READYRESET808840条引脚,双列直插引脚复用以节省引脚按分时或模式不同复用8086有几个引脚不一样?8088(8086)引线信号40个引线(总线)信号(和书上分类不一样):1.数据(状态)和地址引线2.读写控制引线3.中断请求和响应引线4.总线请求和响应引线5.其它引线1.数据(状态)和地址引线AD7~AD0(Address/Data)地址/数据分时复用引线,双向、三态(高阻)访问存储器或外设的总线操作周期中,这些引线在第一个时钟周期输出存储器或I/O端口的低8位地址A7~A0其他时间用于传送8位数据D7~D0A15~A8(Address)中间8位地址引线,输出、三态在访问存储器或外设时,提供全部20位地址中的中间8位地址A15~A81.数据(状态)和地址引线(续)A19/S6~A16/S3(Address/Status)地址/状态分时复用引线,输出、三态在访问存储器的第一个时钟周期输出高4位地址A19~A16在访问外设的第一个时钟周期全部输出低电平(IO端口只用16位地址)其他时间输出状态信号S6~S3S6总低电平,S5可屏蔽中断允许,S4S3表示当前访问存储器所用的段寄存器P37DMA方式下,这些引线成浮空状态。2.读写控制引线ALE(AddressLatchEnable)地址锁存允许,输出、三态、高电平有效ALE引脚高有效时,表示复用引脚:AD7~AD0和A19/S6~A16/S3正在传送地址信息由于地址信息在这些复用引脚上出现的时间很短暂,所以系统可以利用ALE引脚的下跳沿将地址锁存起来2.读写控制引线(续1)IO/M(InputandOutput/Memory)I/O或存储器访问,输出、三态该引线输出高电平时,表示CPU将访问I/O端口,这时地址总线A15~A0提供16位I/O口地址该引线输出低电平时,表示CPU将访问存储器,这时地址总线A19~A0提供2