这是一个有效的x86汇编指令吗?

时间:2011-08-03 23:38:16

标签: exception binary x86

我刚刚下载了最新版本的SmartMusic(http://www.smartmusic.com),并尝试首次运行它。
问题是,启动屏幕上有一个未处理的Win32异常 作为一个极客/黑客(原来的意思)我当然想知道为什么会这样,所以我打开我的Visual Studio调试器来看看程序集并在调试器下运行它。 /> 未处理的例外是“非法指令”,而tri它的指令是:
cvtdq2ps xmm0,xmm0
现在,我真的不太了解汇编,但这对我来说似乎是一个有效的指令(here是关于它的一些信息)所以我想知道是否有人知道这是怎么回事以及如何(如果可能的话)解决它。
(我宁愿修理一些东西,只需花一个小时的时间来通过电话获得技术支持就可以得到它“我们会有人看一下它,感谢你有一个美好的一天*点击{{1 }}“)
顺便说一句,我已经尝试重新安装它,所以它不是那个:)

这是异常之前和之后的代码

*

2 个答案:

答案 0 :(得分:6)

您是否在一台非常旧的机器上运行(2005年以前)? cvtdq2ps需要SSE2;我很难想象有人还在使用缺乏SSE2支持的硬件,但这是可能的。

修改:是的,这就是问题所在。 Athlon XP系列有SSE,但没有SSE2,这是非法指令的原因。我想是时候进行现代化了。有越来越多的软件需要SSE2和SSE3。

答案 1 :(得分:0)

您链接的页面上列出了为什么这个生成exc的所有变体。 SIGILL是#UD

  

#UD 如果未屏蔽的SIMD浮点异常且CR4.OSXM MEXCPT [bit 10] = 0.如果CR0.EM [bit 2] = 1.如果CR4.OSFXSR [bit 9 ] = 0.如果CPUID.01H:EDX.SSE2 [bit 26] = 0.如果使用LOCK前缀。

其他可能的原因是处理器无法解码指令(在2003年之前不支持SSE2; Pentium3或AMD)。更好的手册列出了这个:http://www.jaist.ac.jp/iscenter-new/mpc/altix/altixdata/opt/intel/vtune/doc/users_guide/mergedProjects/analyzer_ec/mergedProjects/reference_olh/mergedProjects/instructions/instruct32_hh/vc48.htm

  

#UD - 如果未屏蔽的SIMD浮点异常和CR4中的OSXMMEXCPT为0.如果设置了CR0中的EM。如果CR4中的OSFXSR为0.如果CPUID功能标志SSE2为0。