Stack manipulation

Miden VM stack is a push-down stack of field elements. The stack has a maximum depth of , but only the top elements are directly accessible via the instructions listed below.

In addition to the typical stack manipulation instructions such as drop, dup, swap etc., Miden assembly provides several conditional instructions which can be used to manipulate the stack based on some condition - e.g., conditional swap cswap or conditional drop cdrop.

InstructionStack_inputStack_outputNotes
drop
- (1 cycle)
[a, ... ][ ... ]Deletes the top stack item.
dropw
- (4 cycles)
[A, ... ][ ... ]Deletes a word (4 elements) from the top of the stack.
padw
- (4 cycles)
[ ... ][0, 0, 0, 0, ... ]Pushes four values onto the stack.
Note: simple pad is not provided because push.0 does the same thing.
dup.n
- (1-3 cycles)
[ ..., a, ... ][a, ..., a, ... ]Pushes a copy of the th stack item onto the stack. dup and dup.0 are the same instruction. Valid for
dupw.n
- (4 cycles)
[ ..., A, ... ][A, ..., A, ... ]Pushes a copy of the th stack word onto the stack. dupw and dupw.0 are the same instruction. Valid for
swap.n
- (1-6 cycles)
[a, ..., b, ... ][b, ..., a, ... ]Swaps the top stack item with the th stack item. swap and swap.1 are the same instruction. Valid for
swapw.n
- (1 cycle)
[A, ..., B, ... ][B, ..., A, ... ]Swaps the top stack word with the th stack word. swapw and swapw.1 are the same instruction. Valid for
swapdw
- (1 cycle)
[D, C, B, A, ... ][B, A, D, C ... ]Swaps words on the top of the stack. The 1st with the 3rd, and the 2nd with the 4th.
movup.n
- (1-4 cycles)
[ ..., a, ... ][a, ... ]Moves the th stack item to the top of the stack. Valid for
movupw.n
- (2-3 cycles)
[ ..., A, ... ][A, ... ]Moves the th stack word to the top of the stack. Valid for
movdn.n
- (1-4 cycles)
[a, ... ][ ..., a, ... ]Moves the top stack item to the th position of the stack. Valid for
movdnw.n
- (2-3 cycles)
[A, ... ][ ..., A, ... ]Moves the top stack word to the th word position of the stack. Valid for

Conditional manipulation

InstructionStack_inputStack_outputNotes
cswap
- (1 cycle)
[c, b, a, ... ][e, d, ... ]

Fails if
cswapw
- (1 cycle)
[c, B, A, ... ][E, D, ... ]

Fails if
cdrop
- (2 cycles)
[c, b, a, ... ][d, ... ]
Fails if
cdropw
- (5 cycles)
[c, B, A, ... ][D, ... ]
Fails if