堆栈操作
这里 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] XCHG0DROP | 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] XCHGs1 s[j] XCHGs[k] XCHG0。 | 26 | |
| 50ij | s[i] s[j] XCHG2 | 等同于 s1 s[i] XCHGs[j] XCHG0。 | 26 | |
| 51ij | s[i] s[j] XCPU | 等同于 s[i] XCHG0s[j] PUSH。 | 26 | |
| 52ij | s[i] s[j-1] PUXC | 等同于 s[i] PUSHSWAPs[j] XCHG0。 | 26 | |
| 53ij | s[i] s[j] PUSH2 | 等同于 s[i] PUSHs[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] XCHG2s[k] PUSH。 | 34 | |
| 542ijk | s[i] s[j] s[k-1] XCPUXC | 等同于 s1 s[i] XCHGs[j] s[k-1] PUXC。 | 34 | |
| 543ijk | s[i] s[j] s[k] XCPU2 | 等同于 s[i] XCHG0s[j] s[k] PUSH2。 | 34 | |
| 544ijk | s[i] s[j-1] s[k-1] PUXC2 | 等同于 s[i] PUSHs2 XCHG0s[j] s[k] XCHG2。 | 34 | |
| 545ijk | s[i] s[j-1] s[k-1] PUXCPU | 等同于 s[i] s[j-1] PUXCs[k] PUSH。 | 34 | |
| 546ijk | s[i] s[j-1] s[k-2] PU2XC | 等同于 s[i] PUSHSWAPs[j] s[k-1] PUXC。 | 34 | |
| 547ijk | s[i] s[j] s[k] PUSH3 | 等同于 s[i] PUSHs[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 | ROT22ROT | 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 | SWAP22SWAP | a b c d - c d a b | 等同于 2 2 BLKSWAP或s3 s2 XCHG2。 | 18 | 
| 5B | DROP22DROP | a b -  | 等同于两次执行 DROP。 | 18 | 
| 5C | DUP22DUP | a b - a b a b | 等同于 s1 s0 PUSH2。 | 18 | 
| 5D | OVER22OVER | 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 | PICKPUSHX | 从堆栈弹出整数 i,然后执行s[i] PUSH。 | 18 | |
| 61 | ROLLX | 从堆栈弹出整数 i,然后执行1 [i] BLKSWAP。 | 18 | |
| 62 | -ROLLXROLLREVX | 从堆栈弹出整数 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 | 等同于 SWAPOVER或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个元素。大致等同于DEPTHSWAPSUBDROPX。 | 18 | |
| 6Cij | [i] [j] BLKDROP2 | 在顶部 j个元素下方丢弃i个堆栈元素。1 <= i <= 15,0 <= j <= 15等同于 [i+j] 0 REVERSE[i] BLKDROP[j] 0 REVERSE。 | 26 |