主题:[原创]【C++提高】理解pascal参数传递顺序
理解pascal参数传递顺序
用pascal声明函数后,编译时使用pascal参数传递顺序。该关键字对编译代码产生如下影响:
1.参数按出现顺序,从左至右地进栈。
2.被调用函数在返回调用前负责栈的平衡。
例如下例:
int pascal some_function(int first,int second,int third)
{
int i;
i = first + second + third;
return i;
}
void main()
{
int i = some_function(1,2,3);
}
main()中的函数调用产生下列代码:
mov ax,0001 ;push the first argument
push ax
mov ax,0002 ;push the second argument
push ax
mov ax,0003 ;push the last argument
push ax
push cs ;push cs for a FAR call
call some_function
add sp,006 ;rebalance the stack
...
;stack is already balanced
...
在some_function()结束时,以简单的汇编指令
retf 0006
来清除栈的内容。该指令返回调用者,并调整了六个栈字节。
用pascal声明函数后,编译时使用pascal参数传递顺序。该关键字对编译代码产生如下影响:
1.参数按出现顺序,从左至右地进栈。
2.被调用函数在返回调用前负责栈的平衡。
例如下例:
int pascal some_function(int first,int second,int third)
{
int i;
i = first + second + third;
return i;
}
void main()
{
int i = some_function(1,2,3);
}
main()中的函数调用产生下列代码:
mov ax,0001 ;push the first argument
push ax
mov ax,0002 ;push the second argument
push ax
mov ax,0003 ;push the last argument
push ax
push cs ;push cs for a FAR call
call some_function
add sp,006 ;rebalance the stack
...
;stack is already balanced
...
在some_function()结束时,以简单的汇编指令
retf 0006
来清除栈的内容。该指令返回调用者,并调整了六个栈字节。