Visual studio 在汇编程序中调试xmm寄存器

Visual studio 在汇编程序中调试xmm寄存器,visual-studio,debugging,assembly,dll,sse,Visual Studio,Debugging,Assembly,Dll,Sse,我用汇编程序dll库用XMM寄存器用c#编写程序 我在asm中的代码: mov eax, 5 mov ecx, 2 movd xmm0, eax // here movd xmm1, ecx // here addss xmm0,xmm1 // and here no difference movd eax, xmm0 ret 这是我想要的,但有一个小问题,我想解决。 在调试这段代码时,我正在更改eax和exc

我用汇编程序dll库用XMM寄存器用c#编写程序

我在asm中的代码:

mov eax, 5
mov ecx, 2
movd xmm0, eax           // here 
movd xmm1, ecx           // here
addss xmm0,xmm1          // and here no difference 
movd eax, xmm0          
ret 
这是我想要的,但有一个小问题,我想解决。 在调试这段代码时,我正在更改eax和exc寄存器的值,并且在调试期间,它会显示在寄存器窗口中的红色上,因为值已更改。 但如果我更改xmm寄存器的值,它不会以红色显示,并且该寄存器的值仍然是: XMM0=00000000000000000000 XMM1=00000000000000000000 只有在ret之后,当我在c#中调试时,我才能注意到寄存器发生了变化。 XMM0=0000000000000000000000000 7 XMM1=0000000000000000000000002

我的问题是:为什么xmms的值在调试期间不会在寄存器窗口中更改,但程序可以正常工作

正如您所知,12月1日发布的VS RTM更新没有在调试器中正确显示YMM/XMM寄存器的数据。该问题已提请MSFT团队注意,并正在处理中

如果您可以提取日期为2015年12月1日之前的软件版本(更新),则不会显示此特定问题


希望这有帮助…

这取决于你的调试器,你显然忘了提到。你意识到你在使用浮点加法,对吗?您将添加两个非规范浮动:7.0E-45和2.8E-45以获得9.8E-45。这正好有效,但当某些非零位在指数中时,当您将其与大于2^23的整数一起使用时,它将立即中断。也许您的调试器正在使用FP比较和更改阈值?进一步说明-VS 2015.1中的汇编程序不会生成与YMM兼容的代码-例如,vmovdqu ymm0、mem256将只生成与XMM兼容的代码,因此,将只加载128位数据-MSFT已收到通知并已确认-这只是为了防止其他程序员浪费调试时间