因此,我正在编写一个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平台