.text .globl main main: jal pread # read first integer nop # move $s0,$v0 # save it in $s0 jal pread # read second integer nop # move $s1,$v0 # save it in $s1 jal pread # read third integer nop # move $s2,$v0 # save it in $s2 addu $s0,$s0,$s1 # compute the sum addu $a0,$s0,$s2 li $v0,1 # print the sum syscall li $v0,10 # exit syscall
Recall that modules (for us, subroutines) should not know about
each other's symbolic addresses.
It would violate the idea of modularity for main
to do something to pread
's prompt
,
for example.
But some symbolic addresses need to be used between modules.
For example, pread
is a symbolic address, and
main
must know about it and use it in the jal
instruction.
A symbol that a subroutine makes visible to other subroutines is
a global symbol.
Global symbols often label entry points.
Symbols that are not global are called local symbols.
In MIPS assembly and in SPIM a symbol is made global by
placing it in a list of symbols following the .globl
directive:
.globl main