在 FPU 中如何分别取得一个64bit整数的高低32bit ?

gxqcn 2007-04-18 09:33:03
有多组值在 [0,2^31) 的整数相乘,考虑到用整型算术指令很难充分利用流水线,所以改用 FPU.

问题:在 FPU 中,通过何指令分别获得这个积的高低32bit?(无需立即转换成整型,可仍为浮点,但要“无误差”)
...全文
335 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
应该是:
push edx
push eax
fst qword ptr [esp]
pop eax
pop edx
gxqcn 2007-04-30
  • 打赏
  • 举报
回复
to mydo(侯佩|hopy|K&F):
感谢您的回复(本帖暂不结,以期获得更好的答案)!

可否关注我的另一问题,千分求汇编优化:UInt96x96To192(...) :
http://community.csdn.net/Expert/topic/5505/5505130.xml
大熊猫侯佩 2007-04-18
  • 打赏
  • 举报
回复
你是指分别取浮点运算结果的64bit值的高32bit和低32bit,这个指令肯定有,
查一下intel手册。
大熊猫侯佩 2007-04-18
  • 打赏
  • 举报
回复
手册可以到intel官方下载,如果实在找不到,我可以qq传给你。
大熊猫侯佩 2007-04-18
  • 打赏
  • 举报
回复
手册可以到inter官方下载,如果实在找不到,我可以qq传给你。
gxqcn 2007-04-18
  • 打赏
  • 举报
回复
刚查到,有类似如下方案:

push edx
push eax
fild qword ptr [esp]
pop eax
pop edx


1、不知上述代码可行否?是否通用所有带协处理器的CPU?
2、有没有更简单的方案?
3、我希望仅将高 32bit 弹出来,而原寄存器仅保留低 32bit 值,又该怎么做?
gxqcn 2007-04-18
  • 打赏
  • 举报
回复
谢谢回复!

如果用 mul,则 EDX:EAX 直接即为高低32bit;
用 fmul 后,却不知用何指令将它们分离。

我查了手头的一些零碎 FPU 资料,未解决。
不知“intel手册”从哪里可下载到?(最好是中文版的,上手快点)

还有,我想自学 FPU 汇编,希望大家提供相关链接,谢谢!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧