La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati.

Presentazioni simili


Presentazione sul tema: "Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati."— Transcript della presentazione:

1 Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati

2 Argomenti Linguaggi di programmazione Assemblatore Compilatore Linker (collegatore)LINKERCOMPILATORE ASSEMBLATORE LINGUAGGI DI PROGRAMMAZIONE

3 Linguaggio Macchina Linguaggio basato su valori numerici utilizzato dai computer per memorizzare ed eseguire programmi $t0$t1 ALU $t2

4 Linguaggio macchina Funzionamento base t0 t1 t2 t7 PC ALU SHIFTER STATUS … CLOCK TRANCODIFICATORE …… …… ……

5 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,$t $t0$t1 ALU $t2

6 Linguaggio Assembly Istruzioni Tipicamente una istruzione è strutturata in un add $t2,$t0,$t1 OPCODE Comando/modo di indirizzamenti lw $t2,variabile sw $t3,variabile

7 Linguaggio Assembly Istruzioni in SPIM (esempio) Tipicamente una istruzione è strutturata in un add $t0,$t1,$t2 OPCODE Comando/modo di indirizzamenti add $8, $9, $10 0x012a

8 Linguaggio Assembly Istruzioni in SPIM (esempio) Tipicamente una istruzione è strutturata in un lw $t1, pippo OPCODE Comando/modo di indirizzamenti lui $1, 4097 lw $9, 0($1) 0x3c x8c

9 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 BASIC C#C++CJavaPASCALBASICSIEBELCOBOLML

10 Linguaggi di programmazione Linguaggio C /*esempio1.c*/ void main() { int a, b, c; a=4; b=6; c=a+b; } Linguaggio assembler /*esempio1.s*/.text li $t1,4 li $t2,6 add $t0,$t1,$t2 Linguaggio macchina FUN REG VAL Ris. Registro $t2:

11 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,pippo lw $t2,paperino add $t0,$t1,$t2 li $v0,10 Syscall.data pippo:.word 11 paperino:.word 15.text.globl main main: lw $t1,pippo lw $t2,paperino add $t0,$t1,$t2 li $v0,10 Syscall.data pippo:.word 11 paperino:.word 15

12 Assemblatore LAssemblatore (Assembler) traduce programmi scritti nel linguaggio assembly in linguaggio macchina LAssemblatore: 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 FileSorgenteFileSorgente AssemblerAssembler FileOggettoFileOggetto

13 File Oggetto - Modulo Un modulo può contenere: Istruzioni (routine, sub-routine, ecc.) Dati Riferimenti a sub-routine e dati di altri moduli File Oggetto (riferimento ad altro modulo) File Oggetto (riferimento ad altro modulo)

14 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 File Sorgente Assembler FileOggettoFileOggetto Compilatore File Assembler

15 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: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. Main: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. LINKER Main: ….. Jal sub: …. Jal: printf …._______ Main: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______sub:….. …._______printf:…._______scanf:….printf:…._______scanf:….

16 Programma sorgente: indirizzi simbolici Compilatore: da indirizzi simbolici a indirizzi rilocabili (esempio: salto di 14 parole dallinizio 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 laltro di memoria Binding degli indirizzi File Sorgente FileOggettoFileOggetto Compilatore/ Assembler LINKER FileOggettoFileOggetto FILE ESEGUIBILE EXE

17 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: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. Main: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. Main: ….. Jal (a0) …. Jal: (a1) …._______sub:….. Jal (a2) …._______printf:…._______scanf:…. Main: ….. Jal (a0) …. Jal: (a1) …._______sub:….. Jal (a2) …._______printf:…._______scanf:…. Main: ….. Jal 132 …. Jal: 164 …._______sub:….. Jal 200 …._______printf:…._______scanf:…. Main: ….. Jal 132 …. Jal: 164 …._______sub:….. Jal 200 …._______printf:…._______scanf:…. 0 … …. 124…._____132…..140…._____164…._____200…. RIFERIMENTI RELATIVI RIFERIMENTI ASSOLUTI

18 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: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. Main: ….. Jal sub: …. Jal: printf …._______sub:….. Jal scanf …._______printf:…._______scanf:…. LINKER Main: ….. Jal sub: …. Jal: printf …._______ Main: ….. Jal sub: …. Jal: printf …._______ sub:….. Jal scanf …._______sub:….. …._______ printf:….printf:…. FILE ESEGUIBILE EXE

19 Eseguibile Disposizione 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 0x KERNEL 0x7FFFF000 NOT USED STACK $SP HEAP 0x DATA TEXT 0x R DATA 0x RESERVED

20 Linguaggi di programmazione Linguaggio C /*esempio1.c*/ void main() { int a, b, c; a=3; b=4; c=a+b; } Linguaggio assembler /*esempio1.s*/.text li $t1,4 li $t2,3 add $t0,$t1,$t2 Linguaggio macchina FUN REG VAL Ris. Registro $t2:

21 t0 t1 t2 t7 PC ALU SHIFTER STATUS MEM … CLOCK TRANCODIFICATORE


Scaricare ppt "Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli Dott. Franco Liberati."

Presentazioni simili


Annunci Google