Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoNicoletta Barone Modificato 10 anni fa
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 0111100010101011110101001010101 $t0 $t1 $t2 ALU
Linguaggio basato su valori numerici utilizzato dai computer per memorizzare ed eseguire programmi $t0 $t1 $t2 ALU
4
Linguaggio macchina Funzionamento base
000000 000001 000010 000011 000100 …… 010000 010001 011000 011001 ALU SHIFTER STATUS t0 t1 t2 … TRANCODIFICATORE t7 PC CLOCK
5
Linguaggio Assembly add $t2,$t0,$t1 0111100010101011110101001010101
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 $t0 $t1 $t2 ALU
6
Linguaggio Assembly Istruzioni
Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti add $t2,$t0,$t1 lw $t2,variabile sw $t3,variabile
7
Linguaggio Assembly Istruzioni in SPIM (esempio)
Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti add $t0,$t1,$t2 add $8, $9, $10 0x012a4020
8
Linguaggio Assembly Istruzioni in SPIM (esempio)
Tipicamente una istruzione è strutturata in un OPCODE Comando/modo di indirizzamenti lui $1, 4097 0x3c011001 lw $t1, pippo 0x8c290000 lw $9, 0($1)
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 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; } .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 Assembler File Oggetto
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
(riferimento ad altro modulo)
File Oggetto - Modulo File Oggetto (riferimento ad altro modulo) Un modulo può contenere: Istruzioni (routine, sub-routine, ecc.) Dati Riferimenti a sub-routine e dati di altri moduli
14
Compilatore File Sorgente 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 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: LINKER Main: ….. Jal sub: …. Jal: printf …. _______ sub: ….. Jal scanf …. _______ printf: …. _______ scanf:
16
Binding degli indirizzi
File Sorgente 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 Compilatore/ Assembler File Oggetto File Oggetto LINKER 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 RIFERIMENTI RELATIVI RIFERIMENTI ASSOLUTI Main: ….. Jal (a0) …. Jal: (a1) …. _______ sub: ….. Jal (a2) printf: scanf: 0 … …. 124 …. _____ 132 ….. 140 164 200 Main: ….. Jal 132 …. Jal: 164 …. _______ sub: ….. Jal 200 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 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
ALU SHIFTER MEM STATUS t0 t1 t2 … t7 PC
TRANCODIFICATORE t1 t2 … t7 PC CLOCK
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.