- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
浮点执行环境的寄存器主要是8个通用数据寄存器和几个专用寄存器,它们是状态寄存器、控制寄存器、标记寄存器等
8个浮点数据寄存器(FPU Data Register),编号FPR0 ~ FPR7。每个浮点寄存器都是80位的,以扩展精度格式存储数据。当其他类型数据压入数据寄存器时,PFU自动转换成扩展精度;相反,数据寄存器的数据取出时,系统也会自动转换成要求的数据类型。
????? 8个浮点数据寄存器组成首尾相接的堆栈,当前栈顶ST(0)指向的FPRx由状态寄存器中TOP字段指明。数据寄存器不采用随机存取,而是按照“后进先出”的堆栈原则工作,并且首尾循环。向数据寄存器传送(Load)数据时就是入栈,堆栈指针TOP先减1,再将数据压入栈顶寄存器;从数据寄存器取出(Store)数据时就是出栈,先将栈顶寄存器数据弹出,再修改堆栈指针使TOP加1。浮点寄存器栈还有首尾循环相连的特点。例如,若当前栈顶TOP=0(即ST(0) = PFR0),那么,入栈操作后就使TOP=7(即使ST(0) = PFR7),数据被压入PFR7。所以,浮点数据寄存器常常被称为浮点数据栈。
????? 为了表明浮点数据寄存器中数据的性质,对应每个FPR寄存器,都有一个2位的标记(Tag)位,这8个标记tag0 ~ tag7组成一个16位的标记寄存器。
?在计算机中,实数的浮点格式(Floating-Point Format)所示,分成指数、有效数字和符号位三个部分。
·? 符号(Sign)——表示数据的正负,在最高有效位(MSB)。负数的符号位为1,正数的符号为0。
·? 指数(Exponent)——也被称为阶码,表示数据以2为底的幂。指数采用偏移码(Biased Exponent)表示,恒为整数。
·? 有效数字(Significand)——表示数据的有效数字,反映数据的精度。有效数字一般采用规格化(Normalized)形式,是一个纯小数,所以也被称为尾数(Mantissa)、小数或分数(Fraction)。
????? 80x87支持三种浮点数据类型:单精度、双精度和扩展精度;它们的长度依次为32、64和80位,即4、8和10个字节;它们遵循美国IEEE(电子电气工程师协会)定义的国际标准浮点格式。
·? 单精度浮点数(32位短实数)——由1位符号、8位指数、23位有效数组成。
·? 双精度浮点数(64位长实数)——由1位符号、11位指数、52位有效数组成。
·? 扩展精度浮点数(80位临时实数)——由1位符号、15位指数、64位有效数组成。很多计算机中并没有80位扩展精度这种数据类型,80x87 FPU主要在内部使用它存贮中间结果,以保证最终数值的精度。
浮点处理单元FPU具有自己的指令系统,共有几十种浮点指令,可以分成传送、算术运算、超越函数、比较、FPU控制等类。浮点指令归属于ESC指令,其前5位的操作码都是11011b,它的指令助记符均以F开头。
1. 浮点传送类指令
??? 浮点数据传送指令完成主存与栈顶st(0)、数据寄存器st(i)与栈顶之间的浮点格式数据的传送。浮点数据寄存器是一个首尾相接的堆栈,所以它的数据传送实际上是对堆栈的操作,有些要改变堆栈指针TOP,即修改当前栈顶。
2. 算术运算类指令
??? 这类浮点指令实现浮点数、16/32位整数的加、减、乘、除运算,它们支持的寻址方式相同。这组指令还包括有关算术运算的指令,例如求绝对值、取整等。
3. 超越函数类指令
??? 浮点指令集中包含有进行三角函数、指数和对数运算的指令。
4. 浮点比较类指令
??? 浮点比较指令比较栈顶数据与指定的源操作数,比较结果通过浮点状态寄存器反映。
5. FPU控制类指令
??? FPU控制类指令用于控制和检测浮点处理单元FPU的状态及操作方式。
采用浮点指令的汇编语言程序格式,与整数指令源程序格式是类似的,但有以下几点需要注意:
·? 使用FPU选择伪指令
????? 由于汇编程序MASM默认只识别8086指令,所以要加上.8087 / .287 / .387等伪指令选择汇编浮点指令;有时,还要加上相应的.238/.386等伪指令。
·? 定义浮点数据
????? 我们知道,数据定义伪指令dd(dword) / dq(qword) / dt(tbyte)依次说明32/64/80位数据;它们可以用于定义单精度、双精度和扩展精度浮点数。为了区别于整数定义,MASM 6.11建议采用REAL4、REAL8、REAL10定义单、双、扩展精度浮点数,但不能出现纯整数(其实,整数后面补个小数点就可以了)。相应的数据属性依次是dword、qword、tbyte。另外,实常数可以用E表示10的幂。
·? 初始化浮点处理单元
????? 每当执行一个新的浮点程序时,第一条指
文档评论(0)