SLIDE 1
Lecture 22, MIPS Programming: Directives, Linkers, Loaders, Memory
CSCI341
SLIDE 2 REVIEW
- Assemblers understand special commands called “directives”
- Assemblers understand “macro” commands
- Assembly programs become object files
- Object files are structured in a specific way (six segments)
SLIDE 3 REVIEW
Six segments.
header text segment data segment
relocation information
symbol table debugging info
You should have a good understanding of what these segments are for.
SLIDE 4 ASSEMBLER DIRECTIVES
- .data
- .text
- .double
- .globl
Your new friend: .asciiz (and her brother, .ascii)
SLIDE 5
.ASCIIZ
“Store this string in consecutive bytes in memory, and null-terminate it.”
SLIDE 6
.ASCII
“Store this string in consecutive bytes in memory, but don’t null-terminate it.”
SLIDE 7 EXAMPLE
.asciiz “liberty”
.byte 108, 105, 98, 101, 114, 116, 121, 0
is like...
SLIDE 8
.BYTE CRASHES YOUR .ASCIIZ PARTY!
.byte Another directive you now know. “Store n 8-bit values in successive bytes of memory.”
SLIDE 9
.BYTE
.byte 1, 8, 6, 7, 5, 3, 0, 9
“Store n 8-bit values in successive bytes of memory.”
.byte b1, b2, b3, b4 ..., bn
addr 1 2 3 4 5 6 7 val 1 8 6 7 5 3 9
SLIDE 10 EXAMPLE
.asciiz “liberty”
.byte 108, 105, 98, 101, 114, 116, 121, 0
is like...
SLIDE 11 EXAMPLE
.asciiz directives are often labeled. Why?
.data welcome: .asciiz “Welcome to the jungle!” .text # assembly code here...
“Store the string Welcome to the jungle! and remember it’s base address as welcome.”
SLIDE 12
NULL TERMINATION
A “special” character whose ascii code is 0.
SLIDE 13
WHY NULL-TERMINATION?
Common functions such as println or the OS syscall(8)will read your ascii data beginning with the base address until the null character is “found.”
SLIDE 14 .ASCIIZ AND SYSCALL
- Store a string in memory using .asciiz
- Print the string to the screen via syscall
- (we’ll return to this after break)
(printing a string on the console)
SLIDE 15 LINKERS
- Separate compilation of files (“modules”) means we’ve got to
“link” them together before execution.
- (To resolve all unresolved labels and symbols)
SLIDE 16 LINKERS
- Search program libraries to find library function calls in the
program
- Determine memory locations that each module’s instructions
will occupy, and relocate those instructions by adjusting absolute references.
- (Remember, “the shelf may move,” so instructions
referencing something on the shelf must change.)
- Resolve references among modules
SLIDE 17 LINKER MISSION #1
- Ensure the program has no undefined labels.
- Aside: remember all those compiler warnings about unused or
“unmatched” variable references?
- Those are symbols that were defined but never used.
SLIDE 18 LINKER MISSION #2
- If a program uses a library function, “extract” the function’s
code from the library and integrate it into the final executable.
- (Keep in mind library functions may call other library
functions)
- Continue this process until all external references are
resolved.
SLIDE 19 LINKER MISSION #3
- Determine the memory locations each “module” will occupy.
- Absolute address references must be relocated.
- Process is assisted by relocation information segment of
each module’s object file.
SLIDE 20 LINKER COMPLETE?
- Produces executable file.
- Typically has same segment-format as object file, except:
- There are no longer unresolved references
- No relocation information is stored
SLIDE 21 LOADING
- Executable programs first reside on disk (secondary storage)
- To “execute” a program means to:
- Load the executable file into memory
- Set the program counter to the base address of what was
just loaded
SLIDE 22 LOADING (HELLO KERNEL!)
The “kernel” is the central component
It’s the “bridge” between applications and the hardware layer. Handles system calls.
SLIDE 23 LOADING
- OS reads the file’s header to determine size of text and data
segments
- Creates space in memory for the program (instructions, data
and a “workspace” or “stack”)
- Copies instructions and data into memory
- Copies arguments passed to the program onto the stack
- Initializes the machine registers (sets the stack pointer)
- Jumps to a startup routine that calls the main routine
SLIDE 24 LOADING
- Lastly, if main returns, the startup routine terminates the
program via an exit system call.
SLIDE 25 AFTER BREAK:
- Memory usage
- Stacks
- Procedure calling (B.6, 2.8)
SLIDE 26
- Reading 20
- MIPS Assembly Language Programming
- Chapter 4 (online)
- Start reviewing for the midterm
HOMEWORK
yeah midterms!