- This article is a stub, which means that it is not detailed enough and needs to be expanded. Please help us by .
The primary design goal of ZOWIE was for control flow to be both structured (i.e. not using explicit jumps or labels) and memory-mapped (triggered by reads and writes of registers.) This design goal was inspired by Jeffry Johnston's attempt to reduce the number of instructions in BitChanger by memory-mapping the loop operation.
The main challenge in meeting this design goal was that memory-mapping a loop structure like
while requires some way to jump to the end of the loop -- but if the end of the loop is defined by when some memory location is changed, rather than when some point of the program text is reached, it is not possible to always detect it statically (by Rice's Theorem.)
It took several attempts to find something that worked (and it is not clear that this approach could be carried over to BitChanger.) Once it was clear that this was possible, it was decided to memory-map all operations in ZOWIE, so there is only one instruction,
MOV, with a handful of forms.
ZOWIE's syntax is similar to that of SMITH. There are five instruction forms:
MOV register, immediate e.g. MOV R8, 141 MOV register, register MOV R8, R9 MOV [register], register MOV R[R8], R9 MOV register, [register] MOV R8, R[R9] MOV [register], [register] MOV R[R8], R[R9]
Unlike SMITH, the closing square bracket is purely for decoration --
R[R8 is equivalent to
R2] is equivalent to