Flow Control
As in PASM, flow control in PIR is done entirely with conditional and unconditional branches. This may seem simplistic, but remember that PIR is a thin overlay on the assembly language of a virtual processor. For the average assembly language, jumps are the fundamental unit of flow control.
Any PASM branch instruction is valid, but PIR has some high-level
constructs of its own. The most basic is the unconditional branch:
goto.
.sub _main
goto L1
print "never printed"
L1:
print "after branch\n"
end
.endThe first print statement never runs because the
goto always skips over it to the label
L1.
The conditional branches combine if or
unless with goto:
.sub _main
$I0 = 42
if $I0 goto L1
print "never printed"
L1: print "after branch\n"
end
.endIn this example, the goto branches to the label
L1 only if the value stored in
$I0 is true. The unless
statement is quite similar, but branches when the tested value is
false. An undefined value, 0, or an empty string are all false
values. The if . . . goto statement translates
directly to the PASM if, and
unless translates to the PASM
unless.
The comparison operators (<,
<=, = =,
!=, >,
>=) can combine with if . . .
goto. These branch when the comparison
is true:
.sub _main
$I0 = 42
$I1 = 43
if $I0 < $I1 goto L1
print "never printed"
L1:
print "after branch\n"
end
.endThis example compares $I0 to
$I1 and branches to the label
L1 if $I0 is less than
$I1. The if $I0 < $I1 goto L1 statement translates directly to the PASM
lt branch operation. ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access