+ -
当前位置:首页 → 问答吧 → 关于传参数

关于传参数

时间:2011-03-18

来源:互联网

extern "C" dword get(dword p1,dword* p2,dword* p2);
这个函数用汇编写的,请问参数在汇编中怎么处理
另外64bit 汇编与32bit汇编一样吗?

作者: lfs09   发布时间: 2011-03-18

C里的函数都是通过栈来传递参数的。 
也许是这样的一个过程吧

push ebp ;保存基址指针
mov ebp,esp ;堆栈基址
sub esp,12 ;创建能容纳入口参数的空间
mov dword ptr [ebp-4],p1 ;参数1
mov dword ptr [ebp-8],p2 ;参数2
mov dword ptr [ebp-12],p2;参数3
...
mov esp,ebp ;删除局部变量
pop ebp ;恢复基址指针

可以用C写,用汇编看一看

作者: masmaster   发布时间: 2011-03-18

问题是,不知道怎么把c编译成汇编代码....

作者: lfs09   发布时间: 2011-03-18

引用 1 楼 masmaster 的回复:
C里的函数都是通过栈来传递参数的。
也许是这样的一个过程吧

push ebp ;保存基址指针
mov ebp,esp ;堆栈基址
sub esp,12 ;创建能容纳入口参数的空间
mov dword ptr [ebp-4],p1 ;参数1
mov dword ptr [ebp-8],p2 ;参数2
mov dword ptr [ebp-12],p2;参数3
...
mov ……

p1 p2 p3 是在c的函数申明中用到的
汇编中没有吧,比如
mov eax,p1
mov ebx,p2
mov ecx,p3
以上三行 p1 p2 p3怎么写

作者: lfs09   发布时间: 2011-03-18