CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第1页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第2页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第3页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第4页
CPU的内部结构由于汇编语言是建立在机器指令基础之.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 IBM PC 微型计算机 2.1 8086/8088CPU的内部结构 由于汇编语言是建立在机器指令基础之上的,是一种描述硬件运作的语言,所以要学习汇编语言,必须对它对应的硬件结构先作了解。 特别是对于CPU,因为每一种CPU都有自己的指令系统,必须先对CPU的内部结构和工作机制作一个概要的理解。,一般CPU由如下三个部分组成: (1) 控制器:计算机系统中控制所有功能部件(包括控制器本身)协同工作,自动执行计算机程序的功能部件,它通过对机器指令进行译码得到所需的控制信号,并根据时钟信号使各种控制信号在适当的时刻产生,从而产生一系列时序过程来完成指令所要求的操作。,(2) 运算器:计算机系统中加工、处理数据的功能部件,其功能包括算术运算和逻辑运算。 (3) 寄存器:CPU内部一般提供一组零散的存储单元,每一个存储单元都能存储二进制数据,并且都有自己独特的功能和相应的名称,这一组CPU内部的存储单元通常称为寄存器。,8086和8088CPU内部结构大致是一致的,内部处理的最大二进制数都是16位的,只不过8086针对的数据总线是16位的,8088是8位的, 也就是说,只是CPU的外部引脚有所区别。8086/8088CPU内部结构大致如教材上P18的图2-3所示。,CPU中的寄存器:8086CPU中总共有14个物理寄存器,逻辑上的寄存器有22个,下面就它们的功能分别来讨论。参见教材P20图2-5 (a) 段寄存器:包括CS(Code Segment)、SS(Stack Segment)、DS(Data Segment)、ES(Extra Segment)四个16位物理寄存器,用于存放程序所要使用的4个存储段的段基值,分别对应于内存中的四块存储区域,代码段、堆栈段、数据段、附加段。,段:内存中一段连续的空间,在程序中具有特定的用途。 每个程序都可能会使用这样四个段,其中代码段是必须的,实用的程序通常至少包含代码段、堆栈段、数据段。,代码段用于存放程序的机器指令序列; 堆栈段用于存放程序使用堆栈指令所保存的数据,自动保存的断点等信息; 数据段存放程序直接使用的数据; 附加段中的内容不确定,可以由程序开发人员根据实际需要自己决定。,(b)地址指针寄存器:包括BX、SI、DI、BP、SP、IP五个16位寄存器,用于存放逻辑地址的偏移量或者偏移量的一部分(分量) 其作用在寻址时类似于游标,通过相对于段基址的相对字节距离来定位具体的字节或字单元。,BX称为基址寄存器,可以用于存放偏移量或者是偏移量的一部分(后面介绍指令寻址方式时会详细分析),通常和DS、ES这两个段寄存器配合使用,用于定位数据段或附加段中的内存单元;,SI称为源变址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES这两个段寄存器配合使用,用于定位数据段或附加段中的内存单元。 在串操作指令中,SI用于指明源串偏移量,所以被称为源变址寄存器。,DI称为目的变址寄存器,用于存放偏移量或者是偏移量的一部分,通常和DS、ES这两个段寄存器配合使用,用于定位数据段或附加段中的内存单元。 在串操作指令中,DI用于指明目的串偏移量,所以被称为目的变址寄存器。,BP称为基址指针寄存器,用于存放偏移量,通常和SS段寄存器配合使用,用于定位堆栈段中的内存单元。 SP称为堆栈指针,用于存放偏移量,只能和SS段寄存器配合使用,且始终指向堆栈的栈顶,在堆栈指令中隐含的使用它来定位栈顶数据。,IP称为指令指针,用于存放偏移量,只能和CS段寄存器配合使用,且始终指向代码段中下一条将要读取到CPU指令队列的那条指令; 修改IP中内容的操作是CPU在每读取一条指令到指令队列后自动进行的,使它指向要读取的下一条指令。 跳转指令中可以隐含的修改IP寄存器中的内容。,(c) 数据寄存器:包括AX、BX、CX、DX这样4个16位的寄存器 在逻辑上一个16位的数据寄存器可以看成是3个寄存器例如AX,可以把它作为一个16位的数据寄存器来使用,也可以把它的高低8位分开,高8位为AH寄存器,低8位为AL寄存器,在使用上要注意逻辑上不同的寄存器可能在物理上是相互覆盖的。 这里的寄存器BX在上面提到过,它既可以用作数据寄存器,也可以用作地址指针寄存器。,(d)标志寄存器:8086CPU提供一个16位的标志寄存器FR,对这个寄存器的使用在指令中往往是隐含的。 值得注意的是,FR是按位操作的,每一个二进制位都有自己特定的含义,具体每一位的含义可以参见教材P23的图2-8及其说明。,一般在汇编语言程序中的运算指令或者标志位控制指令会影响特定标志位。 可以通过转移指令来判断标志位的变化,从而实现程序中的分支结构或者循环结构。标志寄存器是实现程序中分支、循环结构的重要硬件基础。,)进位标志位CF(Carry Flag):在CPU进行算术运算指令时,如果该指令要影响CF标志,并且用户把操作数看作无符号数,那么该标志位是有效标志。 它标志着上次算术运算最高位(对字操作是第15位,字节是第7位)是否产生进位(加法指令)或者借位(减法指令)。 如果有进位或借位产生,那么CF=1;如果没有,那么CF=0。CF标志位位于FR的第0位。,例1观察下面的加减法运算,判断最后CF标志应该为什么值,注意,算术运算中的操作数必须理解为无符号数,这样CF标志的值才有意义。 10110011 + 01010001 1 00000100 这次字节的加法运算后,最高位向更高一位产生了进位,CF应该等于1。,00110000 + 00001101 0 00111101 这次字节的加法运算后,最高位没有向更高一位产生进位,CF应该等于0。,01010101 - 00111110 0 00010111 这次字节的减法运算后,最后位没有向更高一位产生借位,CF应该等于0。,)奇偶标志位PF(Parity Flag):如果CPU所执行的指令要影响PF标志,并且该指令得到的数据结果低8位中含有偶数个“1”时,PF=1;含有奇数个“1”,PF=0。 注意无论指令的操作数有多么长,只有低8位数据中1的个数能够影响到PF标志的取值。 PF标志位位于FR的第2位。,)辅助进位标志位AF(Auxiliary Carry Flag):在CPU执行算术运算指令时,如果该指令要影响AF标志,并且用户把操作数看作无符号数,AF标志才有意义。 如果低字节中的低4位向高4位产生进位或借位时(也就是第3位向第4位产生进位或借位),AF被置为1;如果低4位没有向高4位产生进位或借位,AF被置为0。 AF标志,又称半进位标志,位于FR的第4位。 判别标准:和CF一样,使用无符号数的加减运算来作判断,只是判断进位和借位的位置不在操作数的最高位,而是在低字节的第3位。,4)零值标志位ZF(Zero Flag):如果CPU执行的指令要影响ZF标志,并且保证ZF标志是有意义的,那么当指令得到的结果数据各位全为“0”时,则ZF置“1”,否则ZF置“0”。ZF标志位位于FR的第6位。 实用价值:ZF标志的使用主要是进行比较,并根据比较的结果来进行程序的分支或循环。例如,对两个整数进行比较,即对两个整数进行相减的操作,如果两个数是相等的,那么结果为0,ZF=1;如果不等,那么结果非0,ZF=0。,5)符号标志位SF(Sign Flag):如果CPU执行的指令要影响SF标志,并且用户把指令得到的结果数据看作带符号数,那么当结果为负数时,SF置“1”;当结果为正数时,SF置“0”。 也就是说,SF标志位的取值和结果数据的最高位是一致的,因为补码的最高位就是符号位。 SF标志位位于FR的第7位。,(6)溢出标志位OF(Overflow Flag):如果CPU执行算术运算指令,并且用户把操作数看作带符号数时,OF标志位的取值才有意义。 如果运算结果超出了补码的表示范围(对字节来说,是-128到127,对字来说,是-32768到32767),那么解释为溢出,OF置为1;如果运算结果没有超出补码的表示范围,OF置为0。 OF标志位位于FR的第11位。,7)单步(或跟踪)标志位TF(Trace Flag):前面讲到的标志位都属于状态标志位,是指令根据自己的执行情况而为后续指令留下的一些可供参考的状态信息。 TF标志位是一个控制标志位,和前面所讲的标志位功能不同,它是用于触发单步中断的。 如果使用指令将TF标志位置为1,那么CPU将进入单步执行指令的工作方式,每执行完一条指令就会触发单步中断,执行单步中断服务程序,一般会在屏幕上显示CPU内部各寄存器和标志位的状态,以便用户观察该指令产生的影响。,进入中断时,TF标志会自动被清0,所以中断服务程序的执行并不会出现单步执行的情况,中断服务程序结束后TF标志会恢复中断以前的设置。 TF标志为用户单步调试自己的程序提供了相应的硬件基础。如果使用指令将TF标志清0,那么将会使CPU退出单步运行模式,回到连续执行机器指令的状态。TF标志位位于FR的第8位。,(8)中断标志位IF(Interrupt-enable Flag):这也是一个控制标志位,用于控制CPU是否处理可屏蔽中断。 如果使用指令将IF标志置为1,那么CPU将会处理任何可屏蔽中断,如果使用指令将IF标志置为0,那么CPU将不会处理可屏蔽中断。IF标志位位于FR的第9位。 注意,IF标志只能屏蔽可屏蔽中断,对于一些由严重错误或故障引起的不可屏蔽中断则是无法屏蔽的。,(9)方向标志位DF(Direction Flag):这也是一个控制标志位,用于控制串操作指令存取数据的方向. 如果使用指令将DF标志置为0,每执行完一次串操作以后,源串地址指针SI和目的串地址指针DI中的内容会自动递增; 如果使用指令将DF标志置为1,那么每执行完一次串操作以后,SI和DI中的内容会自动递减。,寄存器的分类可以参见教材P20图2-5,地址指针寄存器和数据寄存器统称为通用寄存器,总共有8个,除了各自特殊的功能外,它们都可以用于存放数据; 指令指针和标志寄存器统称为控制寄存器,指令指针直接控制机器指令的执行流程,标志寄存器可以由标志位间接影响机器指令的执行流程或者运算结果; 段寄存器用于指示当前运行程序中可以使用的4个当前段。,主存储器 221 8086/8088系统中主存储器的编址方式以及数据的存放方式 主存储器就是前面提到的内部存储器,简称内存,它是以字节为单位进行存储单元编址的。也就是说,内存中每一个字节都有自己独一无二的地址,CPU读写内存中的数据最小单位为字节。,8086/8088系统中地址线有20条,每个地址可以用20位的无符号二进制数来表示,为了表达方便,在程序中常常使用5位16进制数来表示内存单元的地址。 系统的寻址范围为00000H到0FFFFFH,可以寻址1MB的内存空间。内存中字节的编址可以参见教材P24的图2-9。 CPU访问内存中的数据,可以以字节为单位,也可以以字为单位。 字节是基本单位。一个字数据(16位)在内存中将占据相邻的两个字节单元,数据的低8位存放在低地址单元;高8位存放在高地址单元。,例1把16位数据5342H放入地址为20000H的字单元,试说明其存放方式。 20000H:42H 20001H:53H,例2参见教材P25图2-10,试说明CPU读取地址为10000H、10002H的字节单元时,将分别读取到什么样的数据,读取地址为10000H、10001H的字单元时,将分别读取到什么样的数据。 10000H:56H (字节) 10002H:12H (字节) 10000H:3456H (字) 10001H:1234H (字) 内存中存放的数据可以看作字节数据,也可以看作字数据,具体以什么样的方式来访问内存单元中的数据关键在于编制程序的人如何来解释和使用内存中的数据。,222 8086/8088系统中存储单元的地址及其表示方法 8086和8088CPU都提供20条地址引脚,也就是说它的寻址范围为2 20个字节,即1MB的内存空间。 但是,8086/8088内部寄存器和内部总线都只有16位,不能够直接形成20位的地址。CPU的设计者采用了一种分段管理内存的方法来解决这个问题。,使用段寄存器来存放16位的段基值(无符号数),使用其他寄存器来存放16位的偏移量(也称有效地址Effective Address,缩写为EA,为无符号数),由段基值和偏移量组成的内存单元地址表示形式称为逻辑地址。,在CPU访问内存单元时会使用地址加法器来计算内存单元的地址(见教材P19,如图2-4)。 先把段基值左移4位(也就是在右边添上4个0,相当于乘以16),生成20位的段基址,然后加上16位的偏移量,就是要访问的内存单元地址,这种CPU在最终访问内存单元时使用的20位地址称为物理地址。,一个段由它的段基址起始,即一个段的起

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论