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 0111100010101011110101001010101 $t0$t1 ALU $t2

4 Linguaggio macchina Funzionamento base t0 t1 t2 t7 PC ALU SHIFTER STATUS … CLOCK TRANCODIFICATORE 000000 0010001010000000 000001 0010010011000000 000010 1010000000100100 000011 000100 …… 0100000000000000000100 0100010000000000000011 …… 011000 011001 ……

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,$t1 0111100010101011110101001010101 $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 101001000000001 000001000011110 sw $t3,variabile 001001100010110

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 0x012a4020 100101010010000000010000 00000001001010100100000000100000

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

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 0010001000000100 0010010000000110 1010000000100100 Ris. Registro $t2: 0000000000001010

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 0001010101001010111110 (riferimento ad altro modulo) 011111111101111100001011111111011 File Oggetto 0001010101001010111110 (riferimento ad altro modulo) 011111111101111100001011111111011

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 ….. 100 …. 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 0x80000000 KERNEL 0x7FFFF000 NOT USED STACK $SP HEAP 0x10000000 DATA TEXT 0x04000000 R DATA 0x00000000 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 0010001000000100 0010010000000011 1010000000100100 Ris. Registro $t2: 000000000000111

21 t0 t1 t2 t7 PC ALU SHIFTER STATUS MEM … 0010001010000000 CLOCK TRANCODIFICATORE 0000000000000100 0000000000000011 0010010011000000 1010000000100100 0000000000000111


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

Presentazioni simili


Annunci Google