【发布时间】:2012-09-02 16:57:03
【问题描述】:
在下面的代码中,两种情况下的输出都保持不变,感谢您指出我遗漏了什么:-
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;
}
【问题讨论】:
-
你为什么不在
<algorithm>中使用std::swap -
检查 x != y 的成本可能不仅仅是交换两个相同的值。如果这是学习汇编代码的练习,很好;但编译器会尽你所能(事实上,更好——汇编代码中有一条不需要的指令)。
标签: c++ c visual-studio-2010 assembly