在下面的代码中,输出在两种情况下保持相同,这要归功于指出我缺少的内容: -
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;
}
答案 0 :(得分:4)
汇编块中的变量没有间接不起作用。相反在寄存器中取地址然后只尝试间接。它宁愿分成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;
}
答案 1 :(得分:-3)
您可以与Xor操作交换 -
void swap(int *x, int *y)
{
*x = *x ^ *y; /* #1 */
*y = *x ^ *y; /* #2 */
*x = *x ^ *y; /* #3 */
}