Solidity内联汇编YUL学习

参考文章:Stack Machines: Fundamentals
本系列将探讨虚拟堆栈机的设计和实现。即,其操作基于堆栈的虚拟机。这篇文章将介绍基础知识。

堆栈,数据结构

那么什么是堆栈?这是一个具有两个操作的数据结构:push和 pop。您可以将值压入堆栈,然后从堆栈中弹出它们。这是按照LIFO(后进先出)的顺序进行的。
在这里插入图片描述
此数据类型是堆栈计算机设计的基础。实现堆栈非常容易,尤其是当您拥有一个数组时,该数组包含一个离散大小的单元格列表并且是可索引寻址的。

除了用于数据存储的数组之外,您还需要具有一个堆栈指针。它仅指向堆栈的当前头部,并随着元素被压入和弹出而递增和递减。

这是C语言的基本实现:

int sp = 0;
double val[MAXVAL];

void push(double f)
{
    val[sp++] = f;
}

double pop(void)
{
    return val[--sp];
}

许多语言已经内置了这样的数据结构。PHP具有 array_push和array_pop函数以及一个SplStack类。ECMAScript在数组原型上具有 push和pop方法。

指示

为了真正有用,堆栈机还需要说明。它需要定义一个指令集,并且需要一种存储和访问这些指令的方法。
在这里插入图片描述
指令通常从堆栈中弹出一个或多个值,进行一些计算,然后推入结果。

指令集可以包含诸如推压值之类的操作,诸如加,减,乘,除之类的算法,影响执行哪条指令的控制流,甚至包括特定于主机的操作(如I / O)。

执行

在上面的示例中,有三个指令:

  • 推值3
  • 推值4
  • 弹出两个值并添加它们,然后推入结果

机器按顺序执行它们,逐一读取指令。通常有一个指令指针(有时也称为程序计数器)指向下一条指令,并在每次操作后递增。
在执行这些步骤期间,堆栈的状态会更改。最终状态应该是这样的:
在这里插入图片描述
通常,当到达指令末尾时,堆栈顶部的值将返回给调用方。在这种情况下,将从堆栈中弹出值7并返回。

概括
  • 虚拟堆栈机由堆栈和指令组成。
  • 堆栈是具有两个操作的数据结构:推入和弹出。
  • 指令使用堆栈上的值。

参考文章

参考EVM

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值