#include<iostream>
using namespace std;
void swap (int *a , int *b )
{
//int temp = *a;
//*a = *b;
//*b = temp;
_asm
{
mov eax , dword ptr [a] ; a 的指针地址--------int *pa = a
mov ecx, dword ptr [eax] ; 得到指针a 指向的值 ,存放到ecx 寄存 器 --------int _a = *pa
mov ebx , dword ptr [b] ; b 的指针地址 -------- int *pb = b
push ebx ; 保存当前b 的指针地址 -------- int * ptemp = pb
mov ebx , dword ptr [ebx] ; 将b 指向的值 ,存放到ebx 寄存器 --------- int _b = *pb
mov dword ptr[eax] , ebx ; 将eax (a) 指向的值 改为 ebx 寄存器的值 --- ---- *a = _b
pop ebx ; 得到上次保存的地的址 ebx(b) ------- pb = pTemp
mov dword ptr[ebx] , ecx ; 将ebx (b) 指向的值 改为ecx 寄存器的值 a --------*b = _a
}
}
void swap3(int *a , int *b)
{
int * temp = a;
a = b ;
b = a;
}
void swap1(int a ,int b)
{
int temp = a ;
a = b ;
b = temp;
}
void swap2(int & a ,int &b)
{
int temp = a;
a = b ;
b = temp;
}
int main()
{
/*
int b = 1;
int c = 2;
*/
/*
int *pb = &b ;
int *pc= &c;
swap3 ( &b, &c );
printf( "%d " ,b );
printf( "%d " ,c );
*/
int c = 10;
int b = 20;
int * pc;
int * pb;
_asm
{
lea eax , [c] ;和这句意思一样 "lea eax , dword ptr [c] | lea eax ,c " 编译器会自动转成前者 ,(得到c 的地址)
mov ebx , [c] ;和这句意思一样 "mov eax , dword ptr [c] | mov eax , c " ,编译器会自动转成后者 ,(得到c 的值 )
lea ebx ,[b]
mov pc ,eax ; 让pc 指向 c 的地址
mov pb , ebx; 让pb 指向b 的地址
}
swap(pc, pb); // 将pc指针的 的地址,和pb 的地址传过去。(是pc 本身的地址,不是pc 指向的地址)
printf ( "%d , %d" , c,b );
return 0;
}
汇编学习:完成swap(交换) 函数的 功能
最新推荐文章于 2023-08-22 10:26:44 发布