Pointer Movement
Sometimes, you'll need the flexibility to read and manipulate data cells without knowing their exact position. For example, you may need to save N cells depending in the size of the provided STDIN input.
The pointer value starts at
0
.
This can be managed by the @
(A.K.A pointer) cell index. Anywhere that a cell can be
referenced, inc 1 in *1
for example, you can also use the @
pointer. inc 1 in *@
in
this example.
You can also move the pointer around with the goto
operator.
The goto
operator
There are 2 sides to move the pointer and 2 ways for each side.
You can see the dedicated goto
instruction page for more
details.
# Moves to left by one cell
goto left
# Moves the pointer to the left by 5 cells
goto left by 5
# Moves to right by one cell
goto right
# Moves the pointer to the right by 5 cells
goto right by 5
Pointer overflow
If the pointer is current at a edge cell (i.e. 0
or 29 999
), and you move it in the
opposite direction, you'll have the pointer overflow
effect. It is pretty simple and
easy to understand.
Look at this code example:
# This example is using --memory=10 to allocate only 10 cells
write *@ # Pointer is now at the first cell (0)
# Pointer: *0 --- *(Max Memory Size)
# Pointer: *0 -> *9 (Because 0 to 9 is 10 cells)
goto left
write *@ # Pointer is now at the last cell (9)