![]() |
#2
wp2319572014-08-12 14:24
|

void swap(int*,int*)
{
_asm
{
mov ebx,dword ptr [ebp+0xc]; //令ebx=参数2的地址(传址)
mov edx,[ebx]; //令edx=参数2的值(传值)
push edx; //因为不使用临时变量 所以寄存器不够用
//因为下面要改变这个址和值 所以这3条语句起到一个备份的作用
mov ecx,dword ptr [ebp+0x8]; //ecx=参数1的地址
mov eax,[ecx]; //eax=参数1的值
mov edx,dword ptr [ebp+0xc]; //edx=参数2的地址
mov [edx],eax; //edx的指向值由eax代替 完成交换第一步
pop edx; //取出edx即参数2的值
mov ecx,dword ptr [ebp+0x8]; //ecx=参数1的地址
mov [ecx],edx; //ecx的指向值由edx代替 完成交换第二步
}
}