用栈传递参数
-
调用者将需要传递给子程序的参数压入栈;
-
子程序从栈中取得参数;
assume cs:code
code segment
start: mov ax,1
push ax
mov ax,3
push ax
call difcube
mov ax,4c00H
int 21H
;----------------------------------------------------
; 子程序: difcube
; 说明: 计算(a-b)^3, a、b为字型数据
; 结果: (dx:ax) = (a-b)^3
;----------------------------------------------------
difcube: push bp
mov bp,sp
mov ax,[bp+4] ; 将栈中a的值送入ax中
sub ax,[bp+6] ; 减栈中b的值
mov bp,ax
mul bp
mul bp
pop bp
ret 4
; ret n
; 用ret n指令将栈顶指针修改为调用前的值
; pop IP
; add sp,n
;----------------------------------------------------
code ends
end start
ret 用ret n指令将栈顶指针修改为压栈操作前的数值.png
https://www.jianshu.com/p/76ed79d0a7a0
C 程序
void add(int,int,int);
main()
{
int a = 1;
int b = 2;
int c = 0;
add(a,b,c);
c++;
}
void add(int a,int b,int c)
{
c = a + b;
}