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

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Informatica Generale Marzia Buscemi
Linearizzazione di un sensore
Il Software.
Classe III A A.s – 2011 Sistemi di Elaborazione e Trasmissione dell’Informazione 4 ore settimanali (2 laboratorio) Docenti Prof. Alberto Ferrari.
Dalla scrittura all’esecuzione
Evoluzione dei linguaggi di programmazione
Procedure e funzioni A. Ferrari.
I linguaggi di programmazione
1 Classi di memorizzazione. 2 Definiscono le regole di visibilità delle variabili e delle funzioni quando il programma è diviso su più file Stabiliscono.
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
SPIM Esercizi. Esercizio 7 – load/store Il codice deve: Inserire in memoria la word 0x a Leggere questo dato e inserirlo in s0 Sommarci 5 Salvare.
Anno accademico Le classi di memorizzazione.
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Introduzione alla programmazione
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
TRADUZIONE DEL PROGRAMMA Una volta che un programma sia stato scritto in C, esso non può essere eseguito senza unulteriore traduzione. Ciò perché qualsiasi.
Funzioni definite dall’utente
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Struttura dei sistemi operativi (panoramica)
Sistema Operativo Architettura degli elaboratori 1 - A. Memo La gestione dei processi stallo 9 soluzione corretta si utilizzano un semaforo per.
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
Unità Didattica 2 I Linguaggi di Programmazione
memoria gestita staticamente:
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
Espressioni condizionali
Programmazione modulare nel linguaggio C
Programmazione in Java
Introduzione al linguaggio assembly del microprocessore a parte
Introduzione al linguaggio assemby del microprocessore a parte
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Lo sviluppo del software e i linguaggi di programmazione
G. Amodeo, C. Gaibisso Programmazione di Calcolatori Lezione VII Il compilatore e le sue opzioni Programmazione di Calcolatori: il compilatore e le sue.
INTERFACCIAMENTO ASSEMBLY - C++
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati.
1 Università di Pavia - corso di Calcolatori Elettronici C code: L1:g = g + A[i]; i = i + j; if (i != h) goto L1; MIPS code: L1:add $t1, $s3, $s3# $t1.
1 Università di Pavia - corso di Calcolatori Elettronici PROGETTO DI UN SISTEMA BASATO SU  P PROBLEMA REALE SVILUPPO HARDWARESVILUPPO SOFTWARE INTEGRAZIONE.
Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism Salvatore Orlando.
Calcolatori Elettronici Assemblatore, Linker e Loader
Dal problema all’ algoritmo
Elettronica Digitale (II Parte) 10-11_5 1 ELETTRONICA DIGITALE II (5) 6/12 Il processo di assemblaggio.
Calcolatori Elettronici Il Processore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Programmazione Assembly
CALCOLATORI ELETTRONICI
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Architettura di un calcolatore e linguaggio macchina.
Scrivere e compilare programmi
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Esercitazione 3 Introduzione allo SPIM Pseudo-Istruzioni
L’esecuzione dei programmi
Concetti Fondamentali sulla Programmazione
Esercitazione 4 Chiamate di procedure Claudia Raibulet
Il software Claudia Raibulet
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
1 System Call ancora Vediamo passo passo come funziona una SC.
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
Il Processore Il processore è la componente dell’unità centrale che elabora le informazioni contenute nella memoria principale L’elaborazione avviene eseguedo.
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Corso di Laurea in Informatica Architettura degli elaboratori a.a ISA e Asm: esempi e suggerimenti.
Transcript della presentazione:

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

Argomenti Linguaggi di programmazione Assemblatore Compilatore Linker (collegatore)

Linguaggio Macchina 0111100010101011110101001010101 $t0 $t1 $t2 ALU 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 000100 …… 010000 0000000000000100 010001 0000000000000011 011000 011001 ALU SHIFTER STATUS t0 t1 t2 … TRANCODIFICATORE t7 PC CLOCK

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 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 Comando/modo di indirizzamenti add $t0,$t1,$t2 add $8, $9, $10 100101010010000000010000 0x012a4020 00000001001010100100000000100000

Linguaggio Assembly Istruzioni 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

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 /*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

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

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

(riferimento ad altro modulo) 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

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

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:

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

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 ….. 100 …. 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:

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

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

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

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