资源描述
第二部分 8086/8088微处理器,一、8086/8088CPU的内部结构 二、8086/8088的内部寄存器 三、8086/8088的存储器组织 四、微处理器的指令系统 五、8086/8088的引脚及工作摸式 六、时序与总线周期,1,控制总线,数据总线,地址总线,一、 8086/8088CPU的内部结构,算术逻辑单元(运算器) 寄存器组 指令处理单元(控制器),8位微处理器的内部结构,2,16位微处理器也具有以上结构中的基本单元,但更为复杂。 以8088为例讲解16位微处理器的功能结构。 8088是8086的简化版本。 两个芯片都是16位微处理器,内部运算器和寄存器都是16位的,同样具有20位地址线;8088的外部数据总线为8位,而8086为16位,8088/8086的功能结构,3,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,4,8088的编程结构从功能分成两个单元 总线接口单元BIU (Bus Interface Unit)管理8088与系统总线的接口,负责CPU对存储器和外设进行访问 执行单元EU (Execution Unit)负责指令的译码、执行和数据的运算 两个单元相互独立,分别完成各自操作 两个单元可以并行执行,实现指令取指和执行的流水线操作,5,并行操作的意义,EU执行指令的同时,BIU可以继续读取后续指令,并存入指令队列(first in first out)。这叫做“指令预取”。 8位的CPU没有指令预取功能,执行指令前必须等待“取指”操作完成。 取指操作是CPU最频繁的操作。 这种操作方式节省了CPU大量的取指等待时间。 “指令流水线”。,6,二、 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,7,指针和变址寄存器 共BP、SP、SI、DI四个 BP:基址指针寄存器Base Pointer ,默认表示堆栈段基地址; SP:堆栈指针寄存器Stack Pointer,指示栈顶 SI:源变址寄存器Source Index DI:目的变址寄存器Destination Index,8,标志寄存器(FR)是一个十六位的寄存器,但只利用了其中的9位:六个条件标志和三个控制标志。,2、标志寄存器,中断标志,陷阱标志,符号标志,9,进位标志CF(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则 CF=0。 例如(以8位运算为例,8088中为16位): 3AH + 7CHB6H 没有进位:CF=0 AAH + 7CH(1)26H 有进位:CF=1,10,溢出标志OF(Overflow Flag),若算术运算的结果有溢出,则OF=1;否则 OF0。 问题: 什么是溢出? 溢出和进位有什么区别? 处理器怎么处理,程序员如何运用? 如何判断是否溢出?,P30找答案,11,什么是溢出,处理器内部以补码表示有符号数 8位表达的整数范围是:127 128 16位表达的范围是:32767 32768 如果运算结果超出这个范围,就产生了溢出 有溢出,说明有符号数的运算结果不正确,12,溢出和进位的对比,例1:3AH7CHB6H 无符号数运算: 58124182 范围内,无进位 有符号数运算: 58124182 范围外,有溢出,例2:AAH7CH(1)26H 无符号数运算: 170124294 范围外,有进位 有符号数运算: 8612428 范围内,无溢出,13,处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF 应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。,14,全零标志ZF(Zero Flag),若运算结果为全0,则ZF=1,否则ZF=0。 例如: 3AH + 7CHB6H 结果不是零:ZF=0 86H + 7CH00H 结果是全零:ZF=1,15,符号标志SF(Sign Flag),运算结果最高位为1,则SF=1;否则SF=0。 例如: 3AH + 7CHB6H 最高位D71:SF=1 86H + 7AH00H 最高位D70:SF=0 有符号数利用最高有效位(MSB)来表示它的符号。所以,运算结果的MSB与符号标志SF相一致。,(1),16,奇偶标志PF(Parity Flag),当运算结果最低字节中“1”的个数为零或偶数时,PF=1;否则PF=0(奇校验)。 例如: 3AH + 7CHB6H10110110B, 结果中有5个1,是奇数,则 PF=0 注意:PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作。,17,辅助进位标志AF(Auxiliary Carry Flag),运算时D3位(低半字节)有进位或借位时,AF=1;否则AF=0。 这个标志主要由处理器内部使用,用于十进制算术运算的调整,用户一般不必关心。,18,方向标志DF(Direction Flag),用于串操作指令中,控制地址的变化方向: 设置DF0,串操作后存储器地址自动增量(增址) ; 设置DF1,串操作后存储器地址自动减量(减址) 。,串:存储器中一序列字或字节单元,串操作对序列字或字节单元中的内容进行某种操作 ,比如:将一个字符串从源区传送到目的区 。 MOVS串传送指令 CMPS串比较指令 SCAS串扫描指令 LODS装入串指令 STOS存储串指令,19,中断允许标志IF(Interrupt-enable Flag),用于控制外部可屏蔽中断是否可以被处理器响应: 设置IF1,则允许中断; 设置IF0,则禁止中断。 CLI 指令复位中断标志:IF0 STI 指令置位中断标志:IF1,20,陷阱标志TF(Trap Flag),用于控制处理器是否进入单步执行方式: 设置TF0,处理器正常工作; 设置TF1,处理器每执行一条指令就中断一次,中断编号为 1 (称单步中断), TF 也被称为单步标志。 单步执行和单步调试 利用单步中断可对程序进行逐条指令的调试。 这种逐条指令调试程序的方法就是单步调试。,21,22,3、段寄存器(CS、DS、SS、ES) 在8088可寻址的1MB内存空间中,可以存在四种分工不同的逻辑段:代码段、数据段、堆栈段和附加段。 段寄存器即是存放各个逻辑段段首地址的寄存器。,23,存储器的分段管理,8088有20条地址线, 最大可寻址空间为 2201MB, 可寻址的地址范围为 00000HFFFFFH 该地址称物理地址 硬件用20位的物理地址来对存储单元进行寻址,24,存储器的分段管理,由于8088中的地址寄存器都是16位的,用户不能直接使用20位的物理地址,编程时需要使用逻辑地址来寻址存储单元。 逻辑地址由两个16位数构成,其形式为: 段的起始地址 : 段内的偏移地址 (16位段地址) :( 16位偏移量),分隔符,物理地址 14700H 逻辑地址 1460H:100H,25,地址加法器 将16位的逻辑地址转换为20位的物理地址,具体操作过程为:先将段寄存器提供的16位段地址左移四位,低位补0,恢复为20位地址,然后与由各种寻址方式提供的16位偏移地址相加,即得到20位的物理地址。,逻辑地址,26,物理地址: 20 位 逻辑地址: 段基址 (段寄存器的内容)16位 偏移地址(字节距离)16位,+,逻辑地址,27,存储器的分段管理,逻辑地址的表示段地址:偏移地址,地址偏移量(xxxxH),段首(xxxx0H),低址,段尾,某 逻 辑 段,某寻址单元,28,段地址说明逻辑段在存储器中的起始位置,为模16地址:xxxx0H,省略低4位后,可用1个16位数来表示,该地址可被存放在不同的段寄存器CS/SS/DS/ES中。 偏移地址说明寻址单元距离段首的偏移量,因每段长度不超过64KB,所以偏移地址也可用1个16位数来表示。,存储器的分段管理,29,存储器的分段管理,一个存储单元可以拥有多个逻辑地址,但只可能拥有一个唯一的物理地址。,逻辑地址 1460:100、1380:F00 物理地址 14700H 14700H,30,如何分配各个逻辑段,程序的指令序列必须安排在代码段; 程序使用的堆栈一定在堆栈段; 程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段。 数据的存放比较灵活,实际上可以存放在任何一种逻辑段中。,31,段跨越前缀指令,没有指明时,一般的数据访问在DS段; 若使用BP访问存储器,则在SS段。 默认的情况允许改变,需要使用段跨越前缀指令,8088指令系统中共有4个: CS: 代码段超越,使用代码段的数据 SS: 堆栈段超越,使用堆栈段的数据 DS: 数据段超越,使用数据段的数据 ES: 附加段超越,使用附加段的数据,32,段超越的例子,没有段超越的指令实例: MOV AX, 2000H ;AXDS:2000H, ;从默认的DS数据段取出数据 采用段超越前缀的指令实例: MOV AX, ES:2000H ;AXES:2000H, ;从指定的ES附加段取出数据,33,段寄存器的使用规定(表2.1),存储器访问方式 默认段寄存器 段超越 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP 一般数据访问 DS CS/ES/SS 有效地址EA 下列特殊情况除外 串操作的源操作数 DS CS/ES/SS SI 串操作的目的操作数 ES 无 DI BP基址的寻址方式 SS CS/DS/ES 有效地址EA,34,IP(Instruction Pointer)中存放即将要执行的指令的有效地址,IP具有自增量功能。在每取出一条指令后,IP自增一,指令指针指向下一条指令。,4、指令指针寄存器(IP ),35,总结一下:,通用寄存器 8 AX/BX/CX/DX BP/SP DI/SI 指令指针寄存器 1 IP 标志寄存器 1 PSW 段寄存器 4 CS/SS/DS/ES 掌握通用寄存器的作用 熟悉PSW中各个标志的含义 切实理解存储器组织和存储空间分段的概念,36,8088的寄存器组,37,堆栈的概念,堆栈(Stack)是主存中一个特殊的区域。 它采用先进后出FILO(First In Last Out)或后进先出LIFO(Last In First Out)的原则进行存取操作,而不是随机存取操作方式。 堆栈指针它指示栈顶位置,在8086/8086中,栈顶由SS和SP共同指示,即SS:SP。 堆栈操作 处理器自动维持(子程序调用时的断点处理) 用户操作(PUSH/POP指令),38,三、 8088/8086的存储器结构,存储器是计算机存储信息的地方。掌握数据存储格式,以及存储器的分段管理对以后的汇编程序设计非常重要 你能区别寄存器、存储器(主存)、外存(包括硬盘、光盘、磁带等存储介质)吗?,39,寄存器、存储器和外存的区别,寄存器是微处理器(CPU)内部暂存数据的存储单元,以名称表示,例如:AX,BX.等 存储器也就是平时所说的主存,也叫内存,可直接与CPU进行数据交换。主存利用地址区别 外存主要指用来长久保存数据的外部存储介质,常见的有硬盘、光盘、磁带、U盘等。外存的数据只能通过主存间接地与CPU交换数据 程序及其数据可以长久存放在外存,在运行需要时才进入主存,40,2.5 8086/8088的存储器结构,数据的存储格式 计算机中表示信息的单位有: 位(bit)、字节(byte)、 字(word)、双字(double word)等 在存储器中,信息的存储单位是:字节;即每个存储单元的内容是一个字节。,41,信息的表示单位,最低有效位LSB(Least Significant Bit):指数据的最低位,即D0位; 最高有效位MSB(Most Significant Bit):指数据的最高位,对应字节、字、双字分别指D7、D15、D31位。,42,图2.3 8088的存储格式,00000H,00001H,00002H,00003H,00004H,00005H,00006H,D7 D0,低地址,43,存储单元及其存储内容,每个存储单元都有一个编号存储器地址 例如:图2.3(下页)中,0002H单元存放有一个数据34H,表示为 0002H34H 如何存储一个字或双字呢?,小端方式,44,多字节数据在存储器中占据多个连续的存储单元: 存放时,低字节存于低地址,高字节存于高地址; 多字节数据占据的地址空间用它的低地址来表示。 例如:图2.3中, 2号“字”单元: 0002H = 1234H 2号“双字”单元: 0002H = 78561234H 80x86处理器的“低对低、高对高”的存储形式,被称为“小端方式(little endian)”。 相对应还存在“大端方式(Big Endian)”。,45,地址对齐,同一个存储器地址可以表示:字节单元地址、字单元地址、双字单元地址等等(视指令的具体情况)。 将字单元安排在偶地址(xxxx0 B),将双字单元安排在模4地址(xxxx00 B)的做法,被称为“地址对齐(Align)”。 对于地址不对齐的数据,处理器访问时,需要付出额外的访问时间。要取得较高的存取速度,应该将数据的地址对齐。,46,程序分段的图例(图2.4),8088对逻辑段的要求是: 只能从模16地址开始一个段,即段地址低4位均为0,为xxxx0H形式;省略最低四位0,即可用16位的段寄存器存储。每段最大不超过64KB。 8088对每个段不要求必须是64KB,不要求各段之间完全分开、即可以重叠。 图2.4a是各自独立段的分配示例 图2.4b是相互重叠段的分配示例 1MB空间最多能分成多少个段? 1MB空间最少能分成多少个段?,47,1MB空间的分段,1MB空间最多能分成多少个逻辑段? 每隔16个存储单元就可以开始一个段,所以1MB最多可以有: 2201621664K 个段 1MB空间最少能分成多少个逻辑段? 每隔64K个存储单元开始一个段,所以1MB最少可以有: 22021616 个段,48,图2.4a 各个逻辑段独立的实例,49,图2.4b 各个逻辑段重叠的实例,50,2.2节的总结,8088有8个8位通用寄存器、8个16位通用寄存器 8088有6个状态标志和3个控制标志 8088将1MB存储空间分段管理,有4个段寄存器,对应4种逻辑段 。,51,第2章:作业,习题2(第57 页 ): 2.1,2.3,2.4,2.5,2.6,52,53,
展开阅读全文