Labels
Like PASM, any line
can start with a label definition like LABEL:, but
label definitions can also stand on their own line.
PIR code has both local and global labels. Global labels start with an underscore. The name of a global label has to be unique, since it can be called at any point in the program. Local labels start with a letter. A local label is accessible only in the compilation unit where it’s defined. (We’ll discuss compilation units in the next section.)The name has to be unique there, but it can be reused in a different compilation unit.
branch L1 # local label bsr _L2 # global label
Labels are most often used in branching instructions and in subroutine calls.
Compilation Units
Compilation units in PIR are roughly
equivalent to the subroutines or methods of a high-level language.
Though they will be explained in more detail later, we introduce them
here because all code in a PIR source file must be defined in a
compilation unit. The simplest syntax for a PIR compilation unit
starts with the
.sub directive and
ends with the .end directive:
.sub _main
print "Hello, Polly.\n"
end
.endThis example defines a compilation unit named
_main that prints a string. The name is actually a
global label for this piece of code. If you generate a PASM file from
the PIR code (see the Section 10.2.2 earlier in this
chapter), you’ll see that the name translates to an
ordinary label:
_main:
print "Hello, Polly.\n"
endThe first compilation unit in a file is normally executed first, but ...
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