资源预览内容
第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
第9页 / 共48页
第10页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第二部分 8086/8088微处理器,一、8086/8088CPU的内部结构 二、8086/8088的内部寄存器 三、8086/8088的存储器组织 四、微处理器的指令系统 五、8086/8088的引脚及工作摸式 六、时序与总线周期,2,控制总线,数据总线,地址总线,一、 8086/8088CPU的内部结构,算术逻辑单元(运算器) 寄存器组 指令处理单元(控制器),8位微处理器的内部结构,3,16位微处理器也具有以上结构中的基本单元,但更为复杂。 以8088为例讲解16位微处理器的功能结构。 8088是8086的简化版本。 两个芯片都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线;8088的外部数据总线为8位,而8086为16位,8088/8086的功能结构,AH,AL,BH,BL,CL,CH,DH,DL,SP,BP,DI,SI,通 用 寄 存 器,CS,DS,SS,ES,I P,内部通信寄存器,总线,控制,逻辑,1,2,3,4,AX,BX,CX,DX,数据总线,暂 存 寄 存 器,A L U,标志寄存器,外部总线,指令队列,16 位,执行,控制,电路,执行单元,地址加法器,20 位,16 位,段 寄 存 器,指令指针,(EU),AB,DB,CB,5,8088的编程结构从功能分成两个单元 总线接口单元BIU (Bus Interface Unit)管理8088与系统总线的接口,负责CPU对存储器和外设进行访问 执行单元EU (Execution Unit)负责指令的译码、执行和数据的运算 两个单元相互独立,分别完成各自操作 两个单元可以并行执行,实现指令取指和执行的流水线操作,6,并行操作的意义,EU执行指令的同时,BIU可以继续读取后续指令,并存入指令队列(first in first out)。这叫做“指令预取”。 8位的CPU没有指令预取功能,执行指令前必须等待“取指”操作完成。 取指操作是CPU最频繁的操作。 这种操作方式节省了CPU大量的取指等待时间。 “指令流水线”。,7,二、 8088寄存器结构,8088共有8个的通用寄存器,1个标志寄存器,4个段寄存器和1个指令指针寄存器。 1、通用寄存器 数据寄存器 共AX、BX、CX、DX四个,每个寄存器即可作为16位寄存器,又可拆分为两个8位寄存器,此时记为AH、AL、BH、BL等。 AX(AH、AL):累加器accumulator BX(BH、BL):基址寄存器base CX(CH、CL):计数寄存器counter DX(DH、DL):数据寄存器data,8,指针和变址寄存器 共BP、SP、SI、DI四个 BP:基址指针寄存器Base Pointer ,默认表示堆栈段基地址; SP:堆栈指针寄存器Stack Pointer,指示栈顶 SI:源变址寄存器Source Index DI:目的变址寄存器Destination Index,9,标志寄存器(FR)是一个十六位的寄存器,但只利用了其中的9位:六个条件标志和三个控制标志。,2、标志寄存器,中断标志,陷阱标志,符号标志,10,进位标志CF(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则 CF=0。 例如(以8位运算为例,8088中为16位): 3AH + 7CHB6H 没有进位:CF=0 AAH + 7CH(1)26H 有进位:CF=1,11,溢出标志OF(Overflow Flag),若算术运算的结果有溢出,则OF=1;否则 OF0。 问题: 什么是溢出? 溢出和进位有什么区别? 处理器怎么处理,程序员如何运用? 如何判断是否溢出?,P30找答案,12,什么是溢出,处理器内部以补码表示有符号数 8位表达的整数范围是:127 128 16位表达的范围是:32767 32768 如果运算结果超出这个范围,就产生了溢出 有溢出,说明有符号数的运算结果不正确,13,溢出和进位的对比,例1:3AH7CHB6H 无符号数运算: 58124182 范围内,无进位 有符号数运算: 58124182 范围外,有溢出,例2:AAH7CH(1)26H 无符号数运算: 170124294 范围外,有进位 有符号数运算: 8612428 范围内,无溢出,14,处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF 应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。,15,全零标志ZF(Zero Flag),若运算结果为全0,则ZF=1,否则ZF=0。 例如: 3AH + 7CHB6H 结果不是零:ZF=0 86H + 7CH00H 结果是全零:ZF=1,16,符号标志SF(Sign Flag),运算结果最高位为1,则SF=1;否则SF=0。 例如: 3AH + 7CHB6H 最高位D71:SF=1 86H + 7AH00H 最高位D70:SF=0 有符号数利用最高有效位(MSB)来表示它的符号。所以,运算结果的MSB与符号标志SF相一致。,(1),17,奇偶标志PF(Parity Flag),当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0(奇校验)。 例如: 3AH + 7CHB6H10110110B, 结果中有5个1,是奇数,则 PF=0 注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。,18,辅助进位标志AF(Auxiliary Carry Flag),运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0。 这个标志主要由处理器内部使用,用于十进制算术运算的调整,用户一般不必关心。,19,方向标志DF(Direction Flag),用于串操作指令中,控制地址的变化方向: 设置DF0,串操作后存储器地址自动增量(增址) ; 设置DF1,串操作后存储器地址自动减量(减址) 。,串:存储器中一序列字或字节单元,串操作对序列字或字节单元中的内容进行某种操作 ,比如:将一个字符串从源区传送到目的区 。 MOVS串传送指令 CMPS串比较指令 SCAS串扫描指令 LODS装入串指令 STOS存储串指令,20,中断允许标志IF(Interrupt-enable Flag),用于控制外部可屏蔽中断是否可以被处理器响应: 设置IF1,则允许中断; 设置IF0,则禁止中断。 CLI 指令复位中断标志:IF0 STI 指令置位中断标志:IF1,21,陷阱标志TF(Trap Flag),用于控制处理器是否进入单步执行方式: 设置TF0,处理器正常工作; 设置TF1,处理器每执行一条指令就中断一次,中断编号为 1 (称单步中断), TF 也被称为单步标志。 单步执行和单步调试 利用单步中断可对程序进行逐条指令的调试。 这种逐条指令调试程序的方法就是单步调试。,22,23,3、段寄存器(CS、DS、SS、ES) 在8088可寻址的1MB内存空间中,可以存在四种分工不同的逻辑段:代码段、数据段、堆栈段和附加段。 段寄存器即是存放各个逻辑段段首地址的寄存器。,24,存储器的分段管理,8088有20条地址线, 最大可寻址空间为 2201MB, 可寻址的地址范围为 00000HFFFFFH 该地址称物理地址 硬件用20位的物理地址来对存储单元进行寻址,25,存储器的分段管理,由于8088中的地址寄存器都是16位的,用户不能直接使用20位的物理地址,编程时需要使用逻辑地址来寻址存储单元。 逻辑地址由两个16位数构成,其形式为: 段的起始地址 : 段内的偏移地址 (16位段地址) :( 16位偏移量),分隔符,物理地址 14700H 逻辑地址 1460H:100H,26,地址加法器 将16位的逻辑地址转换为20位的物理地址,具体操作过程为:先将段寄存器提供的16位段地址左移四位,低位补0,恢复为20位地址,然后与由各种寻址方式提供的16位偏移地址相加,即得到20位的物理地址。,逻辑地址,27,物理地址: 20 位 逻辑地址: 段基址 (段寄存器的内容)16位 偏移地址(字节距离)16位,+,逻辑地址,28,存储器的分段管理,逻辑地址的表示段地址:偏移地址,地址偏移量(xxxxH),段首(xxxx0H),低址,段尾,某 逻 辑 段,某寻址单元,29,段地址说明逻辑段在存储器中的起始位置,为模16地址:xxxx0H,省略低4位后,可用1个16位数来表示,该地址可被存放在不同的段寄存器CS/SS/DS/ES中。 偏移地址说明寻址单元距离段首的偏移量,因每段长度不超过64KB,所以偏移地址也可用1个16位数来表示。,存储器的分段管理,30,存储器的分段管理,一个存储单元可以拥有多个逻辑地址,但只可能拥有一个唯一的物理地址。,逻辑地址 1460:100、1380:F00 物理地址 14700H 14700H,31,如何分配各个逻辑段,程序的指令序列必须安排在代码段; 程序使用的堆栈一定在堆栈段; 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段。 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中。,32,段跨越前缀指令,没有指明时,一般的数据访问在DS段; 若使用BP访问存储器,则在SS段。 默认的情况允许改变,需要使用段跨越前缀指令,8088指令系统中共有4个: CS: 代码段超越,使用代码段的数据 SS: 堆栈段超越,使用堆栈段的数据 DS: 数据段超越,使用数据段的数据 ES: 附加段超越,使用附加段的数据,33,段超越的例子,没有段超越的指令实例: MOV AX, 2000H ;AXDS:2000H, ;从默认的DS数据段取出数据 采用段超越前缀的指令实例: MOV AX, ES:2000H ;AXES:2000H, ;从指定的ES附加段取出数据,34,段寄存器的使用规定(表2.1),存储器访问方式 默认段寄存器 段超越 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP 一般数据访问 DS CS/ES/SS 有效地址EA 下列特殊情况除外 串操作的源操作数 DS CS/ES/SS SI 串操作的目的操作数 ES 无 DI BP基址的寻址方式 SS CS/DS/ES 有效地址EA,35,IP(Instruction Pointer)中存放即将要执行的指令的有效地址,IP具有自增量功能。在每取出一条指令后,IP自增一,指令指针指向下一条指令。,4、指令指针寄存器(IP ),36,总结一下:,通用寄存器 8 AX/BX/CX/DX BP/SP DI/SI 指令指针寄存器 1 IP 标志寄存器 1 PSW 段寄存器 4 CS/SS/DS/ES 掌握通用寄存器的作用 熟悉PSW中各个标志的含义 切实理解存储器组织和存储空间分段的概念,37,8088的寄存器组,38,堆栈的概念,堆栈(Stack)是主存中一个特殊的区域。 它采用先进后出FILO(First In Last Out)或后进先出LIFO(Last In First Out)的原则进行存取操作,而不是随机存取操作方式。 堆栈指针它指示栈顶位置,在8086/8086中,栈顶由SS和SP共同指示,即SS:SP。 堆栈操作 处理器自动维持(子程序调用时的断点处理)
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号