汇编语言程序设计chapter11-12

上传人:wm****3 文档编号:51647282 上传时间:2018-08-15 格式:PPT 页数:46 大小:892.50KB
返回 下载 相关 举报
汇编语言程序设计chapter11-12_第1页
第1页 / 共46页
汇编语言程序设计chapter11-12_第2页
第2页 / 共46页
汇编语言程序设计chapter11-12_第3页
第3页 / 共46页
汇编语言程序设计chapter11-12_第4页
第4页 / 共46页
汇编语言程序设计chapter11-12_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《汇编语言程序设计chapter11-12》由会员分享,可在线阅读,更多相关《汇编语言程序设计chapter11-12(46页珍藏版)》请在金锄头文库上搜索。

1、汇编语言程序设计 吴 向 军中山大学计算机科学系2003.03.20第11章 数值运算协处理器数值运算协处理器(简称协处理器)是特为与微处理器协同工作而设计的,它是用于加速处理浮点数据的处理部件。对同样的浮点计算,使用该部件进行运算所花的执行时间要比用常规指令编写的最有效代码所花的时间还要少得多。在早期的计算机系统中,该部件是可选部件,但现在一般都把协处理器直接内置在CPU之中。鉴于现在Pentium处理器内部结构的特点,该处理器能同时执行一条协处理器指令和二条整数指令。协处理器主要产品有:8087、80287、80387SX、80387DX和80487SX等。协处理器可处理的数据类型有:16

2、位、32位和64位有符号整数,18位BCD码,32位、64位和80位浮点数。协处理器可处理的运算有:乘法、除法、加法、减法、求平方根、部分正切、部分反正切和对数等运算。第11章 数值运算协处理器有符号数在协处理器中的应用与前面章节中所描述的方法是一致的,它是各种数据类型的基础。这些整数可分为:16位(字型)、32位(短整型)和64位(长整型),其最高位为符号位。11.1 协处理器的数据格式11.1.1 有符号整数第11章 数值运算协处理器一个BCD码数据在内存中占80位,共10个字节。其最高位字节用来表示正负号,其余9个字节,每个字节内含有二个BCD码,所以,一个BCD码数据可表示18个BCD

3、编码。关于BCD码的正负数,有如下规定: 若最高位字节的值为0H,则表示该BCD码的值为正数 若最高位字节的值为80H,则表示该BCD码的值为负数11.1.2 BCD码数据符号字节 BCDBCDBCDBCD第9个字节第1个字节第0个字节在汇编语言环境下,BCD码数据的定义符为:DT。如: .387 BCD1DT1234, -340该说明语句决定了数据在内存中的存储形式如下: 00000000000000001234,80000000000000000340第11章 数值运算协处理器在计算机中,浮点数一般由三部分组成:数值的符号位、阶码和有效数字(以后简称为尾数)。这种浮点数是用科学记数法来表示

4、的,即:浮点数符号位.有效数字2阶码。Intel系列的协处理器支持3种形式的浮点数:短型浮点数(32位)、长型浮点数(64位)和临时浮点数(80位),它们分别对应单精度、双精度和扩展精度浮点数。11.1.3 浮点数一、十进制数转换成浮点数的步骤 1、将十进制数转换成二进制数:整数部分用2来除,小数部分用2来乘; 2、规格化二进制数:改变阶码,使小数点前面仅有第一位有效数字; 3、计算阶码:短型浮点数的阶码加上偏移量7FH长型浮点数的阶码加上偏移量3FFH扩展型浮点数的阶码加上偏移量3FFFH 4、以浮点数据格式存储。把数值的符号位、阶码和尾数合在一起就得到了该数的浮点存储形式。第11章 数值运

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: 最高位为1,其它的数据位是0;正/

6、负无穷: 符号位为0/1,阶码位全为1,有效数字全为0; NAN: 非法的浮点数,阶码位全为1,有效数字不全为0;其中:NAN Not-A-Number。第11章 数值运算协处理器二、浮点数转换成十进制数的步骤该步骤与前面“十进制数转换成浮点数”的步骤是互逆的,其具体步骤如下:1、分割数字的符号、阶码和有效数字;2、将偏移阶码减去偏移,得到真正的阶码;3、把数字写成规格化的二进制数形式;4、把规格化的二进制数改变成非规格化的二进制数;5、把非规格化的二进制数转换成十进制数。例11.2 把浮点数1100000111001001000000000000转换成十进制数。解: 1、把浮点数110000

7、0111001001000000000000分割成三部分,可得:符号位是1,阶码是10000011,尾数是1001001000000000000 2、还原阶码:10000011 01111111100 3、该浮点数的规格化形式:1.100100124(其中前面的“1.”从隐含位而来) 4、该浮点数的非规格化形式:11001.001 5、该浮点数的十进制数为-25.125(因为符号位为1,所以,该数是负数)第11章 数值运算协处理器三、浮点数说明形式在汇编语言中,可用DD、DQ和DT来分别说明单精度、双精度和扩展精度的浮 点数。在MASM 6.0系统中,正浮点数前面不能书写+,但MASM 6.1

8、1系统更正 了这种错误,并提供了新的浮点数说明方法,即:可用REAL4、REAL8和 REAL10来分别代替DD、DQ和DT。在定义浮点数时,要使用伪指令.8087、.287或.387等。例如: .387 data1DD123, -543;定义单精度浮点数 data2REAL43.345E+3;定义单精度浮点数 data3REAL8321.545;定义双精度浮点数 data4REAL10 254.555;定义扩展精度浮点数第11章 数值运算协处理器协处理器,顾名思义,是为与CPU协同工作而设计的,其主要用来提高进行数学和超越函数计算的速度。在80486DX和Pentium处理器中都内置一个与8

9、0387完全兼容的协处理器。CPU执行所有的常规指令,协处理器则执行协处理器指令,它们能同时并行地执行各自的指令。由于现在Pentium处理器内部结构的特点,该处理器能同时执行一条协处理器指令和二条整数指令。11.2 协处理器的结构11.2.1 协处理器的内部结构协处理器80x87的内部结构如下图所示。它可分为二个主要部分:控制部件(CU)和数值执行部件(NEU)。第11章 数值运算协处理器第11章 数值运算协处理器控制部件(CU)把协处理器接到CPU的系统总线上,协处理器和CPU都监视正在执行的指令流。如果当前将要执行的指令是协处理器指令(即:ESCape指令),那么,协处理器会自动执行它,

10、否则,该指令将交给CPU来执行。数值执行部件(NEU)复制执行所有的协处理器指令,它有一个用8个80位的寄存器组成的堆栈,该堆栈用于以扩展精度的浮点数据格式来存放数学指令的操作数和运算结果。在协处理器指令的执行过程中,要么指定该堆栈寄存器中的数据 ,要么使用压栈/出栈机制来从栈顶存放或读取数据。在NEU部件中,还有一些记录协处理器工作状态的寄存器,如:状态寄存器、控制寄存器、标记寄存器和异常指针寄存器等。有关这些寄存器的作用将在后面给予分别介绍。第11章 数值运算协处理器11.2.2 状态寄存器状态寄存器是用来标识协处理器中指令执行情况的,它相当于CPU中的标志位寄存器。80x87协处理器的状

11、态寄存器如下所示。图11.5 80x87协处理器的状态寄存器示意图请见:状态寄存器各标志位(或组合位)的含义。15131211870BC3TOPC2C1C0ESSFPEUEOEZEDEIE第11章 数值运算协处理器可用有关浮点指令读取状态寄存器内容,当其内容传给AX之后,一般可用下面二种方法来检测协处理器的状态。方法1:用TEST指令来检测其相应的状态位。例11.3 检测是否有“0作除数”的错误。FDIVDATA1;用协处理器中堆顶数据去除DATA1FSTSW AX;把状态寄存器的值传送给AXTESTAX, 4;测试第2位,即:检测ZE是否为1JNZDIV_ERR例11.4 检测是否有“非法操

12、作数”的错误。FSQRT;求协处理器中堆顶数据的平方根FSTSW AXTESTAX, 1;测试第0位,即:检测IE是否为1JNZSQRT_ERR第11章 数值运算协处理器方法2:用SAHF指令把AX的低字节传送给CPU的标志位寄存器,然后再用条件转移指令来完成相应的检测。例11.5 检测内存单元的数据与协处理器堆顶数据之间的大小关系。FCOMDATA1;DATA1的值与协处理器堆顶数据进行比较FSTSW AXSAHF;把AX的低字节存入CPU的状态寄存器JEST_EQUAL;具体大小关系见表11.2中的“FCOM”JBST_BELOWJAST_ABOVE第11章 数值运算协处理器11.2.3

13、控制寄存器控制寄存器主要用于浮点数精度选择的控制、四舍五入的控制和无穷大的控制等,其低6位还可用来决定是否屏蔽协处理器的异常。指令FLDCW可用来设置控制寄存器的值。控制寄存器中控制位的分布如下所示,其控制位的含义如下表所列。图11.6 控制寄存器的控制位分布示意图151210870 ICRCPCPMUMOMZMD MIM第11章 数值运算协处理器表11.3 控制寄存器中控制位的含义控制位控制功能说明 IC (无穷大控 制)0投影,假定是无符号无穷; 1仿射,允许正、负无穷RC (舍入控制)00最接近或偶数,01舍入成负无穷, 11舍入成负无穷,10截成0 PC (精度控制)00单精度,01保

14、留,11双精度,10扩 展精度 PM精度错误屏蔽位若屏蔽位的值为1,则 状态寄存器的相应 位被屏蔽。UM下溢出屏蔽位 OM上溢出屏蔽位 ZM除数为0屏蔽位 DM非规格化操作数屏蔽位 IM非法操作屏蔽位第11章 数值运算协处理器11.2.4 标记寄存器标记寄存器用来表明协处理器堆栈中各存储单元内容的状态,也就是说,该寄存器可表明堆栈中的数据是合法的,还是非法的,是无穷,还是0或空等。该标记寄存器的结构如下图所示。图11.7 标记寄存器结构示意图其中,TAG(i)的取值含义:00合法,010,10非法或无穷,11空在协处理器中,查看标记寄存器的方法是使用指令FSTENV、FSAVE或FRSTOR,

15、它们都能使标记寄存器与其它协处理器数据一起转存。15131197531 0TAG(7)TAG(6)TAG(5)TAG(4)TAG(3)TAG(2)TAG(1)TAG(0)第11章 数值运算协处理器协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助忆时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码。在协处理器指令在执行过程中,需要访问内存单元时,CPU会为其形成内存地址。协处理器在协处理器指令期间内利用数据总线来传递数据。80287协处理器利用I/O地址00FAH00FFH来实现其与CPU之间的数据交换,而80387Pentium系列芯片,则是利用I/O地址800

16、000FAH800000FFH来实现这两者之间的数据交换。11.3 协处理器的指令系统第11章 数值运算协处理器协处理器指令的操作符(或助忆符)在命名设计时,遵循了下列规则:1、在操作符后面加上字母P:表示该指令执行完后,还进行一次堆栈弹出操作。如:FADD和FADDP等;2、在操作符后面加上字母R:表示该操作是反模式,它仅限于减法、除法指令。如:FSUB和FSUBR等;正模式 栈顶数据栈顶数据 op 指令操作数,或OPN1OPN1 OPN2反模式 栈顶数据指令操作数 op 栈顶数据,或OPN1OPN2 OPN1假设:栈顶数据为10,变量data的值为1,执行下列指令将有不同的结果。FSUBdata;指令执行后,栈顶数据为9 FSUBR data;指令执行后,栈顶数据为-9 FSUBST, ST(1);指令执行后,ST=ST-ST(1) FSUBR ST, ST(1);指令执行后,ST=ST(1)-ST11.3.1 指令操作符的命名规则第11章 数值运算协处理器3、操作符的第2个字

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号