您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 汇编语言与计算机原理第四章
1第四章Intel8086/8088微处理器及其指令系统§4.1概述微型计算机所使用的微处理器芯片可分为两大类:一类是Intel类型芯片,另一类是非Intel类型的。Intel类型微处理器芯片主要生产厂家是美国Intel公司,IBMPC微型计算机CPU使用的就是Intel类型微处理器。非Intel类型的微处理器芯片是Motorola等公司的产品,主要用于Apple公司的微型计算机和服务器中。自1971年,Intel公司生产第一片微处理器至今的30多年时间,Intel微处理器每3至5年就要更新换代一次,使IBMPC微型计算机的性能不断提高。IBMPC微型计算机使用的微处理器主要变化是:1.Intel8088微处理器Intel8088微处理器是Intel公司专门为第一代IBMPC微型计算机设计的。Intel8088微处理器内部运算和寄存器都是16位,但是外部数据线是8位,因而被称为准16位微处理器。地址线20位,可寻址空间1M;工作频率4.7Mhz。与此同时还推出了Intel8087浮点运算器,以配合Intel8088,提高数值运算速度。2.Intel80286微处理器Intel80286是IBMPC/AT微型计算机使用的微处理,其内部运算和寄存器同Intel8088一样,也是16位,但是外部数据线增加到16位,是真正的16位微处理器。地址线24位,可寻址空间16M;工作频率8Mhz。和Intel80286配合的浮点运算器是Intel80287。3.Intel80386微处理器使用Intel80386微处理器的有IBM公司的PS/2系列微型计算机,和一些其它厂家生产的386型兼容机。Intel80386是32位微处理器,其内部运算和寄存器都是32位;外部数据线和地址线32位,可寻址空间4G;增加了页式虚拟存储管理部件;时钟频率32Mhz。和Intel80386配合的浮点运算器是Intel80387。4.Intel80486微处理器Intel80486是高性能的32位微处理器,其内部运算和寄存器的字长和Intel80386相同。Intel80486有多个型号,最高时钟频率可达66Mhz。Intel80486内含浮点运算器和8KB的高速缓存器。5.Pentium微处理器1993年Intel公司推出了Pentium微处理器。Pentium微处理器芯片集成了310万个晶体管,有64位数据线,36位地址线。Pentium微处理器的内部浮点运算器在Intel80486的基础上进行了全新的设计。Pentium微处理器使用了超标量技术,有两个独立的整数处理单元,可以同时执行两条整数运算指令。内部高速缓存分为两部分:8KB的指令高速缓存和8KB的数据高速缓存。之后Pentium微处理器推出的几个型号,时钟频率从66Mhz发展到166Mhz。1995年,Intel公司推出了PentiumPro微处理器。PentiumPro的整数处理单元增加到3个,时钟频率有150Mhz、166Mhz和200Mhz等几个型号。1997年1月Intel公司推出了PentiumMMX(MultimediaExecution)微处理器,该处理器增加了57条多媒体指令,用于处理音频、视频和图像数据。1997年5月,Intel公司推出了PentiumII微处理器,最高时钟频率PentiumII芯片达366Mhz。21999年,Intel公司推出了PentiumⅢ微处理器。最高时钟频率PentiumII芯片达933Mhz。2000年6月,Intel公司推出了PentiumⅣ微处理器,目前,PentiumⅣ微处理器的时钟频率已高达2.0GMhz以上。§4.28086/8088微处理器一、8086/8088微处理器功能结构8088微处理器是Intel公司专为IBM-PC微型计算机设计的CPU芯片,它仅仅是在8086CPU的基础进行了一些改进。Intel8086和Intel8088的主要区别是Intel8086的数据线是16根,而Inetl8088只有8根数据线,但是它们的地址线都是20根,控制线也基本相同。图4.2.18086/8088功能结构图Intel8086/8088CPU就功能而言分成两大部分:总线接口单元BIU(BusInterfaceunit)和执行单元EU(ExecutionUnit),如图4.2.1所示。BIU单元的功能主要包括:从存储器取出指令,送入指令流排队机构;访问内存或外部设备;响应外部中断等。EU的功能是执行指令。EU从指令队列取出指令代码,译码后发出相应的执行控制信号。运算器执行运算,运算结果的特征保存在标志寄存器。由于取指令和执行指令部件是分开的,并且相对独立,所以指令执行和取指令可以同时进行,即在一条指令执行过程中,可以取出下一条指令。指令队列可以存储多条指令,BIU通用寄存器组段寄存器组总线控制标志寄存器执行单元总线接口单元指令队列执行控制部件运算器运算器AHALBHBLCHCLDHDLSPBPSIDIESCSSSDS指令指针地址运算器运算器43213取出的指令在指令流排队机构排队,执行单元执行完一条指令后就可以立即从指令队列中取出下一条指令执行。由于执行和取指令可以重叠进行,提高了系统速度。二.Intel8086/8088CPU的寄存器Intel8086/8088CPU内部含有一些寄存器,这些寄存器用于暂存数据和地址等。1.数据寄存器组数据寄存器有四个,这四个寄存器都是十六位寄存器,可以按十六位使用,也可以分别使用每个寄存器的高八位和低八位。如果按十六位使用其名称分别为AX,BX,CX和DX,如果按八位使用其名字如图4.2.2所示。四个数据寄存器的通常的名称和用途如下:AX:累加器,用于暂存操作数或运算结果。BX:基址寄存器,除用于存储运算操作数之外,还经常用于地址运算。CX:计数器,初作为一般寄存器使用外,还经常用于循环程序的循环次数计数。DX:数据寄存器,用于存储运算操作数或运算结果。图4.2.2数据寄存器2.变址寄存器SI:源变址寄存器,16位,一般用于存储源操作数的偏移地址。DI:目的变址寄存器,16位,一般用于存储目的操作数的偏移地址。3.堆栈指针和基数指针SP:堆栈指针,16位,用于堆栈操作。BP:基数指针,16位,用于堆栈段指示偏移地址。4.段寄存器段寄存器CS、DS、SS、ES是四个十六位寄存器,在段式存储管理中,这四个寄存器用于保存段基址(段开始地址)。由于Intel8086/8088微处理器的地址线有20条,而段寄存器是十六位寄存器,所以只能保存段基址的高十六位,在执行访问内存指令时,将段寄存器左移4位,再加上16位偏移地址得到20位物理地址。四个段寄存器用途如下:CS:代码段寄存器,用于存储程序代码段基址。DS:数据段寄存器,用于存储程序数据段基址。SS:堆栈段寄存器,用于存储程序堆栈段基址。ES:附加数据段寄存器,用于存储程序数据段基址,通常用于字串操作5.IP:指令指针,16位,指向下一条要执行指令的偏移地址。6.标志寄存器16位寄存器,每一位指示运算指令或其他指令执行后的检验结果,其意义如下:CF:b0位,进位或借位标志位,当加法运算最高位向前有进位,或减法运算最高位向前有借位,本位置1,否则置0;PF:b2位,奇偶标志位,当运算结果低8位有偶数个1,PF置1,否则置0;AF:b4位,辅助进位标志位,当运算时,b3位向b4位有进位AF置1,否则置0;ZF:b6位,零标志位,运算结果等于0时置1,否则置0;SF:b7位,符号标志位,运算结果的最高位等于1时SF=1(负号),等于0时SF=0(正号);AHALBHBLCHCLDHDL4TF:b8位,追踪标志位,当TF=1时使CPU进入单步执行方式,每执行一条指令就暂停,常用于调试程序;IF:b9位,中断标志位,当IF=0时,CPU不响应可屏蔽中断;DF:b10位,方向标志位,当字符串传送时,DF=0时每传送一个字节或一个字,地址自动增加1(字节传送)或增2(字传送),当DF=1时每传送一个字节或一个字,地址自动减1(字节传送)或减2(字传送);OF:b11位,溢出标志位,当带符号数运算的运算结果超出了数的表示范OF置1,否则置0。例如,8位运算时,当运算结果+127或128时,超出了8位机器数的表示范围,既产生了溢出。进位和溢出是两个不同的概念,不要混淆,如下例,计算01100100+01100100,计算结果为11001000,并没有向前进位,但是8位带符号机器数的表示范围,OF将置1:除上述标志位外,状态标志寄存器还有一些位没有使用,如图4.2.3所示。图4.2.3标志寄存器§4.3操作数寻址方式一、指令格式Intel8086/8088微处理器的指令按格式可分为无操作数指令、单操作数指令和双操作数指令三种。指令的一般格式为:操作码[目的操作数][,源操作数]操作码表示指令的操作类型,源操作数和目的操作数表示指令的操作对象,操作结果存入目的操作数。例如指令:ADDAL,3,表示将AL寄存器中的值和常数3相加,结果存入AL寄存器。微处理器实际执行的指令是二进制代码的机器指令,为了编程方便,在编写程序时一般使用机器指令的助记符号,机器指令的助记符号称为汇编指令,例如,上面指令中的ADD就是加法机器指令的助记符。不同指令的操作数个数可能不同,有的指令有两个操作数,有的指令有一个操作数,还有的指令没有操作数,或者其操作数是隐含的,如下面的例子:INCAL;将AL寄存器值加1,结果存入AL寄存器CLD;将标志寄存器的DF位置0ADDAL,BL上面第一个指令是单操作数指令;第二个指令的操作数是隐含的(DF标志位),第三个指令是双操作数指令。二、操作数类型:按操作数所在位置,可分为三种类型:1.寄存器操作数:操作数在CPU内部寄存器中,例如将AL和BL得值相加,结果存入01100100+0110010011001000b15b0OFDFIFTFSFZFAFPFCF5AL,可用如下指令:ADDAL,BL这里源操作数和目的操作数都是寄存器操作数。2.存储器操作数:操作数据在内存单元中,如下例:ADD[2000H],AL该指令的执行将AL的值和偏移地址为2000H的内存单元值相加,结果存入内存单元,该指令的源操作数属于寄存器操作数,而目的操作数是存储器操作数。3.立即数:操作数在指令中,例如下面指令的源操作数为立即数:ADDAL,30在指令中目的操作数除了参加运算之外,还要存储运算结果,所以目的操作数不能是立即数,只能是存储器操作数或寄存器操作数。三、寻址方式所谓寻址方式,是CPU在执行指令时,如何确定源操作数或目的操作数所在位置。Intel8088寻址方式有如下几种:1.立即寻址操作数为立即数,例如:MOVAL,3MOVAL,’A’第一条指令的功能是将数值常数3传送到AL寄存器。第二条指令的功能是将字符A的ASCII码41H传送到AL寄存器。立即数寻址中的操作数(立即数)作为指令的一部分,跟随在操作码之后。如果是16位操作数,低8位在前(低地址),高8位在后(高地址)。例如:MOVAX,4142H指令在内存中的存放如图4.3.1所示,指令执行后,AL=42H,AH=41H。图4.3.116位立即数寻址2.寄存器寻址操作数为CPU内部寄存器,上面示例指令的目的操作数即为寄存器寻址,下面指令的源操作数和目的操作数都是寄存器寻址方式:MOVDS,AX;将AX的值传送给DS寄存器。3.直接寻址直接寻址方式指令中,给出的是操作数所在内存单元的段内16位偏移地址,如下面指令:MOVAX,[2000H];将段内相对偏移地址为2000H单元的值传送到AX。这里方括号是地址符号,2000H为十六进制数。执行指令时CPU要根据偏移地址计算实………操作码…42H41HALAH6际物理地址,其计算方法是:DS*10H+2000H这里约定段基址的高16位存放在DS段基址寄存器,低4位为0。CPU的地址运算器根据段基址和指令中的偏移地址计算出20位的物理地址,发送到地址总线,将该地址开始存放的一个
本文标题:汇编语言与计算机原理第四章
链接地址:https://www.777doc.com/doc-2368327 .html