3 个版本 (破坏性更新)
0.2.0 | 2024年8月13日 |
---|---|
0.1.0 | 2024年7月8日 |
0.0.0-release | 2024年7月8日 |
#42 在 模拟器
每月459次下载
在 16 个 crate 中使用(通过 essential-asm-gen)
16KB
244 行
Essential ASM 规范。
此 crate 解析 Essential ASM 规范 YAML,并提供了一种结构化模型,用于反序列化和遍历操作树。
主要用途是帮助生成官方 ASM 声明和实现,尽管它可能对基于 essential ASM 规范的其他工具也很有用。
操作声明
每个操作都通过一个唯一的名称进行标识,并包含以下字段
opcode
:操作码的十六进制表示,唯一标识操作。description
:对操作功能的简要说明。panics
(可选):可能使虚拟机崩溃的原因列表。num_arg_bytes
(可选):指定操作期望的参数字节数。stack_in
:在操作执行之前从堆栈中获取的输入。这是一个表示预期值的符号标识符列表。如果省略了stack_in
,则假设为空列表。stack_out
:描述操作执行后在堆栈上推入的输出。堆栈输出可以是“固定”或“动态”。- fixed:当推送到堆栈上的项的数量是常数时使用。表示为表示输出值的字符串列表。
- dynamic:当推送到堆栈上的项的数量可能变化时使用。表示为一个映射,具有以下字段
elem
字段是一个表示输出值的符号标识符。len
字段指定长度是从哪个stack_in
单词推导出来的。
示例
Push:
opcode: 0x01
description: Push one word onto the stack.
num_arg_bytes: 8
stack_out: [word]
ReadWordRange:
opcode: 0x60
description: |
Read a range of words from state starting at the key.
Reads the state key and the number of words from the stack input.
Returns the memory address at which the data was written via the stack output.
panics:
- Not enough memory allocated to store the read state.
stack_in: [key_w0, key_w1, key_w2, key_w3, n_words]
stack_out: [mem_addr]
操作组
操作组组织相关的操作。它可以包括
- 描述:该组目的的简要概述。
- 组:将名称映射到该组内的操作(或其他组)。
示例
Stack:
description: Operations related to stack manipulation.
group:
# Push:
# etc
多字值
当从堆栈中读取多字值(如状态键或地址)时,假定最高位首先推入堆栈。
依赖关系
~1.9–2.7MB
~56K SLoC