1 / 21

Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli

Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli. Dott. Franco Liberati. Argomenti. Linguaggi di programmazione Assemblatore Compilatore Linker (collegatore). Linguaggio Macchina.

zenia-chang
Télécharger la présentation

Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Argomenti • Linguaggi di programmazione • Assemblatore • Compilatore • Linker (collegatore)

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

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

  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 $t2 ALU

  6. Linguaggio AssemblyIstruzioni • Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti add $t2,$t0,$t1 101001000000001 lw $t2,variabile 000001000011110 sw $t3,variabile 001001100010110

  7. Linguaggio AssemblyIstruzioni in SPIM (esempio) • Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti add $t0,$t1,$t2 add $8, $9, $10 100101010010000000010000 0x012a4020 00000001001010100100000000100000

  8. Linguaggio AssemblyIstruzioni in SPIM (esempio) • Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti lui $1, 4097 111100000000010001000000000001 0x3c011001 lw $t1, pippo 0x8c290000 lw $9, 0($1) 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++ C Java PASCAL BASIC SIEBEL COBOL ML

  10. Linguaggi di programmazione Linguaggio macchina FUNREG VAL 0010001000000100 00100100000001101010000000100100 Ris. Registro $t2: 0000000000001010 Linguaggio C /*esempio1.c*/ voidmain() { 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

  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; } .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 File Sorgente • 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 Assembler File Oggetto

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

  14. Compilatore FileSorgente • 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 Compilatore File Assembler Assembler File Oggetto

  15. Linker Main:…..Jal sub:…. Jal: printf …. _______ sub: ….. Jal scanf …. _______ printf: …. _______ scanf: …. • 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 LINKER Main:…..Jal sub:…. Jal: printf …. _______ sub: ….. Jal scanf …. _______ printf: …. _______ scanf: ….

  16. Binding degli indirizzi FileSorgente Compilatore/Assembler • 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 File Oggetto File Oggetto LINKER FILE ESEGUIBILEEXE

  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 RIFERIMENTI ASSOLUTI RIFERIMENTI RELATIVI 0…..100…. 124 …. _____ 132 ….. 140 …. _____ 164 …. _____ 200 …. Main:…..Jal 132…. Jal: 164 …. _______ sub: ….. Jal 200 …. _______ printf: …. _______ scanf: …. Main:…..Jal (a0)…. Jal: (a1) …. _______ sub: ….. Jal (a2) …. _______ printf: …. _______ scanf: …. Main:…..Jal sub:…. Jal: printf …. _______ sub: ….. Jal scanf …. _______ printf: …. _______ scanf: ….

  18. Eseguibile Main:…..Jal sub:…. Jal: printf …. _______ sub: ….. Jal scanf …. _______ printf: …. _______ scanf: …. Main:…..Jal sub:…. Jal: printf …. _______ • 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 sub: ….. Jal scanf …. _______ printf: …. LINKER FILE ESEGUIBILEEXE

  19. 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 • StackContiene i dati “locali” delle funzioni

  20. Linguaggi di programmazione Linguaggio macchina FUNREG VAL 0010001000000100 00100100000000111010000000100100 Ris. Registro $t2: 000000000000111 Linguaggio C /*esempio1.c*/ voidmain() { 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

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

More Related