introduzione - GEOCITIES.ws

annuncio pubblicitario
Architettura degli
Elaboratori II
(canale P-Z)
Linguaggi e moduli
Dott. Franco Liberati
Argomenti




Linguaggi di
programmazione
Assemblatore
Compilatore
Linker (collegatore)
Linguaggio Macchina

Linguaggio basato su valori numerici utilizzato dai computer per
memorizzare ed eseguire programmi
0111100010101011110101001010101
$t0
$t1
$t2
ALU
Linguaggio macchina
Funzionamento base
000000
0010001010000000
000001
0010010011000000
000010
1010000000100100
000011
ALU
SHIFTER
STATUS
t0
t1
t2
…
t7
000100
……
010000
0000000000000100
010001
0000000000000011
……
011000
011001
……
TRANCODIFICATORE
PC
CLOCK
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
Linguaggio Assembly
Istruzioni

Tipicamente una istruzione è strutturata in un
OPCODE
Comando/modo di indirizzamenti
add $t2,$t0,$t1
101001000000001
lw $t2,variabile
000001000011110
sw $t3,variabile
001001100010110
Linguaggio Assembly
Istruzioni in SPIM (esempio)

Tipicamente una istruzione è strutturata in un
OPCODE
add $t0,$t1,$t2
Comando/modo di indirizzamenti
add $8, $9, $10
100101010010000000010000
0x012a4020
00000001001010100100000000100000
Linguaggio Assembly
Istruzioni in SPIM (esempio)

Tipicamente una istruzione è strutturata in un
OPCODE
lw $t1, pippo
Comando/modo di indirizzamenti
lui $1, 4097 111100000000010001000000000001
0x3c011001
lw $9, 0($1) 10001100001010010000000000000000 0x8c290000
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
Linguaggi di programmazione
Linguaggio C
Linguaggio assembler
Linguaggio macchina
/*esempio1.c*/
/*esempio1.s*/
FUN REG VAL
void main()
{
int a, b, c;
a=4;
b=6;
c=a+b;
}
.text
li $t1,4
li $t2,6
add $t0,$t1,$t2
0010001000000100
0010010000000110
1010000000100100
Ris. Registro $t2:
0000000000001010
Codice Sorgente

Programma scritto in linguaggio ad alto livello o assembly
.text
.globl main
void main()
{
int a, b, c;
a=4;
b=6;
c=a+b;
}
main:
lw $t1,pippo
lw $t2,paperino
add $t0,$t1,$t2
li $v0,10
Syscall
.data
pippo:
.word 11
paperino: .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
Sorgente
Assembler
File
Oggetto
File Oggetto - Modulo

Un modulo può contenere:

Istruzioni (routine, sub-routine,
ecc.)
 Dati
 Riferimenti a sub-routine e dati
di altri moduli
File Oggetto
00010101010
01010111110
(riferimento ad altro modulo)
01111111110
11111000010
11111111011
Compilatore

Il Compilatore traduce un
programma scritto in un
linguaggio ad alto livello in un:
File
Sorgente

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
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:
….
File
Sorgente
Binding degli indirizzi



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
Compilatore/
Assembler
File
Oggetto
File
Oggetto

LINKER



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 ESEGUIBILE
EXE
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
Main:
…..
Jal sub:
….
Jal: printf
….
_______
sub:
…..
Jal scanf
….
_______
printf:
….
_______
scanf:
….
Main:
…..
Jal (a0)
….
Jal: (a1)
….
_______
sub:
…..
Jal (a2)
….
_______
printf:
….
_______
scanf:
….
RIFERIMENTI ASSOLUTI
0
…..
100
….
124
….
_____
132
…..
140
….
_____
164
….
_____
200
….
Main:
…..
Jal 132
….
Jal: 164
….
_______
sub:
…..
Jal 200
….
_______
printf:
….
_______
scanf:
….
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:
….
LINKER
FILE ESEGUIBILE
EXE
Eseguibile
Disposizione in memoria



La memoria viene suddivisa in
segmenti
Ogni segmento viene utilizzato
per un particolare scopo
0x80000000
KERNEL
0x7FFFF000
NOT USED
STACK
HEAP
Segmenti principali:

Text: Contiene il codice dei
programma
 Data: Contiene i dati “globali”
dei programmi
 Stack Contiene i dati “locali”
delle funzioni
0x10000000
DATA
TEXT
0x04000000
R DATA
0x00000000
RESERVED
$SP
Linguaggi di programmazione
Linguaggio C
Linguaggio assembler
Linguaggio macchina
/*esempio1.c*/
/*esempio1.s*/
FUN REG VAL
void main()
{
int a, b, c;
a=3;
b=4;
c=a+b;
}
.text
li $t1,4
li $t2,3
add $t0,$t1,$t2
0010001000000100
0010010000000011
1010000000100100
Ris. Registro $t2:
000000000000111
ALU
SHIFTER
STATUS
t0
t1
t2
…
t7
MEM
TRANCODIFICATORE
0010001010000000
0010010011000000
1010000000100100
0000000000000100
PC
CLOCK
0000000000000011
0000000000000111
Scarica