All instructions (even assembly instructions) now produce an optional return value. That is, the evaluation of instructions no longer just produces a "branch" value -- it now produces a branch together with a "V.v option". All existing instructions set this second component to "None". The idea is that C instructions will return a meaningful value, and this value will be useful when the instruction forms the test condition of an if-statement or a while-loop.
Added expressions. These can occur anywhere in the program, but are most appropriate in if/while test conditions. Expressions are either numeric constants (e.g. 4), registers (e.g. r0), or locations (e.g. x). If statements are no longer non-deterministic: they correctly branch according to the value of the test condition (0 is false, everything else is true). In due course I intend to add more expressions to the mix.
Made some progress on semantics of while-loops. I've made it so that the loop-body is evaluated once (only once) if the test condition is non-zero, and it is skipped if the test condition is zero. Now all I have to do is to repeatedly evaluate the loop, which shouldn't be too hard, given that the "unroll" flag is already in existence.