[100][汇编语言]附注4 用栈传递参数

用栈传递参数

  • 调用者将需要传递给子程序参数压入
  • 子程序中取得参数
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
[100][汇编语言]附注4 用栈传递参数_第1张图片
CALL指令会将当前的IP值压入栈.png

[100][汇编语言]附注4 用栈传递参数_第2张图片
在栈中分别取出a、b的值.png

[100][汇编语言]附注4 用栈传递参数_第3张图片
乘法运算结果存在 DX AX 中.png

[100][汇编语言]附注4 用栈传递参数_第4张图片
ret 用ret n指令将栈顶指针修改为压栈操作前的数值.png
  • mul指令 乘法指令

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;
}

[100][汇编语言]附注4 用栈传递参数_第5张图片
turbo c 2.0.png
[100][汇编语言]附注4 用栈传递参数_第6张图片
C语言对应机器码.png
[100][汇编语言]附注4 用栈传递参数_第7张图片
C语言对应机器码 2.png
[100][汇编语言]附注4 用栈传递参数_第8张图片
参数在栈中传递.png

你可能感兴趣的:([100][汇编语言]附注4 用栈传递参数)