//几种经典的交换两个数方法.
#include <stdio.h>
void function1(int *a, int *b) { //可能产生溢出错误
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void function2(int *a, int *b) { //位运算 ,不能和自身交换
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
void function3(int *a, int *b) { //最正常的写法
int t;
t = *a;
*a = *b;
*b = t;
}
int main()
{
int a=8,b=9;
printf("Before exchange,a is %d,b is %d \r\n",a,b);
//使用两个寄存器的写法
__asm {
MOV EAX,a
MOV EBX,b
MOV a,EBX
MOV b,EAX
}
printf("After exchange,a is %d,b is %d \r\n",a,b);
//使用一个寄存器的写法
__asm {
MOV EDX,b
XCHG EDX,a
MOV b,EDX
}
printf("After exchange,a is %d,b is %d \r\n",a,b);
//使用一个寄存器的写法
__asm {
MOV ECX,a
}
a=b;
__asm{
MOV b,ECX
}
printf("Before exchange,a is %d,b is %d \r\n",a,b);
function1(&a, &b);
printf("After exchange,a is %d,b is %d \r\n",a,b);
function2(&a, &b);
printf("Before exchange,a is %d,b is %d \r\n",a,b);
function3(&a, &b);
printf("After exchange,a is %d,b is %d \r\n",a,b);
getchar();
return 0;
}