x87相关内容

为什么Intel x87寄存器有80位宽?

为什么使用如此“奇怪”的寄存器大小?是否有任何文档说明为什么不建议对这些寄存器使用64位或128位? 推荐答案 Wikipedia page on the IEEE 754-1985 standard关于80位扩展格式有一个很好的解释: 该标准还建议使用扩展格式来执行 内部计算的精度高于 最终结果,以最大限度地减少舍入误差“ 双精度浮点数以64位表示。您可能需要更多的位以获得更 ..
发布时间:2022-05-08 19:29:41 其他开发

SSE 浮点算术是否可重现?

x87 FPU 以使用内部 80 位精度模式而著称,这通常会导致跨编译器和机器产生意外且不可重现的结果.在我的搜索中在 .NET 上可重现的浮点数学,我发现 .NET(Microsoft 和 Mono)的两个主要实现都发出 SSE 指令,而不是 64 位模式下的 x87. SSE(2) 对 32 位浮点数使用严格的 32 位寄存器,对 64 位浮点数使用严格的 64 位寄存器.通过设置适当的 ..
发布时间:2022-01-09 10:30:03 C#/.NET

信号 NaN 的用处?

我最近阅读了很多关于 IEEE 754 和 x87 架构的书.我正在考虑在我正在处理的一些数字计算代码中使用 NaN 作为“缺失值",我希望使用 signaling NaN 可以让我在这种情况下捕获浮点异常我不想继续处理“缺失值".相反,我会使用 quiet NaN 来允许“缺失值"通过计算传播.但是,根据现有的(非常有限的)文档,信号 NaN 并不像我认为的那样工作. 这是我所知道的总结( ..
发布时间:2021-12-22 18:38:17 C/C++开发

组装8086;浮点数,加,减

我需要一些资源来了解有关浮点数的更多信息,我需要在 emu8086 环境 .... 非常感谢任何帮助 解决方案 据我所知,emu8086不模拟带有 8087 FPU 的机器. 您所做的任何浮点运算都必须是纯软件,不能使用 fld/fadd/fstp 或任何通常的遗留物1 x87 说明. 如果你想在实模式下使用 FP 指令,你最好的选择是像 DOSBox 或 BOCHS 这 ..
发布时间:2021-09-29 19:43:07 其他开发

FXTRACT 指令示例

我用 NASM 写了这段代码: section .datafvar:dd 123.456fsig:dq 0.0fexp:dq 0.0节.textfld dword[fVar]提取物;将有效数放入 ST(0),将指数放入 ST(1)fstp qword[fsig] ;fsig = 1.929fstp qword[fexp] ;fexp = 6 我正在等待找到:fsig = 123456 和 fe ..
发布时间:2021-09-29 19:38:04 其他开发

x87 精度如何影响平方根?

我写了一些代码来测试 fsqrt 函数,结果对我来说并不完全有意义.这是代码(在delphi中): 使用毫米系统;无功兰特:longint=123456789;函数 rng:longint;汇编imul eax,[兰特],$08088405公司mov [rand],eax结尾;函数 int_sqrt(adata:longint):longint;汇编fnstcw 字([esp-2])//mov ..
发布时间:2021-09-29 19:37:16 其他开发

无法连续两次从变量输出协处理器浮点数

下午好!在此示例中,我仅用逗号添加两个数字,将变量保存在 tbyte 中,并在屏幕上连续两次显示相同的变量,但这是我第一次获得 11.1 ,并且第二次 4.667261E-062 .为什么会这样? 还有一个问题,是否可以在 tbyte 中以某种方式按数组类型保存和访问数字?例如,将数字存储在 dd 中,我只能以4的增量进行保存和读取,例如,结果[0] ,结果[4] 等.是否可以将其与 tby ..
发布时间:2021-05-31 20:20:23 其他开发

是否可以通过i387 fsqrt指令获得正确的舍入?

有什么方法可以通过i387 fsqrt指令获得正确的舍入吗?... ... 除了更改x87控制字中的精确度模式-我知道这是可能的,但是这不是一个合理的解决方案,因为它存在令人讨厌的重入类型问题,其中精确度模式将是如果sqrt操作被中断,则错误. 我要处理的问题如下:x87 fsqrt 操作码以fpu寄存器的精度执行正确取整(根据IEEE 754)的平方根运算.假设扩展了(80位)精度. ..
发布时间:2021-05-08 19:56:52 其他开发

指令FYL2XP1

我想知道为什么x86体系结构上的指令 FYL2XP1 能够精确计算数学公式 y ·log 2 ( x +1). 此公式有什么特别之处? 解决方案 y 操作数通常是一个编译时间常数,此刻请忽略 x +1 . 由于 log_b(x)= log_b(2)* log_2(x),因此该指令允许以 x + 1 的任何底数计算对数. 请注意, log_b(2)是一个常数,因为它几乎不需要以 ..
发布时间:2021-05-08 19:56:13 其他开发

像Denormals-Are-Zero(DAZ)这样的异常标志是否会影响相等性的比较?

如果我有2个具有不同位模式的非正规浮点数并比较它们是否相等,结果是否会受到Denormals-Are-Zero标志,Flush-to-Zero标志或常用处理器上的其他标志的影响? 还是这些标志仅影响计算而不影响相等性检查? 解决方案 DAZ(异常 Are 零)会影响读取输入,因此 DAZ会影响比较.根据其符号,所有异常值都按字面意义被视为 -0.0 或 +0.0 . FTZ(刷 ..
发布时间:2021-05-08 19:53:54 其他开发

fstcw汇编操作数类型不匹配

我正在尝试在C语言的嵌入式汇编中使用指定的舍入模式舍入一个输入双精度数.为此,我需要使用"fstcw"抓取FPU控制字,然后更改该字中的位.不幸的是,我在第一行遇到错误: double roundD(double n, RoundingMode roundingMode) { asm("fstcw %%ax \n" ::: "ax"); ..
发布时间:2020-07-14 18:30:51 其他开发

FPTAN示例x86

根据Intel文档,这是FPTAN的作用: 用近似切线替换ST(0)并将1推到FPU堆栈上. 这是我在NASM中编写的代码: section .data fVal: dd 4 fSt0: dq 0.0 fSt1: dq 0.0 section .text fldpi fdiv dword[fVal] ; divide pi by 4 ..
发布时间:2020-07-14 18:30:47 其他开发

如何将ST(0)移至EAX?

Hullo,我正在学习x86 FPU组装,并且我有 有一个简单的问题,我找不到答案: 如何从 ST(0) (FPU的顶部)转移价值 堆栈)到 EAX 吗? 还: 此代码正确吗: ; multiply (dot) two vectors of 3 floats passed by pointers as arg 1 arg 2 ; passings are ok I think, ..
发布时间:2020-07-14 18:30:41 其他开发

FCOM浮点比较失败

我刚刚开始使用32位汇编,我很困惑.我有以下代码: .586 .MODEL FLAT .STACK 4096 .DATA .CODE main PROC finit fldpi fld1 fcom fstsw ax sahf JL jumper nop jumper: nop nop main ENDP END 现在,据我所知,我将pi推入堆栈,然后将1推入堆栈,它应该将p ..
发布时间:2020-07-14 18:30:37 其他开发

为什么x86 FP像无符号整数一样比较集CF,而不使用有符号条件?

《英特尔指令参考》中为COMISD指令提供了以下文档: 比较低位的双精度浮点值 操作数1(第一个操作数)和操作数2(第二个操作数)的四元, 并根据以下内容在EFLAGS寄存器中设置ZF,PF和CF标志 结果(无序,大于,小于或等于). CF的标志点在这里并不清楚,因为它与对无符号整数的算术运算有关.相反,文档关注的是按定义签名的浮点.我进行了一些实验,例如 mov rax, 0x ..
发布时间:2020-07-09 21:16:28 其他开发

x87比SSE的优势

我知道x87具有更高的内部精度,这可能是人们所看到的与SSE操作之间的最大差异.但是我想知道,使用x87还有其他好处吗?我有在任何项目中自动键入-mfpmath=sse的习惯,我想知道我是否还缺少x87 FPU提供的其他功能. 解决方案 对于手写asm,x87的某些指令在SSE指令集中不存在. 所有这些都是三角函数,例如fsin,fcos,fatan,fatan2和一些指数/对数. ..
发布时间:2020-06-15 19:17:05 其他开发

Objdump在编译后的程序集上将fsubrp交换为fsubp吗?

我要将Quake 2的嵌入式Win32程序集移植到GAS.我首先采用了内联程序集,然后将其放入自己的ASM文件中.解决了所有问题,然后开始移植到GAS.我确实知道AT& T与Intel语法(包括用于某些数学运算的浮点寄存器)和其他一些小陷阱的src/dst是相反的,但是当我进行这种编译时,我注意到代码无法正常工作故意的.我使用比较实用工具仔细阅读了数小时,并阅读了组装手册,最后尝试在GAS和MAS ..
发布时间:2020-05-06 09:09:09 其他开发