[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
CALL指令会将当前的IP值压入栈.png

在栈中分别取出a、b的值.png

乘法运算结果存在 DX AX 中.png

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

turbo c 2.0.png
C语言对应机器码.png
C语言对应机器码 2.png
参数在栈中传递.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,722评论 1 19
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,937评论 0 38
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,660评论 8 265
  • 马驹在白光中疾驰在傍晚墨色草地上放缓脚步就是这个时候了世上万物都回家你抚摸它低垂的额顶汗珠在高高的背脊两侧冷却,闪动
    达斐阅读 417评论 3 3