An address is a 32-bit pattern, and any 32-bit word of main storage can hold it. For example, here is a fragment of a program:
.text sub1: li $v0,4 # service code 4, print string la $a0,messH # address of string to print syscall # invoke the service jr $ra # return to caller .data messH: .asciiz "Hello " .text sub2: li $v0,4 # service code 4, print string la $a0,messW # address of string to print syscall # invoke the service jr $ra # return to caller .data messW: .asciiz "World\n" .data sub1add: .word sub1 # address of the first subroutine sub2add: .word sub2 # address of the second subroutine
The symbolic address
stands for whatever 32-bit address
the first byte of the first subroutine
gets loaded into at run time.
at the end
of the program,
the address represented by
is stored in memory,
at the symbolic address
The source code interleaves text and data, but the assembler and loader will put all machine code into the text section of memory and all data into the data section of memory.
If the address of
what bit pattern do you expect to see in memory
at the location