【发布时间】:2011-08-03 23:38:15
【问题描述】:
我刚刚下载了最新版本的 SmartMusic (http://www.smartmusic.com) 并尝试第一次运行它。
问题是,在初始屏幕上有一个未处理的 Win32 异常。
作为一个极客/黑客(在这个词的原始意义上),我当然想知道为什么会这样,所以我打开了我的 Visual Studio 调试器来查看程序集并在调试器下运行它。
未处理的异常是“非法指令”,导致它出错的指令是:cvtdq2ps xmm0,xmm0
现在,我真的不太了解汇编,但这对我来说似乎是一个有效的指令(here 是关于它的一些信息)所以我想知道是否有人知道这是怎么回事以及如何(如果可能的话)修复它.
(我宁愿修复一些东西然后把它搞定,而不是花一个小时在电话上寻求技术支持,然后得到“我们会让别人看一下谢谢你打电话祝你有美好的一天*click*”)
顺便说一句,我已经尝试重新安装它,所以不是这样:)
这是异常前后的代码
je 004DBAEA
mov edx,dword ptr [esp+8]
push edx
call 007806A0
mov eax,dword ptr [esi+4]
mov ecx,dword ptr [eax+3EF0h]
test ecx,ecx
je 004DBAFC
call 007506A0
mov eax,dword ptr [esi+1CCh]
mov ecx,dword ptr [esi+4]
mov edx,dword ptr [ecx]
push eax
mov eax,dword ptr [edx+218h]
call eax
mov ecx,dword ptr [esi+4]
mov edx,dword ptr [ecx]
movd xmm0,dword ptr [esi+1B8h]
mov eax,dword ptr [edx+26Ch]
push ecx
cvtdq2ps xmm0,xmm0 ; this is the instruction it chokes on
movss dword ptr [esp],xmm0
call eax
mov ecx,dword ptr [esi+4]
movss xmm0,dword ptr [esi+1ACh]
movss dword ptr [ecx+4ACh],xmm0
xor eax,eax
cmp dword ptr [esi+1B0h],eax
setne al
cmp eax,1
mov dword ptr [esi+1B0h],eax
mov eax,dword ptr [esi+4]
sete dl
mov byte ptr [eax+0ED2h],dl
mov edx,dword ptr [esi+4]
xor eax,eax
cmp dword ptr [esi+1B4h],eax
setne al
cmp eax,1
【问题讨论】:
-
你想让我们调试一个给定一行汇编的程序吗?
-
如果你愿意,我会在它之前和之后发布前约 20 行。这是一个巨大的程序(从第 0x004DBB24 行抛出异常),所以我不能发布整个内容。主要是我想知道这条指令是否合法
-
cvtdq2ps命令是否允许输入和输出操作数引用同一个寄存器? -
@aroth:是的,
cvtdq2ps可以就地操作。