- 2
- 0
- 约1.9千字
- 约 5页
- 2018-06-07 发布于天津
- 举报
ctricks4i386平台c函数调边界的栈分配
C++Tricks2.4I386
平台C函数调⽤边界
的栈分配
从fars rfc.wordpr 导⼊
2.4I386平台C函数调⽤边
界的栈分配
当调⽤⼀个函数时,主调函数将参数以声明中相反
的顺序压栈,然后将当前的代码执⾏指针( ip)压栈,然
后跳转到被调函数的⼊⼝点。在被调函数中,通过将 bp
加上⼀个偏移量来访问函数参数,以声明中的顺序(即压
栈的相反顺序)来确定参数偏移量。被调函数返回时,弹
出主调函数压在栈中的代码执⾏指针,跳回主调函数。
再由主调函数恢复到调⽤前的栈。
函数的返回值不同于函数参数,通过寄存器传递。
如果返回值类型可以放⼊32位变量,⽐如int、short、
char、指针等类型,通过 ax寄存器传递。如果返回值类
型是64位变量,如_int64,同过 dx+ ax传递, dx存储
⾼32位, ax存储低32位。如果返回值是浮点类型,如
float和doubl ,通过专⽤的浮点数寄存器栈的栈顶返
回。如果返回值类型是⽤户⾃定义结构,或C++类类型,
通过修改函数签名,以引⽤型参数的形式传回。
同样以最简单的函数为例 :
voidf(){
inti=g(1,2);
}
原创力文档

文档评论(0)