gpt4 book ai didi

c++ - 我如何在寄存器中加载负值 - 汇编语言

转载 作者:太空宇宙 更新时间:2023-11-04 15:48:01 29 4
gpt4 key购买 nike

假设我有以下代码:

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

关于c++ - 我如何在寄存器中加载负值 - 汇编语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531432/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com