Intel x87 FPU的使用基础
来源:互联网 发布:centos 系统加固 编辑:程序博客网 时间:2024/05/21 10:02
Intel x87 FPU专门用于执行标量浮点计算,可以对单精度浮点(32位)、双精度浮点(64位)以及扩展双精度浮点(80位)进行计算,并顺从IEEE754标准。
x87 FPU可以工作在32位兼容模式下以及64位模式下,在这两种下,FPU的数据寄存器的个数都一样,只有8个。对x87 FPU的数据寄存器的访问方式与一般的寄存器有所不同,它是栈式访问。你通过FLD指令把外部数据搬到x87 FPU的数据寄存器中时,那么x87 FPU会根据所搬数据的长度(32位、64位、80位)将输入数据分别对待为单精度浮点、双精度浮点和扩展双精度浮点方式,然后统一转为双精度扩展模式放到数据栈顶。因此x87 FPU的数据寄存器长度为80位,并且后续的浮点计算都是基于扩展双精度进行的。
在栈顶的数据寄存器索引为0,那么它下面一个就是1, 然后是2, 以此类推,到栈底则为7。数据输出到存储器时使用FST或FSTP指令,前者仅仅是根据目标存储器的长度(32位、64位、80位)将扩展双精度类型分别转为单精度、双精度、扩展双精度类型,然后输出到指定的存储器位置中。对于FSTP指令,除了将数据搬到外部外,还会执行推出堆栈的操作。另外,FLD和FST以及FSTP还能搬移FPU内部寄存器的数据,FLD的作用是将指定的FPU数据寄存器位置的数据搬移到栈顶寄存器中,而FST则是将栈顶寄存器的数据搬移到指定的FPU数据寄存器的位置。
这边要注意的是,由于80位(10个字节)并不是32位(4个字节)的整数倍,因此数据加载或存储双精度扩展浮点往往是用96位(12个字节)为单位进行,所以“tbyte”所指的就是“twelve bytes”,呵呵呵。这里可以列一下Intel汇编格式的字节、字宽指定修饰词——byte(字节,8位),word(字,16位),dword(双字,32位),qword(四字,64位),tbyte(十二字节,96位),mmword(64位,但只能用于MMX指令集中),xmmword(128位,用于SSE指令集),ymmword(256位,用于最新的AVX指令集)。
下面是一段演示计算sin(10.05) + cos(20.05)的代码,三角函数中的参数都以弧度制表示。
上述内联汇编用AT&T汇编语法格式写的话,如下表示:
- Intel x87 FPU的使用基础
- example x87 FPU Dot Product Computation
- STM32F4XX的FPU使用
- m4的fpu使用
- STM32F4xx FPU和DSP库的使用
- STM32的FPU体验
- FPU
- STM32F4xx FPU/DSP使用注意事项
- 使用Intel编译器(0)基础(1)内联
- X87指令
- STM32F429之使用FPU和DSP
- STM32F4 FPU和DSP库使用
- 使用Intel编译器(0)基础(3)循环相关的优化技术Loop optimization
- 使用intel编译器的指令窗口 intel fortran compiler
- FITC阿姆斯特丹:拿下HYDRA-AODBE的FPU
- 浮点运算单元(FPU)的理解
- opencv2.0的移植 OMAP4460 FPU
- STM32F4xx FPU的设置(转)
- 这里有免费的商业级源码,包含PB、Delphi、VB、VC、.NET和JAVA应用。推荐给大家
- window2003 安装IIS
- 使用 8 位 YUV 格式的视频呈现
- 每天学一点flash(75) ToolTip 提示
- 用Eclipse开发和调试Android应用程序(二)
- Intel x87 FPU的使用基础
- 【转】 不用中间变量,实现两个变量的交换
- 面试经典
- vb6调试程序中的一些意外情况
- oracle--多行转为一行的连接手段
- FOJ 1968 Twinkling lights III
- 制作手机网站
- VirtualBox下给Centos安装增强功能
- 我所积累的20条编程经验