Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programma in memoria Assembler, Linker & Loader 3 Assembler, Linker & Loader 4
Esempio Lassemblatore
.globl main .globl proc .globl is_in
main:... proc: addi $sp, $sp, -20 is_in: addi $t0, $zero, 0
jal proc ... addi $t1, $zero, 0 Traduce un modulo in assembler in un file oggetto
... beq $s0, $zero, ret while: slt $t2, $t0, $a2 Una combinazione di
addi $a0, $s0, -1 beq $t2, $zero, end
9 Istruzioni in linguaggio macchina
addi $a1, $s1, 0
9 Dati
sll $t3, $t0, 2
addi $a2, $s2, 0 add $t3, $a1, $t3
jal proc
9 Informazioni per la corretta collocazione del modulo in memoria:
Rilocazione
lw $t4, 0($t3)
addi $s3, $v0, 0
Esempio
bne $t4, $a0, inc
addi $a0, $s0, 0
addi $t1, $zero, 1
addi $a1, $s1, 0 j end
9 Per poter tradurre in linguaggio macchina le istruzioni di salto,
salto,
addi $a2, $s2, 0
lassemblatore deve poter determinare gli indirizzi corrispondenti alle
etichette usate nei salti (tabella dei simboli)
inc: addi $t0, $t0, 1
jal is_in
9 Tabella dei simboli: contiene le corrispondenze tra nomi delle
j while
beq $v0, $zero, else2
etichette (simboli) ed indirizzi di memoria
end: addi $v0, $t1, 0
sll $s3, $s3, 1 jr $ra
addi $s3, $s3, 1 Il file oggetto prodotto dall
dallassemblatore assume che il
j ret modulo parta dalla locazione di memoria 0 (indirizzi relativi)
else2: addi $s3, $s3, 2 Sar
Sar il linker a gestire la rilocazione
ret: addi $v0, $s3, 0 9 Istruzioni dipendenti da un indirizzo assoluto
...
addi $sp, $sp, 20
Assembler, Linker & Loader 5 Assembler, Linker & Loader 6
jr $ra
Il linker Esempio
0x400000 ...
jal ???
0x4000AC ...
Ciascun modulo ha il suo spazio degli indirizzi 0x4000B0 addi $sp, $sp, -20
informazioni di rilocazione)
rilocazione)
beq $t2, $zero, 8
addi $a0, $s0, 0
sll $t3, $t0, 2
Porre simbolicamente in memoria istruzioni e dati
addi $a1, $s1, 0
add $t3, $a1, $t3
addi $a2, $s2, 0
Determinare gli indirizzi dei dati e delle etichette dei salti jal ???
lw $t4, 0($t3)
macchina
j 0x30
addi $s3, $s3, 1
addi $t0, $t0, 1
Stesso formato del file oggetto ma con tutti i riferimenti risolti
risolti e
j 0x64
j 0x08
senza informazioni di rilocazione
addi $s3, $s3, 2
addi $v0, $t1, 0
addi $v0, $s3, 0
... 0x400158 jr $ra
0x400120 jr $ra
0x4000AC ...
0x400120 jr $ra
Una volta che il linker ha creato il file eseguibile, Svantaggi del collegamento statico (prima
esso viene di solito memorizzato su disco dell
dellesecuzione del programma)
All
Allatto dell
dellesecuzione, il S.O. lo carica dal disco e Le routine della libreria fanno parte del codice eseguibile
ne avvia llesecuzione 9 Uso di vecchie versioni della libreria anche se disponibili
nuove versioni
Il loader si occupa di far partire il programma Caricamento dell
dellintera libreria anche se usata
Legge llintestazione per determinare la dimensione dei parzialmente
segmenti testo e dati
Librerie collegate dinamicamente (DLL)
Crea uno spazio di memoria sufficiente per testo e dati
Le routine della libreria non sono collegate e caricate
Copia istruzioni e dati in memoria finch
finch il programma non viene eseguito
Copia nello stack i parametri (se presenti) passati al main Ogni routine viene collegata solo dopo essere invocata
Inizializza i registri e lo stack pointer (lazy procedure linkage)
Salta ad una procedura di inizializzazione che copia i
parametri nei registri appositi dallo stack e poi invoca la
procedura di inizio del programma (main
(main()
() in C)
Assembler, Linker & Loader 15 Assembler, Linker & Loader 16