调试和使用.exe时汇编过程的不同结果

时间:2019-02-24 11:37:46

标签: c# assembly x86-64

因此,我正在编写一个C#项目,并在其中使用Assembly Dll。它有一个程序可以按灰度,基色乘法和加法计算颜色值:

.data
red_ratio real8 0.299   
green_ratio real8 0.587 
blue_ratio real8 0.114  

.code
;-------------------------------------------------------------
;   RCX - red value
;   RDX - green value
;   RBX - blue value
;-------------------------------------------------------------
AsmConvert proc
    cvtsi2sd xmm0, rcx              
    cvtsi2sd xmm1, rdx              
    cvtsi2sd xmm2, rbx              
    mulsd xmm0, red_ratio           
    mulsd xmm1, green_ratio         
    mulsd xmm2, blue_ratio          
    addsd xmm0, xmm1                
    addsd xmm0, xmm2                
    cvtsd2si rax, xmm0              
    ret
    AsmConvert endp
end

当我通过Visual Studio在Debug中运行程序时,Dll可以正常运行,但是当我通过运行.exe文件运行该程序时,上述过程返回的值类似于-1346380602。在连接到进程时,我也无法调试汇编代码,单步执行不像在调试模式下那样。 什么会导致这种行为?该过程是否将参数加载到不同的寄存器中?如何在运行.exe文件并附加调试器时调试汇编代码? 我正在使用VS 2017,并且该项目设置为x64平台

0 个答案:

没有答案