gpt4 book ai didi

c++ - 无法交换值

转载 作者:可可西里 更新时间:2023-11-01 17:59:41 30 4
gpt4 key购买 nike

在下面的代码中,两种情况下的输出都保持不变,感谢指出我遗漏了什么:-

Before Swap:-
a=10 b=512
After Swap:-
a=10 b=512

代码如下,编译运行没有问题:-

#include <stdio.h>
int swap(int* x, int* y)
{
if(x != y)
{
_asm
{
mov eax,[x]; x into eax
mov ebx,[y]
mov [x],ebx;swapping now
mov [y],eax
}
}
return 0;
}

int main () {
int a=10,b=512;
printf("Before Swap:- \na=%d\t b=%d\n",a,b);
swap(&a,&b);
printf("After Swap:- \na=%d\t b=%d",a,b);//Value remains same
return 0;
}

最佳答案

汇编 block 内的变量没有间接寻址是行不通的。取而代之的是在寄存器中获取地址,然后只尝试间接寻址。它宁愿分解成类似mov eax, DWORD PTR _x$[ebp]

#include <stdio.h>
int swap(int* x, int* y)
{
if(x != y)
{
_asm
{
mov eax,x
mov ebx,y
mov ecx,[ebx]
xchg ecx,[eax]
xchg [ebx],ecx
}
}
return 0;
}

int main () {
int a=10,b=512;
printf("Before Swap:- \na=%d\t b=%d\n",a,b);
swap(&a,&b);
printf("After Swap:- \na=%d\t b=%d",a,b);
getchar();
return 0;
}

关于c++ - 无法交换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237946/

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