C嵌入汇编实现两个整形的交换

yaoxuezhu312 2011-06-29 11:31:42
#include <iostream>

//数据的交换
void exchange(int&, int& );

int main()
{

int m = 5;
int n = 6;
exchange(m, n);

}

void exchange(int& ldata, int& rdata)
{

__asm
{
push ldata
push rdata

pop ldata
pop rdata
}



return;
}

各位大哥大姐,不知道到底是出了什么情况,在函数里实现了转换,但在外面又复原了...
怎样实现m和n的转换(在使用汇编的情况下)?
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoxuezhu312 2011-07-05
  • 打赏
  • 举报
回复
结贴,问题已解决,分享一下:

__declspec(naked) void exchange(int &A, int &B) // C的话换成指针
{
__asm{
mov ecx,[esp+4] // &A
mov edx,[esp+8] // &B
xchg eax,[ecx]
xchg eax,[edx]
xchg eax,[ecx]
ret
}
}
yaoxuezhu312 2011-07-05
  • 打赏
  • 举报
回复
引用的话是不需要那样的。
只有指针才需要那样传递(void exchange(int* , int *))。


[Quote=引用 4 楼 lengwuqin 的回复:]
说一下,你在主函数调用的时候,传值传错了,exchange(m, n);应为exchange(&m, &n);
自己看看函数的定义就知道了。
[/Quote]
lengwuqin 2011-07-04
  • 打赏
  • 举报
回复
说一下,你在主函数调用的时候,传值传错了,exchange(m, n);应为exchange(&m, &n);
自己看看函数的定义就知道了。
yaoxuezhu312 2011-07-04
  • 打赏
  • 举报
回复
继续顶...
MakeEveryDayUp 2011-06-30
  • 打赏
  • 举报
回复
exchange(&m,&n);传变量地址进去!进栈时候要确定进栈时候进栈的是改地址的数据!
yaoxuezhu312 2011-06-29
  • 打赏
  • 举报
回复
在线等待。自己顶个

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧