




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数值运算协处理器数值运算协处理器 数值运算协处理器(简称协处理器)是特为与微处理器协同工作而设计的,它是用于加速处理浮点数据的处理部件。对同样的浮点计算,使用该部件进行运算所花的执行时间要比用常规指令编写的最有效代码所花的时间还要少得多。在早期的计算机系统中,该部件是可选部件,但现在一般都把协处理器直接内置在CPU之中。鉴于现在Pentium处理器内部结构的特点,该处理器能同时执行一条协处理器指令和二条整数指令。 协处理器主要产品有:8087、80287、80387SX、80387DX和80487SX等。 协处理器可处理的数据类型有:16位、32位和64位有符号整数,18位BCD码,32位、6
2、4位和80位浮点数。 协处理器可处理的运算有:乘法、除法、加法、减法、求平方根、部分正切、部分反正切和对数等运算。数值运算协处理器数值运算协处理器有符号数在协处理器中的应用与前面章节中所描述的方法是一致的,它是各种数据类型的基础。这些整数可分为:16位(字型)、32位(短整型)和64位(长整型),其最高位为符号位。11.1 协处理器的数据格式协处理器的数据格式11.1.1 有符号整数有符号整数数值运算协处理器数值运算协处理器 一个BCD码数据在内存中占80位,共10个字节。其最高位字节用来表示正负号,其余9个字节,每个字节内含有二个BCD码,所以,一个BCD码数据可表示18个BCD编码。 关于
3、BCD码的正负数,有如下规定:若最高位字节的值为0H,则表示该BCD码的值为正数若最高位字节的值为80H,则表示该BCD码的值为负数11.1.2 BCD码数据码数据符号字节 BCDBCDBCDBCD第9个字节第1个字节第0个字节 在汇编语言环境下,BCD码数据的定义符为:DT。如:.387BCD1DT1234, -340 该说明语句决定了数据在内存中的存储形式如下:00000000000000001234,80000000000000000340数值运算协处理器数值运算协处理器在计算机中,浮点数一般由三部分组成:数值的符号位、阶码和有效数字(以后简称为尾数)。这种浮点数是用科学记数法来表示的,
4、即:浮点数符号位.有效数字2阶码。Intel系列的协处理器支持3种形式的浮点数:短型浮点数(32位)、长型浮点数(64位)和临时浮点数(80位),它们分别对应单精度、双精度和扩展精度浮点数。11.1.3 浮点数浮点数一、十进制数转换成浮点数的步骤一、十进制数转换成浮点数的步骤1、将十进制数转换成二进制数:整数部分用2来除,小数部分用2来乘;2、规格化二进制数:改变阶码,使小数点前面仅有第一位有效数字;3、计算阶码:短型浮点数的阶码加上偏移量7FH长型浮点数的阶码加上偏移量3FFH扩展型浮点数的阶码加上偏移量3FFFH4、以浮点数据格式存储。把数值的符号位、阶码和尾数合在一起就得到了该数的浮点存
5、储形式。数值运算协处理器数值运算协处理器例11.1 把十进制数100.25转换成协处理器中的浮点数解:1、进制转换:(100.25)10(1100100.01)22、规格化:(1100100.01)21.10010001261.1001000121103、计算阶码:110+01111111100001014、数值的符号位为0,阶码为:10000101,尾数为:1001 0001 0000 0000 0000 000综合上述可得:(100.25)10的浮点形式为:0 10000101 10010001000000000000000几个特殊数据的存储规则: 正0: 所有的数据位都是0; 负0: 最
6、高位为1,其它的数据位是0; 正/负无穷: 符号位为0/1,阶码位全为1,有效数字全为0;NAN: 非法的浮点数,阶码位全为1,有效数字不全为0;其中:NAN Not-A-Number。数值运算协处理器数值运算协处理器二、浮点数转换成十进制数的步骤该步骤与前面“十进制数转换成浮点数”的步骤是互逆的,其具体步骤如下:1、分割数字的符号、阶码和有效数字;2、将偏移阶码减去偏移,得到真正的阶码;3、把数字写成规格化的二进制数形式;4、把规格化的二进制数改变成非规格化的二进制数;5、把非规格化的二进制数转换成十进制数。例11.2 把浮点数1100000111001001000000000000转换成十
7、进制数。解:1、把浮点数1100000111001001000000000000分割成三部分,可得: 符号位是1,阶码是10000011,尾数是10010010000000000002、还原阶码:10000011 011111111003、该浮点数的规格化形式:1.100100124(其中前面的“1.”从隐含位而来)4、该浮点数的非规格化形式:11001.0015、该浮点数的十进制数为-25.125(因为符号位为1,所以,该数是负数)数值运算协处理器数值运算协处理器三、浮点数说明形式在汇编语言中,可用DD、DQ和DT来分别说明单精度、双精度和扩展精度的浮点数。在MASM 6.0系统中,正浮点数
8、前面不能书写+,但MASM 6.11系统更正了这种错误,并提供了新的浮点数说明方法,即:可用REAL4、REAL8和REAL10来分别代替DD、DQ和DT。在定义浮点数时,要使用伪指令.8087、.287或.387等。例如:.387data1DD123, -543;定义单精度浮点数data2REAL43.345E+3;定义单精度浮点数data3REAL8321.545;定义双精度浮点数data4REAL10 254.555;定义扩展精度浮点数数值运算协处理器数值运算协处理器协处理器,顾名思义,是为与CPU协同工作而设计的,其主要用来提高进行数学和超越函数计算的速度。在80486DX和Penti
9、um处理器中都内置一个与80387完全兼容的协处理器。CPU执行所有的常规指令,协处理器则执行协处理器指令,它们能同时并行地执行各自的指令。由于现在Pentium处理器内部结构的特点,该处理器能同时执行一条协处理器指令和二条整数指令。11.2 协处理器的结构协处理器的结构11.2.1 协处理器的内部结构协处理器的内部结构协处理器80 x87的内部结构如下图所示。它可分为二个主要部分:控制部件(CU)和数值执行部件(NEU)。数值运算协处理器数值运算协处理器数值运算协处理器数值运算协处理器控制部件(CU)把协处理器接到CPU的系统总线上,协处理器和CPU都监视正在执行的指令流。如果当前将要执行的
10、指令是协处理器指令(即:ESCape指令),那么,协处理器会自动执行它,否则,该指令将交给CPU来执行。数值执行部件(NEU)复制执行所有的协处理器指令,它有一个用8个80位的寄存器组成的堆栈,该堆栈用于以扩展精度的浮点数据格式来存放数学指令的操作数和运算结果。在协处理器指令的执行过程中,要么指定该堆栈寄存器中的数据,要么使用压栈/出栈机制来从栈顶存放或读取数据。在NEU部件中,还有一些记录协处理器工作状态的寄存器,如:状态寄存器、控制寄存器、标记寄存器和异常指针寄存器等。有关这些寄存器的作用将在后面给予分别介绍。数值运算协处理器数值运算协处理器11.2.2 状态寄存器状态寄存器状态寄存器是用
11、来标识协处理器中指令执行情况的,它相当于CPU中的标志位寄存器。80 x87协处理器的状态寄存器如下所示。图11.5 80 x87协处理器的状态寄存器示意图请见:状态寄存器各标志位(或组合位)的含义C3TOPC2C1C0ESSFPEUEOEZEDEIE数值运算协处理器数值运算协处理器可用有关浮点指令读取状态寄存器内容,当其内容传给AX之后,一般可用下面二种方法来检测协处理器的状态。方法1:用TEST指令来检测其相应的状态位。例11.3 检测是否有“0作除数”的错误。FDIVDATA1;用协处理器中堆顶数据去除DATA1FSTSW AX;把状态寄存器的值传送给AXTES
12、TAX, 4;测试第2位,即:检测ZE是否为1JNZDIV_ERR例11.4 检测是否有“非法操作数”的错误。FSQRT;求协处理器中堆顶数据的平方根FSTSW AXTESTAX, 1;测试第0位,即:检测IE是否为1JNZSQRT_ERR数值运算协处理器数值运算协处理器方法2:用SAHF指令把AX的低字节传送给CPU的标志位寄存器,然后再用条件转移指令来完成相应的检测。例11.5 检测内存单元的数据与协处理器堆顶数据之间的大小关系。FCOMDATA1;DATA1的值与协处理器堆顶数据进行比较FSTSW AXSAHF;把AX的低字节存入CPU的状态寄存器JEST_EQUAL;具体大小关系见表1
13、1.2中的“FCOM”JBST_BELOWJAST_ABOVE数值运算协处理器数值运算协处理器11.2.3 控制寄存器控制寄存器控制寄存器主要用于浮点数精度选择的控制、四舍五入的控制和无穷大的控制等,其低6位还可用来决定是否屏蔽协处理器的异常。指令FLDCW可用来设置控制寄存器的值。控制寄存器中控制位的分布如下所示,其控制位的含义如下表所列。图11.6 控制寄存器的控制位分布示意图151210870ICRCPCPMUMOMZMDMIM数值运算协处理器数值运算协处理器表11.3 控制寄存器中控制位的含义控制位控制功能说明IC(无穷大控制)0投影,假定是无符号无穷;1仿射,允许正、负无穷RC(舍入
14、控制)00最接近或偶数,01舍入成负无穷,11舍入成负无穷,10截成0PC(精度控制)00单精度,01保留,11双精度,10扩展精度PM精度错误屏蔽位若屏蔽位的值为1,则状态寄存器的相应位被屏蔽。UM下溢出屏蔽位OM上溢出屏蔽位ZM除数为0屏蔽位DM非规格化操作数屏蔽位IM非法操作屏蔽位数值运算协处理器数值运算协处理器11.2.4 标记寄存器标记寄存器标记寄存器用来表明协处理器堆栈中各存储单元内容的状态,也就是说,该寄存器可表明堆栈中的数据是合法的,还是非法的,是无穷,还是0或空等。该标记寄存器的结构如下图所示。图11.7 标记寄存器结构示意图其中,TAG(i)的取值含义:00合法,010,1
15、0非法或无穷,11空在协处理器中,查看标记寄存器的方法是使用指令FSTENV、FSAVE或FRSTOR,它们都能使标记寄存器与其它协处理器数据一起转存0TAG(7)TAG(6)TAG(5)TAG(4)TAG(3)TAG(2)TAG(1)TAG(0)数值运算协处理器数值运算协处理器协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助忆时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。在协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。协处理器在协处理器指令期间内利用数据总线来传递数据。80287协处理器利用I/O地址0
16、0FAH00FFH来实现其与CPU之间的数据交换,而80387Pentium系列芯片,则是利用I/O地址800000FAH800000FFH来实现这两者之间的数据交换。11.3 协处理器的指令系统协处理器的指令系统数值运算协处理器数值运算协处理器协处理器指令的操作符(或助忆符)在命名设计时,遵循了下列规则:1、在操作符后面加上字母P:表示该指令执行完后,还进行一次堆栈弹出操作。如:FADD和FADDP等;2、在操作符后面加上字母R:表示该操作是反模式,它仅限于减法、除法指令。如:FSUB和FSUBR等;正模式 栈顶数据栈顶数据 op 指令操作数,或OPN1OPN1 OPN2反模式 栈顶数据指令
17、操作数 op 栈顶数据,或OPN1OPN2 OPN1假设:栈顶数据为10,变量data的值为1,执行下列指令将有不同的结果。FSUBdata;指令执行后,栈顶数据为9FSUBR data;指令执行后,栈顶数据为-9FSUBST, ST(1);指令执行后,ST=ST-ST(1)FSUBR ST, ST(1);指令执行后,ST=ST(1)-ST11.3.1 指令操作符的命名规则指令操作符的命名规则数值运算协处理器数值运算协处理器3、操作符的第2个字母是I:表示内存中数据是整数。它对加、减、乘除指令都有效。例如:FADDdata浮点数加法;FIADDdata整数加法,它表示内存单元data是一个整数
18、,把该整数加到栈顶的浮点数上。4、操作符的第2个字母是N:表示在指令执行之前检查非屏蔽数值性错误。如:FSAVE和FNSAVE等,前者称为等待形式(wait version),后者称为非等待形式(no-wait version)。在使用.8087伪指令情况下,汇编程序会在等待形式的指令前面加上指令WAIT,而在非等待形式的指令前面加上空操作指令NOP。理解了上述操作符命名规则,就能很容易地区分同类指令之间的差异。数值运算协处理器数值运算协处理器为了满足协处理器和CPU之间进行数据交流的需求,就需要实现内存单元和协处理器之间进行数据传送的指令。协处理器的指令系统中有三大类数据传送指令:BCD传送
19、指令、浮点数传送和整数传送指令。一、BCD传送指令1、FBLD指令格式:FBLD MemBCD(*)指令的功能:将内存中的BCD数据压入协处理器的堆栈中;2、FBSTP指令格式:FBSTP MemBCD指令的功能:将协处理器中的BCD数据存入内存,并进行堆栈的弹出操作。例如:.387data1DT123, -543data2DT2.5FBLDdata1;把BCD数据123压进栈FBSTP data2;把当前堆顶数据弹出,并传送给BCD型的内参单元(*) MemType是指定数据类型Type的内存单元,如:MemBCD是BCD类型的存储单元。11.3.2 数据传送指令数据传送指令数值运算协处理器
20、数值运算协处理器二、浮点数传送指令1、FLD指令格式:FLD STReg(*)/MemReal指令的功能:将浮点数据压入协处理器的堆栈中。当进行内存单元内容压栈时,系统会自动决定传送数据的精度。比如:用DD或REAL4定义的内存单元数值是单精度数等。例如:.387data1DD123, -543data2REAL8-321.5data3REAL10 2.5FLDdata1;压一个单精度数据进栈FLDdata2;压一个双精度数据进栈FLDST(0);把堆栈寄存器ST(0)的值再压进栈FLDdata3;压一个扩展精度数据进栈(*) STReg是协处理器堆栈寄存器ST(0)ST(7)。数值运算协处理
21、器数值运算协处理器2、FST指令格式:FST STReg/MemReal指令的功能:将协处理器堆栈栈顶的数据传送到目标操作数中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成相应精度的数据。3、FSTP指令格式:FSTP STReg/MemReal该指令的功能与FST相类似,所不同的是:指令FST执行完后,不进行堆栈的弹出操作,即:堆栈不发生变化,而指令FSTP执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。请见前面的指令操作符命名规则的说明。4、FXCH指令格式:FXCH STReg指令的功能:将指定的寄存器中的浮点数与堆顶浮点数进行交换。如果不指定操作数,
22、那么,默认ST和ST(1)二者之间交换数据。例如:FXCH ST(2)栈顶数据与堆栈寄存器ST(2)进行数据交换。数值运算协处理器数值运算协处理器三、整数传送指令1、FILD指令格式:FILD MemInt其中:Mem是定义为整型数据类型的内存单元,但不能是用DB定义的存储单元。2、FIST/FISTP指令格式:FIST MemIntFISTP MemInt其中:Mem是定义为整型数据类型的内存单元,但不能是用DB定义的存储单元。指令的功能:将协处理器堆栈栈顶的数据传送到目标存储单元中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成整型数据。指令FIST和FIST
23、P的区别在于堆栈操作,详细请见11.3.1中的命名规则说明。数值运算协处理器数值运算协处理器在协处理器的指令系统中,有关数学运算指令有:加法指令、减法指令、乘法指令、除法指令和求平方根指令等。涉及数学运算的指令有比例运算、舍入运算、求绝对值运算和改变数值符号运算等指令。1、加法指令指令格式:FADDSTReg1, STReg2(*)FADDMemRealFADDPSTReg, STFIADDMemInt指令FADD含有二个隐含操作数ST(1)和ST,其运算功能是:从堆栈中弹出这二个操作数,然后把计算的“和”压入堆栈,即:STST(1)+ST。指令“FADD MemReal”的功能:STST+M
24、emReal。指令“FADDP STReg, ST”的功能:STRegSTReg+ST,并弹出堆栈的栈顶。指令“FIADD MemInt”的功能:STST+MemInt(*) 在此指令格式下,如果同时指定了二个堆栈寄存器,那么,其中一个寄存器必须是ST。其它指令的同类格式与此同理。11.3.3 数学运算指令数学运算指令数值运算协处理器数值运算协处理器2、减法指令指令格式:FSUBSTReg1, STReg2FSUBMemRealFSUBPSTReg, STFISUBMemIntFSUBRSTReg1, STReg2;后面指令是前面的反模式形式FSUBRMemRealFSUBRPSTReg,ST
25、FISUBRMemInt指令FSUB含有二个隐含操作数ST(1)和ST,其运算功能是:从堆栈中弹出这二个操作数,然后把计算的“差”压入堆栈,即:STST(1)-ST。指令“FSUB MemReal”的功能:STST-MemReal。指令“FSUBP STReg, ST”的功能:STRegSTReg-ST,并弹出堆栈的栈顶。指令“FISUB MemInt”的功能:STST-MemInt反模式的四条指令的功能在此从略,请参阅11.3.1中的有关说明。数值运算协处理器数值运算协处理器3、乘法指令指令格式:FMULSTReg1, STReg2FMULMemRealFMULP STReg, STFIMU
26、LMemInt4、除法指令指令格式:FDIV STReg1, STReg2FDIV MemRealFDIVPSTReg, STFIDIV MemIntFDIVRSTReg1, STReg2;后面指令是前面指令的反模式形式FDIVRMemRealFDIVRP STReg, STFIDIVRMemInt5、其它数学运算指令在协处理器中,除了完成具体的数学运算指令外,还设置了若干个与数学运算有关的运算指令。具体的运算指令及其功能描述如表11.4所列。数值运算协处理器数值运算协处理器例如:.387word1DW20data1REAL88data2REAL8-2data3REAL8-12FLDdata1
27、;本例只是显示指令的使用方法,无具体的实际功能FLDdata2FLDdata3FDIVST(2), STFDIVdata1FDIVPST(2), STFIDIVword1数值运算协处理器数值运算协处理器指令格式指令的功能FSQRT求栈顶数据的平方根。如果对负数求其平方根,则会发生错误,并可通过检测状态寄存器的标志位IE来确定。FSCALE将ST(1)中的数(转换成整数)加上ST的阶码,该指令能快速完成乘/除2n的运算。ST(1)中的数必须在2-15到215之间。FPREM/FPREM1STST%ST(1),80387及其以后协处理器支持FPREM1。FRNDINT对栈顶数据进行舍入运算,使之转
28、换成整数。FXTRACT将栈顶数据分成二部分:无偏阶码和尾数。尾数存入栈顶,无偏阶码存入ST(1)。它常用将浮点数转换成小数形式打印输出。FABSST|ST|,即:求栈顶数据的绝对值。FCHSST-ST,即:改变栈顶数据的符号。数值运算协处理器数值运算协处理器使用比较指令是将栈顶中的数与其它操作数进行比较,比较结果存于状态寄存器的条件编码位C3C0处表。具体的比较运算指令及其功能描述如表11.5所列。11.3.4 比较运算指令比较运算指令指令格式指令的功能FCOM将栈顶数据与另一个操作数进行比较,该操作数可以存储在堆栈寄存器中,也可存储在内存中。当在指令中不指定操作数时,其默认的操作数是ST和
29、ST(1)。FCOMP/FCOMPP此指令的比较功能与FCOM相一致,所不同的是指出从堆栈中弹出一个,还是二个数据。FICOM MemIntFICOMP MemInt栈顶数据与内存单元进行整数比较。指令FICOMP还要弹出栈顶数据。FUCOM STRegFUCOMP STRegFUCOMPP反向比较,其功能与上面同类指令类似。FTST栈顶数据与0进行比较。比较结果对条件编码位的影响如表11.2所示。FXAM检测栈顶数据是正数、负数,还是规格化数。比较结果对条件编码位的影响如表11.2所示。数值运算协处理器数值运算协处理器11.3.5 超越函数运算指令超越函数运算指令指令格式指令的功能FPTAN
30、求部分Y/X=tan,角度存于栈顶,其结果:ST=X,ST(1)=Y在8087-80287中,角度的范围上是0/4;在80387以后的协处理器中,角度的范围上是0263;如果交度超过其取值范围,则状态IE标定为非法错误。FPATAN求部分反正切值=arctan(X/Y),X取自ST,Y取自ST(1);其中:X和Y必须满足:0YX;指令执行时进行一次弹出操作,结果存入栈顶。F2XM1求2X-1的值,X取自栈顶,结果也存放栈顶,X的取值范围:-11。FCOS或FSIN求栈顶ST中角度的正弦或余弦值,ST中存放的是弧度。运算结果也存于ST。FSINCOS求栈顶ST中角度的正弦和余弦值,ST中存放的是
31、弧度。运算结果:ST=正弦值,ST(1)=余弦值。FYL2X计算Ylog2X的值,X=ST,Y=ST(1),其中:X0。结果存入有一个弹出操作后的栈顶。FYL2XP1计算Ylog2(X+1)的值,X=ST,Y=ST(1),其中:0X1-2-0.5。结果存入有一个弹出操作后的栈顶。数值运算协处理器数值运算协处理器11.3.6 常数操作指令常数操作指令为了计算的方便,协处理器提供了几个将常用常数压栈的指令。表11.7 常数压栈指令及其常数值指令格式指令的功能FLDZST=+0.0FLD1ST=+1.0FLDPIST=FLDL2EST=log2eFLDL2TST= log210FLDLG2ST= log102FLDLN2ST= loge2数值运算协处理器数值运算协处理器11.3.7 协处理器控制
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内部承包建筑合同范例
- 2025年组织行为学与人力资源管理考试试卷及答案
- 2025年新闻网文案写作课程考试试题及答案
- 农村粮仓销售合同范例
- 2025年家族企业管理与继承考试试题及答案
- 公司消防管道合同范例
- 二手烘干设备买卖合同范例
- 幼儿园交通工具设计要点
- 买卖分期贷款合同范例
- 2025年心理健康评估师资格考试试题及答案明确
- 战略管理教学ppt课件(完整版)
- 艾滋病感染孕产妇所生儿童艾滋病早期诊断与抗体检测流程图
- 统筹监管金融基础设施工作方案
- 云南锂电池项目可行性研究报告
- 博物馆学概论:第十讲 数字博物馆
- 危险化学品企业安全标准化规范课件
- 客户退货处理流程图
- 中国民主同盟入盟申请表(样表)
- 毕业设计(论文)-轴向柱塞泵设计(含全套CAD图纸)
- 公安机关通用告知书模板
- 山东省初中学业水平考试信息技术学科命题要求
评论
0/150
提交评论