假设我有以下代码:
C++ 代码和内联汇编代码如下:
方程式:
X=40+5
Y=3*12 ---> X=45 Y=36
测试
if x < y - print
x+y
else
print x-y
int main()
{
int x=5,y=3,z=0;
x=x+40;
y=y*12;
if(x<y) //45<36 - cond. is NOT met
z=x+y;
else
z=x-y;
cout << "z:" << z << endl; // z=9
x=5,y=3,z=0;
__asm
{
pushad
mov eax,0
mov ebx,0
mov eax,x
add eax,40
mov ebx,y
imul ebx,12
cmp eax,ebx
jb First ;cond is NOT met
jmp Second ;we jump to Second label
First: add eax,ebx
mov z,eax
Second: sub eax,ebx
mov z,eax
popad
}
cout << "z:" << z << endl; //z=9
return 0;
}
两个结果都产生 z=9,但如果我分别在 C++ 和汇编代码中更改 y=-3( int x=5,y=-3,z=0;
和 x=5,y=-3,z=0;
)我必须得到 z=81 ,但是内联汇编的输出是 z=45 ,所以我不能在 ebx 寄存器中正确加载负值(-3)...我的问题是如何在 ebx 中加载 -3,以便得到 45-(-36)=81?
我认为你遇到的问题是 jb
使用了无符号比较;您可能想改用 jl
。
我是一名优秀的程序员,十分优秀!