assembly - FILD 和 FSTP 如何工作?

标签 assembly floating-point x86 stack fpu

我在网上搜索过,到处都写着:FILD 转换 an 的补码 整数转换为 80 位扩展精度 float ,并将其放在 float 堆栈的顶部。 因此,我有一个程序可以做到这一点,但得到的结果是出乎意料的。

示例: 我的内存中有数字0xFF20A810(假设在0x40000000) 字段 [0x40000000] fstp [0x40010000]

我得到的结果是0x41EFE41502000000。数字是如何换算的? 我正在使用这个的crackme,但我找不到解决方案。

谢谢

最佳答案

0x41EFE41502000000 在 double 下是 4280330256.0。 0xFF20A810 是无符号整数 4280330256。

所以我想你不小心将它加载为 qword,并且很幸运(其他字节为零)。

关于assembly - FILD 和 FSTP 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864073/

相关文章:

c - 进入main之前的四个执行步骤是什么?

c - 在内联 x86 程序集中是否未定义整数溢出?

c++ - 如何在 C++ 中定义自定义浮点格式(类型)?

x86 - ARM 架构与 x86 有何不同?

assembly - 将 1 字节立即值添加到 2 字节内存位置

存储在 eax 寄存器中的 c 变量

linux - 使用汇编在 Linux 终端中清除屏幕?

assembly - 什么是机器周期?

java - 什么是 float 组?

c - 32位浮点除法并没有我想象的那么慢