我试图找到不常发生崩溃的根本原因。我在win64上运行时在win32上运行代码。我的本机simd代码的编译器是nasm,命令行是
nasm -f win32 -DPREFIX -I./asm/ -o $(IntDir)%(Filename).obj %(FullPath)
原始源代码是
****22fd 66 0F 38 1D C0 pabsw xmm0,xmm0
****2302 66 0F FD E8 paddw xmm5,xmm0
****2306 66 0F 70 45 20 EE pshufd xmm0,xmmword ptr [ebp+20h],0EEh
****230c 66 0F 6C C0 punpcklqdq xmm0,xmm0
但崩溃dmp文件显示错误的字节码(很少发生,一次在Intel i7-2600 CPU @ 3.40GHz上)
****1e9d 66 0F 38 1D C0 pabsw xmm0,xmm0
****1ea2 66 0F FD E8 paddw xmm5,xmm0
****1ea6 66 0F 70 05 20 EE 66 0F 6c pshufd xmm0,xmmword ptr ds:[0F66EE20h],6Ch // crash!
似乎byecode不正确,而windbg!chkimg显示没有错误。 原因是否与REX前缀相关或我应该使用" BITS 32"明确地在.asm文件的头上? 欢迎提出任何建议,谢谢!