我正在使用 Visual Studio 并从 C++ 调用程序集。我知道当您将参数传递给程序集时,第一个参数在 ECX 中,第二个在 EDX 中。为什么不先将ECX复制到EAX就不能直接比较两个寄存器?
C++:
#include <iostream>
extern "C" int PassingParameters(int a, int b);
int main()
{
std::cout << "The function returned: " << PassingParameters(5, 10) << std::endl;
std::cin.get();
return 0;
}
ASM:直接比较两个寄存器时会给出错误的值。
.code
PassingParameters proc
cmp edx, ecx
jg ReturnEAX
mov eax, edx
ReturnEAX:
ret
PassingParameters endp
end
但是如果我这样写我得到正确的值,并且可以直接比较两个寄存器,这是为什么呢?
.code
PassingParameters proc
mov eax, ecx ; copy ecx to eax.
cmp edx, ecx ; compare ecx and edx directly like above, but this gives the correct value.
jg ReturnEAX
mov eax, edx
ReturnEAX:
ret
PassingParameters endp
end