跳到主要内容

堆栈操作

这里 0 <= i,j,k <= 15,除非另有说明。

操作码Fift 语法堆栈Gas描述
Please enter a search query
No results found

TVM 指令内容列表

基本堆栈操作原语

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
00NOP-无操作。18
01SWAPx y - y x等同于 s1 XCHG018
0is[i] XCHG0交换 s0s[i]1 <= i <= 1518
10ijs[i] s[j] XCHG交换 s[i]s[j]1 <= i < j <= 1526
11iis0 [ii] s() XCHG交换 s0s[ii]0 <= ii <= 25526
1is1 s[i] XCHG交换 s1s[i]2 <= i <= 1518
2is[i] PUSH将旧的 s[i] 的一个副本推入堆栈。18
20DUPx - x x等同于 s0 PUSH18
21OVERx y - x y x等同于 s1 PUSH18
3is[i] POP将旧的 s0 值弹出到旧的 s[i] 中。等同于 s[i] XCHG0 DROP18
30DROPx -等同于 s0 POP,丢弃堆栈顶部值。18
31NIPx y - y等同于 s1 POP18

复杂堆栈操作原语

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
4ijks[i] s[j] s[k] XCHG3等同于 s2 s[i] XCHG s1 s[j] XCHG s[k] XCHG026
50ijs[i] s[j] XCHG2等同于 s1 s[i] XCHG s[j] XCHG026
51ijs[i] s[j] XCPU等同于 s[i] XCHG0 s[j] PUSH26
52ijs[i] s[j-1] PUXC等同于 s[i] PUSH SWAP s[j] XCHG026
53ijs[i] s[j] PUSH2等同于 s[i] PUSH s[j+1] PUSH26
540ijks[i] s[j] s[k] XCHG3_lXCHG3 的长格式。34
541ijks[i] s[j] s[k] XC2PU等同于 s[i] s[j] XCHG2 s[k] PUSH34
542ijks[i] s[j] s[k-1] XCPUXC等同于 s1 s[i] XCHG s[j] s[k-1] PUXC34
543ijks[i] s[j] s[k] XCPU2等同于 s[i] XCHG0 s[j] s[k] PUSH234
544ijks[i] s[j-1] s[k-1] PUXC2等同于 s[i] PUSH s2 XCHG0 s[j] s[k] XCHG234
545ijks[i] s[j-1] s[k-1] PUXCPU等同于 s[i] s[j-1] PUXC s[k] PUSH34
546ijks[i] s[j-1] s[k-2] PU2XC等同于 s[i] PUSH SWAP s[j] s[k-1] PUXC34
547ijks[i] s[j] s[k] PUSH3等同于 s[i] PUSH s[j+1] s[k+1] PUSH234
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
5513ROT2
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
58ROTa b c - b c a等同于 1 2 BLKSWAPs2 s1 XCHG218
59ROTREV
-ROT
a b c - c a b等同于 2 1 BLKSWAPs2 s2 XCHG218
5ASWAP2
2SWAP
a b c d - c d a b等同于 2 2 BLKSWAPs3 s2 XCHG218
5BDROP2
2DROP
a b - 等同于两次执行 DROP18
5CDUP2
2DUP
a b - a b a b等同于 s1 s0 PUSH218
5DOVER2
2OVER
a b c d - a b c d a b等同于 s3 s2 PUSH218
5Eij[i+2] [j] REVERSE反转 s[j+i+1] … s[j] 的顺序。26
5F0i[i] BLKDROP执行 iDROP26
5Fij[i] [j] BLKPUSH执行 iPUSH s(j)
1 <= i <= 15, 0 <= j <= 15
26
60PICK
PUSHX
从堆栈弹出整数 i,然后执行 s[i] PUSH18
61ROLLX从堆栈弹出整数 i,然后执行 1 [i] BLKSWAP18
62-ROLLX
ROLLREVX
从堆栈弹出整数 i,然后执行 [i] 1 BLKSWAP18
63BLKSWX从堆栈弹出整数 ij,然后执行 [i] [j] BLKSWAP18
64REVX从堆栈弹出整数 ij,然后执行 [i] [j] REVERSE18
65DROPX从堆栈弹出整数 i,然后执行 [i] BLKDROP18
66TUCKa b - b a b等同于 SWAP OVERs1 s1 XCPU18
67XCHGX从堆栈弹出整数 i,然后执行 s[i] XCHG18
68DEPTH- depth推入当前堆栈深度。18
69CHKDEPTHi -从堆栈弹出整数 i,然后检查是否至少有 i 个元素,否则生成堆栈下溢异常。18/58
6AONLYTOPX从堆栈弹出整数 i,然后移除除顶部 i 个元素之外的所有元素。18
6BONLYX从堆栈弹出整数 i,然后仅保留底部 i 个元素。大致等同于 DEPTH SWAP SUB DROPX18
6Cij[i] [j] BLKDROP2在顶部 j 个元素下方丢弃 i 个堆栈元素。
1 <= i <= 15, 0 <= j <= 15
等同于 [i+j] 0 REVERSE [i] BLKDROP [j] 0 REVERSE
26

TVM 指令内容列表