| PC | Address | Memory |
|---|
| Data Stack |
|---|
| Return Stack |
|---|
| Symbol | Description |
|---|---|
| LIT | ds.push(oper) pc = pc + 2 |
| LOAD (@) | addr = ds.pop() ds.push(mem[addr]) pc = pc + 1 |
| STORE (!) | addr = ds.pop() mem[addr] = ds.pop() pc = pc + 1 |
| DROP | ds.pop() pc = pc + 1 |
| DUP | ds.push(ds.peek()) pc = pc + 1 |
| OVER | ds.push(ds.nextToPeek()) pc = pc + 1 |
| SWAP | tmpl = ds.pop() tmp2 = ds.pop() ds.push(tmpl) ds.push(tmp2) pc = pc + 1 |
| ADD (+) SUB (-) AND OR XOR |
tmp2 = ds.pop() tmpl = ds.pop() ds.push(tmpl op tmp2) pc = pc + 1 |
| IF | tmp = ds.pop() if tmp = 0 then pc = oper else pc = pc + 2 |
| CALL | pc = oper rs.push(pc + 2) |
| EXIT | pc = rs.pop() |
| HALT | stop cpu |
| >R | rs.push(ds.pop()) pc = pc + 1 |
| R> | ds.push(rs.pop()) pc = pc + 1 |