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

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

问题:在 FPU 中,通过何指令分别获得这个积的高低32bit?(无需立即转换成整型,可仍为浮点,但要“无误差”)
...全文
281 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 汇编,希望大家提供相关链接,谢谢!
说明:不要到处传播,请低调使用,文绿色免安装,精简了多国语言及帮助文件,此软件通过卡巴斯基检测,安全无毒 跑分基准: 1.CPU Queen 是测试CPU的分支预测能力,以及预测错误时所造成的效能影响。对于主频相同的CPU,更短的处理管线和更加准确的预测能力在此项得分上就更高。因此,可以看出并不是主频越高的CPU性能就越好,这项得分能反映CPU的真实性能,让大家在选择CPU时不再盲目追求高主频。 2.CPU PhotoWorxx 着重于CPU的整数运算能力、多核心运算能力并涉及到记忆体频宽的运算能力,利用模拟数位影像处理来进行CPU效能的评估。这项测试需要频繁及大量的记忆体存取操作,所以说这项测试不仅对处理器的要求很高,同时对记忆体速度也有较高的要求。对于在影片处理,如影片压缩、影片转档应用比较多的人,此项得分越高越好。 3.CPU ZLib 是另一项针对CPU整数运算的测试,利用Zlib这个压缩演算法,来计算CPU在处理压缩档案时的能力。如果你比较要求CPU的压缩和解压缩档案能力的话,就可以关心一下这项得分。 4.CPU AES 是一种加密演算测试,用来反映CPU在进行AES加密演算法时的效能。这项测试主要针对一些网路伺服器,比如指令伺服器,它们会进行频繁的加解密操作,那么这项得分的高低就特别重要了。 5.CPU Hash 是一种采用SHA1哈希算法的测试,用来反映CPU整数运算能力。   FPU VP8 是利用谷歌VP8视频编解码器,来测试处理器的视频压缩运算能力。 6.FPU Julia 是利用朱利亚碎形几何运算,来评估CPU的单精度(32bit)浮点运算能力。 7.FPU Mandel 则利用了Mandelbrot碎形几何运算,来评估CPU的双精度(64bit)运算能力。 8.FPU SinJulia 则是利用修改过的朱利亚碎形运算,来评估CPU的延伸精度(80bit)浮点运算能力。 9.FPU Julia、FPU Mandel、FPU SinJulia 这三项都是测试CPU的浮点运算能力,这几项测试可以测量CPU在游戏的表现。
AIDA64是专业测试硬件信息和系统信息的好工具,它针对系统硬件能查探的信息远比CPU-Z等专业硬件检测软件丰富,还支持硬件性能测试,可以得出内存读写速度、CPU超频速度、硬盘读写速度等信息。支持生成系统状态报告,即把所有的信息汇总为文档。 软件特色   效能测试   CPU Queen 是测试CPU的分支预测能力,以及预测错误时所造成的效能影响。对于主频相同的CPU,更短的处理管线和更加准确的预测能力在此项得分上就更高。因此,可以看出并不是主频越高的CPU性能就越好,这项得分能反映CPU的真实性能,让大家在选择CPU时不再盲目追求高主频。   CPU PhotoWorxx 着重于CPU的整数运算能力、多核心运算能力并涉及到记忆体频宽的运算能力,利用模拟数位影像处理来进行CPU效能的评估。这项测试需要频繁及大量的记忆体存取操作,所以说这项测试不仅对处理器的要求很高,同时对记忆体速度也有较高的要求。对于在影片处理,如影片压缩、影片转档应用比较多的人,此项得分越高越好。   CPU ZLib 是另一项针对CPU整数运算的测试,利用Zlib这个压缩演算法,来计算CPU在处理压缩档案时的能力。如果你比较要求CPU的压缩和解压缩档案能力的话,就可以关心一下这项得分。   CPU AES 是一种加密演算测试,用来反映CPU在进行AES加密演算法时的效能。这项测试主要针对一些网路伺服器,比如指令伺服器,它们会进行频繁的加解密操作,那么这项得分的高低就特别重要了。   CPU Hash 是一种采用SHA1哈希算法的测试,用来反映CPU整数运算能力。   FPU VP8 是利用谷歌VP8视频编解码器,来测试处理器的视频压缩运算能力。   FPU Julia 是利用朱利亚碎形几何运算,来评估CPU的单精度(32bit)浮点运算能力。   FPU Mandel 则利用了Mandelbrot碎形几何运算,来评估CPU的双精度(64bit)运算能力。   FPU SinJulia 则是利用修改过的朱利亚碎形运算,来评估CPU的延伸精度(80bit)浮点运算能力。   FPU Julia、FPU Mandel、FPU SinJulia 这三项都是测试CPU的浮点运算能力,这几项测试可以测量CPU在游戏的表现。
AIDA64 Extreme Edition是一款专业的测试软硬件系统信息的工具,软件采用32位的底层硬件扫描,可以支持3400多种主板,支持上千种显卡,支持对并口/串口/USB这些PNP设备的检测,支持对各式各样的处理器的侦测。用户使用软件可以详细的显示出PC每一个方面的信息。AIDA64不仅提供了诸如协助超频,硬件侦错,压力测试和传感器监测等多种功能,而且还可以对处理器,系统内存和磁盘驱动器的性能进行全面评估。目前支持所有的32位和64位Microsoft Windows操作系统,包括对Windows 7和Windows Server 2008 R2的兼容。是用户实现测试软硬件系统信息功能的好帮手。 AIDA64效能测试说明 CPU Queen 是测试CPU的分支预测能力,以及预测错误时所造成的效能影响。对于主频相同的CPU,更短的处理管线和更加准确的预测能力在此项得分上就更高。因此,可以看出并不是主频越高的CPU性能就越好,这项得分能反映CPU的真实性能,让大家在选择CPU时不再盲目追求高主频。 CPU PhotoWorxx 着重于CPU的整数运算能力、多核心运算能力并涉及到记忆体频宽的运算能力,利用模拟数位影像处理来进行CPU效能的评估。这项测试需要频繁及大量的记忆体存取操作,所以说这项测试不仅对处理器的要求很高,同时对记忆体速度也有较高的要求。对于在影片处理,如影片压缩、影片转档应用比较多的人,此项得分越高越好。 CPU ZLib 是另一项针对CPU整数运算的测试,利用Zlib这个压缩演算法,来计算CPU在处理压缩档案时的能力。如果你比较要求CPU的压缩和解压缩档案能力的话,就可以关心一下这项得分。 CPU AES 是一种加密演算测试,用来反映CPU在进行AES加密演算法时的效能。这项测试主要针对一些网路伺服器,比如指令伺服器,它们会进行频繁的加解密操作,那么这项得分的高低就特别重要了。 CPU Hash 是一种采用SHA1哈希算法的测试,用来反映CPU整数运算能力。 FPU VP8 是利用谷歌VP8视频编解码器,来测试处理器的视频压缩运算能力。 FPU Julia 是利用朱利亚碎形几何运算,来评估CPU的单精度(32bit)浮点运算能力。 FPU Mandel 则利用了Mandelbrot碎形几何运算,来评估CPU的双精度(64bit)运算能力。 FPU SinJulia 则是利用修改过的朱利亚碎形运算,来评估CPU的延伸精度(80bit)浮点运算能力。 FPU Julia、FPU Mandel、FPU SinJulia 这三项都是测试CPU的浮点运算能力,这几项测试可以测量CPU在游戏的表现。 AIDA64 Extreme Edition软件截图
启动 您可以采用命令行的形式指定可执行文件、也可以从菜单选择,或直接拖放到OllyDbg,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试,根本不需要安装,可直接在软盘运行! 线程 OllyDbg可以调试多线程程序。因此您可以在多个线程之间转换,挂起、恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就像调用 GETLASTERROR 返回一样)。 调试DLLs 您可以利用OllyDbg调试标准动态链接库(DLLs)。OllyDbg 会自动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函数。 源码级调试 OllyDbg可以识别所有 Borland 和 Microsoft 格式的调试信息。这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态(栈)变量和结构。 代码高亮 OllyDbg的反汇编器可以高亮不同类型的指令(如:跳转、条件跳转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规[general]、FPU/SSE、段/系统寄存器、在栈或内存的操作数,常量)。您可以定制个性化高亮方案。 名称 OllyDbg可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/输出符号及名称。Object 扫描器可以识别库函数。其的名称和注释您可任意添加。如果DLL的某些函数是通过索引号输出的,则您可通过挂接输入库[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量的常量符号名(如:窗口消息、错误代码、位域[bit fields]…)并能够解码为已知的函数调用。 已知函数 OllyDbg可以识别 2300 多个C 和Windows API 的常用函数及其使用的参数。您可以添加描述信息、预定义解码。您还可以在已知函数设定 Log断点并可以对参数进行记录。 函数调用 OllyDbg可以在没有调试信息或函数过程使用非标准的开始部分[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。 配置 有多达百余个选项用来设置OllyDbg 的外观和运行。 数据格式:OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCⅡ、UNICODE、 16/32位有/无符号/HEX整数32/64/80位浮点数、地址、反汇编(MASM、IDEAL或是HLA)、PE文件头或线程数据块。 运行环境 OllyDbg可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT 或是 XP(未经完全测试)操作系统工作,但我们强烈建议您采用300-MHz以上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上的内存。 支持的处理器 OllyDbg 支持所有 80x86、奔腾、MMX、3DNOW!、Athlon扩展指令集、SSE指令集以及相关的数据格式,但是不支持SSE2指令集。

21,458

社区成员

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

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