堆栈操作
这里 0 <= i,j,k <= 15
,除非另有说明。
操作码 | Fift 语法 | 堆栈 | Gas | 描述 |
---|---|---|---|---|
Please enter a search query | ||||
No results found |
TVM 指令内容列表
基本堆栈操作原语
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
00 | NOP | - | 无操作。 | 18 |
01 | SWAP | x y - y x | 等同于 s1 XCHG0 。 | 18 |
0i | s[i] XCHG0 | 交换 s0 与 s[i] ,1 <= i <= 15 。 | 18 | |
10ij | s[i] s[j] XCHG | 交换 s[i] 与 s[j] ,1 <= i < j <= 15 。 | 26 | |
11ii | s0 [ii] s() XCHG | 交换 s0 与 s[ii] ,0 <= ii <= 255 。 | 26 | |
1i | s1 s[i] XCHG | 交换 s1 与 s[i] ,2 <= i <= 15 。 | 18 | |
2i | s[i] PUSH | 将旧的 s[i] 的一个副本推入堆栈。 | 18 | |
20 | DUP | x - x x | 等同于 s0 PUSH 。 | 18 |
21 | OVER | x y - x y x | 等同于 s1 PUSH 。 | 18 |
3i | s[i] POP | 将旧的 s0 值弹出到旧的 s[i] 中。等同于 s[i] XCHG0 DROP | 18 | |
30 | DROP | x - | 等同于 s0 POP ,丢弃堆栈顶部值。 | 18 |
31 | NIP | x y - y | 等同于 s1 POP 。 | 18 |
复杂堆栈操作原语
xxxxxxx 操作码 | xxxxxxxxxxxxxxxxxxxxxxxxxxxx Fift 语法 | xxxxxxxxxxxxxxxxx 堆栈 | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 描述 | xxxx Gas |
---|---|---|---|---|
4ijk | s[i] s[j] s[k] XCHG3 | 等同于 s2 s[i] XCHG s1 s[j] XCHG s[k] XCHG0 。 | 26 | |
50ij | s[i] s[j] XCHG2 | 等同于 s1 s[i] XCHG s[j] XCHG0 。 | 26 | |
51ij | s[i] s[j] XCPU | 等同于 s[i] XCHG0 s[j] PUSH 。 | 26 | |
52ij | s[i] s[j-1] PUXC | 等同于 s[i] PUSH SWAP s[j] XCHG0 。 | 26 | |
53ij | s[i] s[j] PUSH2 | 等同于 s[i] PUSH s[j+1] PUSH 。 | 26 | |
540ijk | s[i] s[j] s[k] XCHG3_l | XCHG3 的长格式。 | 34 | |
541ijk | s[i] s[j] s[k] XC2PU | 等同于 s[i] s[j] XCHG2 s[k] PUSH 。 | 34 | |
542ijk | s[i] s[j] s[k-1] XCPUXC | 等同于 s1 s[i] XCHG s[j] s[k-1] PUXC 。 | 34 | |
543ijk | s[i] s[j] s[k] XCPU2 | 等同于 s[i] XCHG0 s[j] s[k] PUSH2 。 | 34 | |
544ijk | s[i] s[j-1] s[k-1] PUXC2 | 等同于 s[i] PUSH s2 XCHG0 s[j] s[k] XCHG2 。 | 34 | |
545ijk | s[i] s[j-1] s[k-1] PUXCPU | 等同于 s[i] s[j-1] PUXC s[k] PUSH 。 | 34 | |
546ijk | s[i] s[j-1] s[k-2] PU2XC | 等同于 s[i] PUSH SWAP s[j] s[k-1] PUXC 。 | 34 | |
547ijk | s[i] s[j] s[k] PUSH3 | 等同于 s[i] PUSH s[j+1] s[k+1] PUSH2 。 | 34 | |
55ij | [i+1] [j+1] BLKSWAP | 交换两个块 s[j+i+1] … s[j+1] 和 s[j] … s0 。0 <= i,j <= 15 等同于 [i+1] [j+1] REVERSE [j+1] 0 REVERSE [i+j+2] 0 REVERSE 。 | 26 | |
5513 | ROT2 2ROT | a b c d e f - c d e f a b | 旋转三对堆栈最顶部的条目。 | 26 |
550i | [i+1] ROLL | 旋转顶部 i+1 个堆栈条目。等同于 1 [i+1] BLKSWAP 。 | 26 | |
55i0 | [i+1] -ROLL [i+1] ROLLREV | 以相反方向旋转顶部 i+1 个堆栈条目。等同于 [i+1] 1 BLKSWAP 。 | 26 | |
56ii | [ii] s() PUSH | 将旧的 s[ii] 的一个副本推入堆栈。0 <= ii <= 255 | 26 | |
57ii | [ii] s() POP | 将旧的 s0 值弹出到旧的 s[ii] 中。0 <= ii <= 255 | 26 | |
58 | ROT | a b c - b c a | 等同于 1 2 BLKSWAP 或 s2 s1 XCHG2 。 | 18 |
59 | ROTREV -ROT | a b c - c a b | 等同于 2 1 BLKSWAP 或 s2 s2 XCHG2 。 | 18 |
5A | SWAP2 2SWAP | a b c d - c d a b | 等同于 2 2 BLKSWAP 或 s3 s2 XCHG2 。 | 18 |
5B | DROP2 2DROP | a b - | 等同于两次执行 DROP 。 | 18 |
5C | DUP2 2DUP | a b - a b a b | 等同于 s1 s0 PUSH2 。 | 18 |
5D | OVER2 2OVER | a b c d - a b c d a b | 等同于 s3 s2 PUSH2 。 | 18 |
5Eij | [i+2] [j] REVERSE | 反转 s[j+i+1] … s[j] 的顺序。 | 26 | |
5F0i | [i] BLKDROP | 执行 i 次 DROP 。 | 26 | |
5Fij | [i] [j] BLKPUSH | 执行 i 次 PUSH s(j) 。1 <= i <= 15 , 0 <= j <= 15 。 | 26 | |
60 | PICK PUSHX | 从堆栈弹出整数 i ,然后执行 s[i] PUSH 。 | 18 | |
61 | ROLLX | 从堆栈弹出整数 i ,然后执行 1 [i] BLKSWAP 。 | 18 | |
62 | -ROLLX ROLLREVX | 从堆栈弹出整数 i ,然后执行 [i] 1 BLKSWAP 。 | 18 | |
63 | BLKSWX | 从堆栈弹出整数 i 、j ,然后执行 [i] [j] BLKSWAP 。 | 18 | |
64 | REVX | 从堆栈弹出整数 i 、j ,然后执行 [i] [j] REVERSE 。 | 18 | |
65 | DROPX | 从堆栈弹出整数 i ,然后执行 [i] BLKDROP 。 | 18 | |
66 | TUCK | a b - b a b | 等同于 SWAP OVER 或 s1 s1 XCPU 。 | 18 |
67 | XCHGX | 从堆栈弹出整数 i ,然后执行 s[i] XCHG 。 | 18 | |
68 | DEPTH | - depth | 推入当前堆栈深度。 | 18 |
69 | CHKDEPTH | i - | 从堆栈弹出整数 i ,然后检查是否至少有 i 个元素,否则生成堆栈下溢异常。 | 18/58 |
6A | ONLYTOPX | 从堆栈弹出整数 i ,然后移除除顶部 i 个元素之外的所有元素。 | 18 | |
6B | ONLYX | 从堆栈弹出整数 i ,然后仅保留底部 i 个元素。大致等同于 DEPTH SWAP SUB DROPX 。 | 18 | |
6Cij | [i] [j] BLKDROP2 | 在顶部 j 个元素下方丢弃 i 个堆栈元素。1 <= i <= 15 , 0 <= j <= 15 等同于 [i+j] 0 REVERSE [i] BLKDROP [j] 0 REVERSE 。 | 26 |