Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.
-
Upload
nicoletta-barone -
Category
Documents
-
view
223 -
download
0
Transcript of Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.
Architettura degli Architettura degli Elaboratori IIElaboratori II
(canale P-Z)(canale P-Z)
Linguaggi e moduliLinguaggi e moduli
Dott. Franco LiberatiDott. Franco Liberati
Argomenti
Linguaggi di programmazione
Assemblatore Compilatore Linker (collegatore)
LINGUAGGI DI PROGRAMMAZIONELINGUAGGI DI PROGRAMMAZIONE
ASSEMBLATOREASSEMBLATORE
COMPILATORECOMPILATORE
LINKERLINKER
Linguaggio Macchina
Linguaggio basato su valori numerici utilizzato dai computer per memorizzare ed eseguire programmi
0111100010101011110101001010101
$t0 $t1
ALU
$t2
Linguaggio macchina Funzionamento base
t0t0t1t1t2t2
t7t7PCPC
ALUALU SHIFTERSHIFTER
STATUSSTATUS
……
CLOCKCLOCK
TRANCODIFICATORETRANCODIFICATORE
000000 0010001010000000
000001 0010010011000000
000010 1010000000100100
000011
000100
……
010000 0000000000000100
010001 0000000000000011
……
011000
011001
……
Linguaggio Assembly
Rappresentazione simbolica (parole mnemoniche) del linguaggio macchina, usato dai programmatori (utilizza simboli invece di numeri per rappresentare istruzioni, registri e dati)
add $t2,$t0,$t1
0111100010101011110101001010101
$t0 $t1
ALU
$t2
Linguaggio AssemblyIstruzioni
Tipicamente una istruzione è strutturata in un
add $t2,$t0,$t1
OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti
lw $t2,variabile
101101001000100000000000010001
000000001000100001111000011110
sw $t3,variabile 001001001100110001011000010110
Linguaggio AssemblyIstruzioni in SPIM (esempio)
Tipicamente una istruzione è strutturata in un
add $t0,$t1,$t2
OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti
add $8, $9, $10add $8, $9, $10
0x012a40200x012a4020
100101010010000000010000100101010010000000010000
0000000000000100101001010100101001000010000000000000100000100000
Linguaggio AssemblyIstruzioni in SPIM (esempio)
Tipicamente una istruzione è strutturata in un
lw $t1, pippo
OPCODEOPCODE Comando/modo di indirizzamentiComando/modo di indirizzamenti
111100000000010001000000000001111100000000010001000000000001lui $1, 4097lui $1, 4097
lw $9, 0($1)
0x3c011001
0x8c2900001000110000101001000000000000000010001100001010010000000000000000
Linguaggio Alto Livello
I linguaggi di programmazione ad alto livello sono caratterizzati dalla presenza di astrazioni che permettono al programmatore di non specificare certi tipi di dettagli implementativi della macchina
VISUAL BASICVISUAL BASICC#C#C++C++CCJavaJava
PASCALPASCALBASICBASICSIEBELSIEBELCOBOLCOBOLMLML
Linguaggi di programmazione
Linguaggio C
/*esempio1.c*/
void main(){ int a, b, c; a=4; b=6; c=a+b;}
Linguaggio assembler
/*esempio1.s*/
.textli $t1,4li $t2,6add $t0,$t1,$t2
Linguaggio macchina
FUN REG VAL
001000100000010000100100000001101010000000100100
Ris. Registro $t2:0000000000001010
Codice Sorgente
Programma scritto in linguaggio ad alto livello o assembly
void main(){ int a, b, c; a=4; b=6; c=a+b;}
void main(){ int a, b, c; a=4; b=6; c=a+b;}
.text
.globl main
main:lw $t1,pippolw $t2,paperinoadd $t0,$t1,$t2li $v0,10Syscall
.datapippo: .word 11paperino: .word 15
.text
.globl main
main:lw $t1,pippolw $t2,paperinoadd $t0,$t1,$t2li $v0,10Syscall
.datapippo: .word 11paperino: .word 15
Assemblatore
L’Assemblatore (Assembler) traduce programmi scritti nel linguaggio assembly in linguaggio macchina
L’Assemblatore: legge un file sorgente (scritto in
assembly) produce un file oggetto (detto
anche modulo) contenente linguaggio macchina ed altre informazioni necessarie per trasformare uno o più file oggetto in un programma eseguibile
File File SorgenteSorgente
File File SorgenteSorgente
AssemblerAssemblerAssemblerAssembler
FileFileOggettoOggetto
FileFileOggettoOggetto
File Oggetto - Modulo
Un modulo può contenere: Istruzioni (routine, sub-routine,
ecc.) Dati Riferimenti a sub-routine e dati
di altri moduli
File OggettoFile Oggetto00010101010000101010100101011111001010111110
(riferimento ad altro modulo)(riferimento ad altro modulo)
011111111100111111111011111000010111110000101111111101111111111011
File OggettoFile Oggetto00010101010000101010100101011111001010111110
(riferimento ad altro modulo)(riferimento ad altro modulo)
011111111100111111111011111000010111110000101111111101111111111011
Compilatore
Il Compilatore traduce un programma scritto in un linguaggio ad alto livello in un: programma equivalente scritto
in linguaggio assembly, che può essere trasformato in un file oggetto da un assembler
oppure, direttamente in un file oggetto
FileFileSorgenteSorgente
FileFileSorgenteSorgente
AssemblerAssembler
FileFileOggettoOggetto
FileFileOggettoOggetto
CompilatoreCompilatore
File AssemblerFile AssemblerFile AssemblerFile Assembler
Linker Il Linker combina un insieme di
moduli e file libreria in un programma eseguibile
Il linker ha tre compiti: Ricercare nei file libreria le
routine di libreria utilizzate dal programma (es. printf: funzione per la stampa a video di dati)
Determinare le locazioni di memoria che il codice di ogni modulo andrà ad utilizzare e aggiornare i riferimenti assoluti in modo opportuno
Risolvere i riferimenti tra i diversi file
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
LINKERLINKER
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________
sub:sub:……....Jal scanfJal scanf……..______________
sub:sub:……....Jal scanfJal scanf……..______________
printf:printf:……..______________scanf:scanf:……..
printf:printf:……..______________scanf:scanf:……..
Programma sorgente: indirizzi simbolici Compilatore: da indirizzi simbolici a
indirizzi rilocabili (esempio: salto di 14 parole dall’inizio di questo modulo)
Linker: da indirizzi rilocabili indirizzi assoluti
Tempo di compilazione: se si conosce la zona di memoria dove risiederà il programma
Tempo di caricamento: si genera un codice rilocabile si ritarda il collegamento finale fino al caricamento
Tempo di esecuzione: se il processo può essere spostato durante la sua esecuzione in un segmento o l’altro di memoria
Binding degli indirizziFileFile
SorgenteSorgente
FileFileSorgenteSorgente
FileFileOggettoOggetto
FileFileOggettoOggetto
Compilatore/Compilatore/AssemblerAssembler
LINKERLINKER
FileFileOggettoOggetto
FileFileOggettoOggetto
FILE ESEGUIBILEFILE ESEGUIBILEEXEEXE
Linker Determinare le locazioni di memoria che il codice di ogni modulo andrà ad
utilizzare, aggiornare i riferimenti assoluti in modo opportuno e fare riferimento a variabili globali che coinvolgono più moduli
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal (a0)Jal (a0)….….Jal: (a1)Jal: (a1)……..______________sub:sub:……....Jal (a2)Jal (a2)……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal (a0)Jal (a0)….….Jal: (a1)Jal: (a1)……..______________sub:sub:……....Jal (a2)Jal (a2)……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal 132Jal 132….….Jal: 164Jal: 164……..______________sub:sub:……....Jal 200Jal 200……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal 132Jal 132….….Jal: 164Jal: 164……..______________sub:sub:……....Jal 200Jal 200……..______________printf:printf:……..______________scanf:scanf:……..
00…..…..100100….….124124……..__________132132……....140140……..__________164164……..__________200200……..
RIFERIMENTI RELATIVIRIFERIMENTI RELATIVI RIFERIMENTI ASSOLUTIRIFERIMENTI ASSOLUTI
Eseguibile Il Linker combina un insieme di
moduli e file libreria in un programma eseguibile
Il programma eseguibile non deve contenere unresolved references
Solamente il programma eseguibile può essere elaborato su una macchina
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________sub:sub:……....Jal scanfJal scanf……..______________printf:printf:……..______________scanf:scanf:……..
LINKERLINKER
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________
Main:Main:…..…..Jal sub:Jal sub:….….Jal: printfJal: printf……..______________
sub:sub:……....Jal scanfJal scanf……..______________
sub:sub:……....Jal scanfJal scanf……..______________
printf:printf:……..
printf:printf:……..
FILE ESEGUIBILEFILE ESEGUIBILEEXEEXE
EseguibileDisposizione in memoria La memoria viene suddivisa in
segmenti Ogni segmento viene utilizzato
per un particolare scopo
Segmenti principali: Text: Contiene il codice dei
programma Data: Contiene i dati “globali”
dei programmi Stack Contiene i dati “locali”
delle funzioni
0x80000000 KERNEL
0x7FFFF000 NOT USED
STACK $SP
HEAP
0x10000000 DATA
TEXT
0x04000000 R DATA
0x00000000 RESERVED
Linguaggi di programmazione
Linguaggio C
/*esempio1.c*/
void main(){ int a, b, c; a=3; b=4; c=a+b;}
Linguaggio assembler
/*esempio1.s*/
.textli $t1,4li $t2,3add $t0,$t1,$t2
Linguaggio macchina
FUN REG VAL
001000100000010000100100000000111010000000100100
Ris. Registro $t2:000000000000111
t0t0
t1t1
t2t2
t7t7
PCPC
ALUALU SHIFTERSHIFTER
STATUSSTATUS MEMMEM
……
00100100010001010000010000000000
CLOCKCLOCK
TRANCODIFICATORETRANCODIFICATORE
00000000000001000000000000000100
00000000000000110000000000000011
00100100100010011000011000000000
10110100000000000100010010001000
00000000000001110000000000000111