学点汇编,用栈传递参数和返回值的汇编框架

这篇博客介绍了在CPU内部运行的一款特殊汇编语言,其栈操作以一比特为单位,详细阐述了push、call、pop和ret指令的工作原理,并通过一个示例展示了函数调用前后栈的变化过程,揭示了这种设计能节省指令和提高效率的细节。
摘要由CSDN通过智能技术生成

在研究浮动电路CPU的过程中,遇到了汇编语言。这是一款运行在CPU内部的汇编语言,它通过栈传递参数和返回值,在栈里,一个单元是一比特。即每次push和pop操作都涉及一比特信息。一个例子如下:

push p6 .. p1
call func,sp-2
pop r1 .. r3

func:
        # v1=sp[1], v2=sp[2]
        mov r1, sp[6]
        mov r2, sp[7]
        mov r3, sp[8]
        ret, sp+5

调用func前后,栈的变化:
在这里插入图片描述
与x86汇编不同,栈在CPU内部,一次操作一比特。ret, sp+5的意思是:返回,顺便sp+5。
需要“顺便”执行的原因,是ret指令内含pop,而pop又内含修改sp,所以,将ret和修改sp的指令写在一行,顺便执行。这样可以省去一句修改sp的指令,速度快了一点点。

图1、call之前
图2、push、call之后
图3、设置返回值r
图4、返回
图5、获取返回值以后,恢复到图1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值