PROGRAMMAZIONE MISTA. G. Frosini Programmazione mista Slide 1

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "PROGRAMMAZIONE MISTA. G. Frosini Programmazione mista Slide 1"

Transcript

1 PROGRAMMAZIONE MISTA G. Frosini Programmazione mista Slide 1

2 Caratteristiche del processore PC Processore PC (Processore Completo): processore didattico; schematizzazione (software compatibile) dei processori a 32 bit della famiglia INTEL, funzionanti in modo protetto (x86-32); costituito da 2 unità di elaborazione visibili al programmatore: la ALU (Aritmetic and Logic Unit), che esegue le istruzioni generali e quelle sui numeri naturali e interi; la FPU (Floating Point Unit), che esegue le istruzioni sui numeri reali. Operandi manipolati dalle istruzioni della ALU: lunghi 8 bit (byte), 16 bit (parola) o 32 bit (parola lunga). Operandi manipolati dalle istruzioni della FPU: lunghi 80 bit. G. Frosini Programmazione mista Slide 2

3 Spazi di indirizzamento Funzionamento del Processore PC: senza memoria virtuale; con memoria virtuale paginata. Spazio di memoria senza memoria virtuale: lineare, e costituito da 2**32 locazioni di un byte, il cui indirizzo va da 0x a 0xFFFFFFFF. Spazio di memoria con memoria virtuale paginata: come sopra Spazio di I/O (sempre senza memoria virtuale): lineare; costituito da 2**16 porte da un byte, il cui indirizzo va da 0x0000 a 0xFFFF. G. Frosini Programmazione mista Slide 3

4 Registri (1) ST EAX EBX ECX EDX ESI EDI EBP ESP EIP EFLAG Altri ALU Registri generali Registri di stato FPU AX (AH, AL) BX (BH, BL) CX (CH, CL) DX (DH, DL) SI DI BP SP G. Frosini Programmazione mista Slide 4

5 Registri (2) Registri generali della ALU (32 bit): possono venir indifferentemente utilizzati o per memorizzare operandi o per contenere indirizzi di memoria. Alcuni di essi svolgono specifiche funzioni: registri ESP, EBP: servono a indirizzare la pila; ESP funge da puntatore alla cima della pila. EBP funge da registro base per una zona della pila; registri EAX, EDX: EAX funge principalmente da accumulatore ed EDX da estensione dell'accumulatore; registri ESI, EDI: fungono principalmente da registri indice; Registri generali della FPU (80 bit): organizzati a pila; il registro di testa della pila si chiama ST. G. Frosini Programmazione mista Slide 5

6 Registri (3) Registro di stato EIP (ALU): contiene l'indirizzo della prossima istruzione. Registro di stato EFLAG (ALU): costituito da due parti, ciascuna di 2 byte; la parte meno significativa contiene: i flag aritmetici PF (Parity), ZF (zero), CF (Carry), SF (Sign), OF (Overflow); i flag IF e TF relativi al meccanismo di interruzione; il flag DF utilizzato dalle istruzioni sulle stringhe OF DF IF TF SF ZF PF CF G. Frosini Programmazione mista Slide 6

7 Codifica delle istruzioni I-prefix (0/1 byte) O-prefix (0/1 byte) OC (1/2 byte) MODE (0/1 byte) SIB (0/1 byte) DISP (0/4 byte) IMM (0/4 byte) I-prefix (prefisso di istruzione): viene utilizzato per le istruzioni che operano sulle stringhe (REP, REPE, REPNE). O-prefix (prefisso di lunghezza): indica che la lunghezza degli operandi è di una parola, ogni qual volta il campo OC specifica una parola lunga. OC (Operation Code): specifica il codice operativo e la lunghezza degli operandi (byte o parola lunga). MODE e SIB (Scaled Index Base): indicano il modo di reperire gli operandi e il fattore di scala. DISP (DISplacement): contiene lo spiazzamento. IMM (IMMediate): contiene l'operando immediato. G. Frosini Programmazione mista Slide 7

8 Indirizzamenti per le istruzioni operative Indirizzamento di registro: operando in un registro del processore. Indirizzamento immediato: operando nell istruzione (campo IMM). Indirizzamento di memoria (una o due componenti possono mancare): indirizzo = base + indice*scala + spiazzamento modulo 2**32 base è il contenuto di uno dei registri generali; indice è il contenuto di uno dei registri generali; scala è un fattore che può valere 1, 2, 4 oppure 8; spiazzamento è un numero intero, di 8 bit o di 32 bit, contenuto nel campo DISP. G. Frosini Programmazione mista Slide 8

9 Indirizzamento di memoria Dalla forma generale derivano i seguenti indirizzamenti: diretto: è presente solamente lo spiazzamento; indiretto: è indicato solamente il registro base; modificato con registro base: sono indicati il registro base e lo spiazzamento (utilizzato per riferire le componenti di una struttura); modificato con registro indice e scala: sono indicati il registro indice, la scala e lo spiazzamento (utilizzato per riferire le componenti di un vettore); bimodificato senza spiazzamento: sono indicati un registro base ed un registro indice (con scala); bimodificato con spiazzamento: sono indicati un registro base, un registro indice (con scala) e lo spiazzamento. G. Frosini Programmazione mista Slide 9

10 Indirizzamenti per le istruzioni di controllo Indirizzo di salto: viene ottenuto nel modo seguente (indirizzamento relativo): indirizzo = EIP + spiazzamento modulo 2**32 spiazzamento è un numero intero, di 8 bit o di 32 bit, contenuto nel campo DISP; il salto può avvenire a indirizzi maggiori o a indirizzi minori rispetto a EIP. G. Frosini Programmazione mista Slide 10

11 Indirizzamenti per le istruzioni di I/O Indirizzo dalla porta: può essere specificato nell'istruzione (indirizzamento diretto, detto impropriamente immediato); può essere contenuto nel registro DX (indirizzamento indiretto, detto impropriamente di registro). Prima forma: possibile solo per indirizzi minori di 256. G. Frosini Programmazione mista Slide 11

12 AMBIENTE GCC Ambiente di programmazione utilizzato: GCC (GNU Compiler Collection); collezione di software di sviluppo del sistema GNU; contiene l Assemblatore, il Compilatore C e il Compilatore C++; può essere utilizzato su un calcolatore con sistema operativo Unix e processore INTEL x86-32 o x86-64; in un calcolatore che ha un processore x86-64, con opzioni appropriate, l ambiente GCC può elaborare anche file sorgenti contenenti codice relativo a un processore INTEL x86-32 e generare file eseguibili da un processore INTEL x Programma eseguibile prodotto: un file eseguibile prodotto per un processore INTEL x86-32 può essere eseguito anche da un calcolatore con processore INTEL x86-64 (che viene fatto operare, con opportune configurazioni di speciali registri di controllo, in modalità 32 bit). Nel seguito, considereremo file sorgenti con codice per un processore INTEL x86-32; file sorgenti contenenti codice Assembler sono legati al processore x86-32; file sorgenti contenenti codice C o codice C++ sono indipendenti dal processore utilizzato. G. Frosini Programmazione mista Slide 12

13 Assembler GCC per il processore PC (1) Forma di un commento: dal carattere # alla fine della linea corrente Forma di un istruzione Assembler: etichetta: codice-operativo sorgente, destinatario etichetta, sorgente, destinatario: possono mancare. Simbologia: codice operativo: specifica l operazione e la lunghezza degli operandi (b: byte; w: parola; l: parola lunga); %: deve essere messo prima del nome di un registro; $ deve essere messo prima di un operando immediato. Etichetta: lettere minuscole o lettere maiuscole sono differenti. Codice operativo, nome di un registro: lettere minuscole o lettere maiuscole sono equivalenti. G. Frosini Programmazione mista Slide 13

14 Assembler GCC per il processore PC (2) Istruzioni operative con indirizzamento di memoria: indirizzo di memoria: displacement( base, indice, scala) MOVL MOVL MOVL MOVL MOVL MOVL MOVL displacement(%ebp, %ESI, 4), %EAX (%EBP, %ESI, 4), %EAX displacement(, %ESI, 4), %EAX displacement(%ebp), %EAX (,%ESI, 4), %EAX (%EBP), %EAX displacement, %EAX displacement: può essere un numero intero, un etichetta, un espressione; scala: numero naturale che può valere 1, 2, 4 o 8: se vale 1, può essere omesso. G. Frosini Programmazione mista Slide 14

15 Assembler GCC per il processore PC (3) Istruzioni di salto: JMP etichetta JZ etichetta Istruzioni di I/O: INB INB %DX, %AL $25, %AL G. Frosini Programmazione mista Slide 15

16 Assembler GCC per il processore PC (4) Pseudo-istruzioni (iniziano con.):.byte valore # numero naturale o intero, o letterale carattere.word valore.long valore.float valore.double valore.quad valore.space numero-byte.fill numero-componenti, numero-byte-per-componente.ascii letterale stringa Direttive (iniziano anch esse con.):.text.data.align n # allineamento a indirizzo multipli di n, potenza di 2.INCLUDE "nome file" # nome del file da includere, con eventuale percorso.global nome,... # vedi slide successive.extern nome,... # vedi slide successive. G. Frosini Programmazione mista Slide 16

17 Programma Assembler (1) Programma Assembler: costituito da due sezioni, una sezione dati e una sezione testo; memorizzato su uno o più file, ciascuno detto file sorgente. in ogni file, sono presenti nessuna, una o più parti della sezione dati (pseudoistruzione.data), e nessuna, una o più parti della sezione testo (pseudoistruzione.text) Inizio del programma: etichetta _start, che deve essere dichiarata globale (direttiva.global). Fine del programma: risultato per il Sistema Operativo: va eventualmente lasciato nel registro ebx; per convenzione, quando vale 0, tutto si è svolto correttamente, mentre quando è diverso da 0, il valore costituisce la codifica di un errore. Sistema operativo Unix: il valore di ritorno precedente (utilizzando il linguaggio di script bash) è visibile attraverso la variabile $? (comando per vederne il valore: echo $?). Istruzioni di ritorno: MOVL, %EBX MOVL $1, %EAX # numero d ordine della primitiva Unix exit INT $0x80 G. Frosini Programmazione mista Slide 17

18 Programma Assembler (2).DATA... dati....text # sottoprogramma sottop:... RET # programma principale.global _start _start: CALL sottop MOVL, %EBX MOVL $1, %EAX INT $0x80 G. Frosini Programmazione mista Slide 18

19 Sviluppo di un programma Assembler con calcolatore x86-64 (1) Un file sorgente: deve avere estensione s; viene tradotto separatamente dagli altri, dando luogo a un nuovo file, il file oggetto (estensione o). Traduzione: avviene attraverso il programma Assemblatore; comando: as --32 nomefile.s o nomefile.o File oggetto ottenuti dalle traduzioni: devono essere collegati insieme per formare un unico file eseguibile (senza estensione); programma eseguibile contenuto nel file: viene costruito a partire da un indirizzo prestabilito. G. Frosini Programmazione mista Slide 19

20 Sviluppo di un programma Assembler con calcolatore x86-64 (2) Collegamento: avviene attraverso il programma Collegatore o Linker; comando: ld melf_i386 nomefile1.o. nomefilen.o o nomefile l opzione o nomefile può essere omessa, ed in questo caso il nome del file eseguibile è per default a.out (non esiste l estensione: tutti i caratteri presenti costituiscono il nome del file). File eseguibile: viene caricato in memoria, a partire da un indirizzo di caricamento effettivamente disponibile; viene eventualmente rilocato (modificato), per tener conto di questa nuova posizione, in genere diversa da quella per cui è stato predisposto. G. Frosini Programmazione mista Slide 20

21 Sviluppo di un programma Assembler con calcolatore x86-64 (3) Caricamento e rilocazione: avvengono per mezzo del programma Caricatore o Loader. comando:./nomefile Escuzione: il Caricatore: inizializza il puntatore di pila: pone in pila il valore del nuovo contatore di programma (corrispondente all'etichetta _start); esegue l istruzione RET. Programma costituito da un solo file: viene sviluppato secondo le fasi sopra elencate; il collegamento viene comunque effettuato, eventualmente con alcuni programmi di libreria, già tradotti una volta per tutte. G. Frosini Programmazione mista Slide 21

22 Calcolatore con processore x86-32 Comandi di traduzione e di collegamento precedenti: non si deve utilizzare l opzione 32 (comando as) e l opzione melf_i386 (comando ld). Comando di esecuzione precedente: valido anche in questo caso Nel seguito: useremo i comandi per un calcolatore con Sistema Operativo Unix e processore x G. Frosini Programmazione mista Slide 22

23 Rappresentazione grafica File sorgente File sorgente File sorgente Assemblatore Assemblatore Assemblatore File oggetto File oggetto File oggetto Collegatore File eseguibile (A partire da un indirizzo prefissato) Caricatore Programma in memoria G. Frosini Programmazione mista Slide 23

24 File ser.s Contiene due sottoprogrammi tastiera e video: tastiera: legge il successivo carattere battuto a tastiera e pone il suo codice ASCII nel registro AL; video: scrive su video il carattere il cui codice ASCII è contenuto in AL; tastiera e video utilizzano il servizio Unix 0x80 (opportuni parametri in EAX, EBX, ECX). Contiene una routine uscita: restituisce il controllo al Sistema Operativo; è composta dalle istruzioni (ipotesi: non ci sono stati errori): uscita: MOVL $0, %EBX MOVL $1, %EAX INT $0x80 Sottoprogrammi tastiera e video: effettuano ingresso/uscita a linee (I/O bufferizzato) ; i caratteri battuti a tastiera compaiono in eco su video e vengono effettivamente letti quando viene premuto il tasto ENTER; in lettura, ENTER viene riconosciuto come carattere '\n'; i caratteri inviati su video vengono visualizzati quando viene inviato il carattere '\n' (nuova linea); viene automaticamente inserito anche il carattere '\r' (ritorno carrello). G. Frosini Programmazione mista Slide 24

25 Programma codifica (1) # File codifica.s.global.data _start.text.include "ser.s" _start: ancora: CALL tastiera CMPB $'\n', %AL # carattere nuova linea JE fine CALL video # carattere in AL MOVB %AL, %BL MOVB $' ', %AL # carattere spazio CALL video G. Frosini Programmazione mista Slide 25

26 Programma codifica (2) MOVB $0, %CL # cl funge da contatore ciclo: TESTB $0x80, %BL # esame del bit piu significativo di BL JZ zero MOVB $'1', %AL CALL video JMP avanti zero: MOVB $'0', %AL CALL video avanti: SHLB $1, %BL # traslazione sinistra di BL INCB %CL CMPB $8, %CL JB ciclo MOVB $'\n', %AL # carattere nuova riga CALL video JMP ancora fine: JMP uscita G. Frosini Programmazione mista Slide 26

27 Programma codifica (3) File precedente: deve essere prima tradotto; il file tradotto deve essere poi collegato. Questo si ottiene con i comandi: as --32 codifica.s -o codifica.o ld melf_i386 codifica.o -o codifica Il file eseguibile (codifica) può essere caricato e mandato in esecuzione con il comando:./codifica G. Frosini Programmazione mista Slide 27

28 Nomi esterni e nomi globali (o pubblici) In un file si possono utilizzare nomi (o identificatori) definiti in altri file: tali nomi vanno dichiarati esterni. Nomi esterni: si dichiarano utilizzando la direttiva.extern:.extern nome,... Alcuni nomi (o identificatori) definiti in un file possono essere utilizzati da altri file: tali nomi vanno dichiarati globali (o pubblici). Nomi globali: si dichiarano utilizzando la direttiva.global:.global nome,... G. Frosini Programmazione mista Slide 28

29 Punto di inizio File sorgente Assembler: contiene uno spezzone di programma, che può prevedere il punto di inizio (entry_point) dell intero programma (simbolo _start). File principale: contiene l entry_point; ne deve esistere uno e uno solo. File secondari: altri file. Situazione comune: il file principale contiene dati e il programma principale con alcuni sottoprogrammi, mentre un file secondario contiene solo dati e sottoprogrammi. Indirizzo iniziale (_start): dichiarato globale, per renderlo visibile al Caricatore (consentendo al Caricatore l inizializzazione del registro EIP con tale indirizzo). In un file, i nomi non globali sono propri di quel file: uno stesso nome può essere utilizzato in file diversi e identifica entità diverse. G. Frosini Programmazione mista Slide 29

30 Programma codifica1 (1) Programma codifica1: due file: il primo contiene il programma principale, il secondo il sottoprogramma esamina, utilizzato dal primo file. Programma principale: legge caratteri fino al fine linea; per ogni carattere, lo stampa, richiama il sottoprogramma esamina, quindi stampa il risultato. Sottoprogramma esamina: restituisce otto caratteri, corrispondenti ai bit della codifica del carattere ricevuto. Trasmissione dei dati fra programma e sottoprogramma: due variabili alfa e beta definite nel secondo file (esterne nel primo file e globali nel secondo); alfa: contiene il codice del carattere, beta: contiene l'indirizzo della variabile risultato. il programma principale pone i dati in alfa e beta, quindi chiama esamina. G. Frosini Programmazione mista Slide 30

31 Programma codifica1 (2) # PROGRAMMA codifica1 # File principale codifica1a.s.extern alfa, beta, esamina.global _start.data kappa:.fill 8, 1.TEXT.INCLUDE "ser.s" _start: ancora: CALL tastiera CMPB $'\n', %AL JE fine CALL video MOVB %AL, %BL MOVB $' ', %AL CALL video MOVB %BL, alfa MOVL $kappa, beta CALL esamina MOVL $0, %ESI ripeti: MOVB kappa(%esi), %AL CALL video INCL %ESI CMPL $8, %ESI JB ripeti MOVB $'\n', %AL CALL video JMP ancora fine: JMP uscita G. Frosini Programmazione mista Slide 31

32 Programma codifica1 (3) # PROGRAMMA codifica1 # File secondario codifica1b.s.global alfa, beta, esamina.data alfa:.byte 0 beta:.long 0.TEXT esamina: PUSHL %EAX PUSHL %EBX PUSHL %ESI MOVB alfa, %AL # I dato MOVL beta, %EBX # II dato MOVL $0, %ESI ciclo: TESTB $0x80, %AL JZ zero MOVB $'1', (%EBX, %ESI) JMP avanti zero: MOVB $'0', (%EBX, %ESI) avanti: SHLB $1, %AL INCL %ESI CMPL $8, %ESI JB ciclo POPL %ESI POPL %EBX POPL %EAX RET G. Frosini Programmazione mista Slide 32

33 Programma codifica1 (4) File precedenti: devono essere prima tradotti; i file tradotti devono essere poi collegati. Questo si ottiene con i comandi: as --32 codifica1a.s -o codifica1a.o as --32 codifica1b.s -o codifica1b.o ld melf_i386 codifica1a.o codifica1b.o -o codifica1 Il file eseguibile (codifica1) può essere caricato e mandato in esecuzione con il comando:./codifica1 G. Frosini Programmazione mista Slide 33

34 Comando g++ (1) Il comando: g++ -m32 nomefile1.s nomefilen.s o nomefile richiama singolarmente l Assemblatore per i file nomefile1.s,, nomefilen.s, producendo N file oggetto; richiama il Collegatore per gli N file precedenti e alcuni file dei libreria, producendo il file eseguibile nomefile; l opzione o nomefile può essere omessa, ed in questo caso il nome del file eseguibile è a.out Uno dei file di libreria collegati: contiene l entry_point _start (nome definito globale); richiama il sottoprogramma main() (nome esterno); il sottoprogramma main() produce un risultato intero che deve essere lasciato in %EAX; al ritorno dal main(), restituisce il controllo al Sistema Operativo con le istruzioni: MOVL %EAX, %EBX MOVL $1, %EAX INT $0x80 Comando g++: per calcolatori con processore a 32 bit, non occorre l opzione m32. G. Frosini Programmazione mista Slide 34

35 Comando g++ (2) Organizzazione del file principale:.extern.global.data.text.include main:. main, "servizio.s" XORL %EAX, %EAX # anche MOVL $0, %EAX RET Uso del comando g++: vengono collegati anche file di libreria C++, compresi quelli relativi alle funzionalità di I/O del C++. Nuovo file di servizio: file servizio.s: contiene alcuni sottoprogrammi Assembler per effettuare letture e scritture, che utilizzano le funzionalità di I/O del C++. G. Frosini Programmazione mista Slide 35

36 File servizio.s (1) Scritture su video (I/O bufferizzato): - scrivicarattere: scrive su video il carattere la cui codifica ASCII si trova in AL; - scrivinaturale: converte il naturale espresso in base due contenuto in EAX in una sequenza di caratteri che rappresentano cifre in base sedici, e invia tale sequenza su video; - scriviintero: converte l intero espresso in base due contenuto in EAX in una sequenza di caratteri che rappresentano il numero intero in base dieci, e invia tale sequenza su video; - scrivireale: converte il reale contenuto in ST, espresso con mantissa e caratteristica in base due, in una sequenza di caratteri che rappresentano il numero reale in base dieci, e invia tale sequenza su video; - scrivispazio: invia su video il carattere spazio; - nuovalinea: invia su video il caratteri '\n' (viene automaticamente aggiunto il carattere '\r' ); G. Frosini Programmazione mista Slide 36

37 File servizio.s (2) Letture da tastiera (I/O bufferizzato): - leggisuccessivo: legge da tastiera il successivo carattere (anche uno spazio bianco) e pone la sua codifica ASCII in AL; - leggicarattere: salta eventuali spazi bianchi, legge da tastiera il successivo carattere diverso da spazio bianco e pone la sua codifica ASCII in AL; - legginaturale: salta eventuali spazi bianchi, legge da tastiera una sequenza di caratteri cifra in base sedici (che termina con il carattere spazio), la converte in un naturale in base due e lo pone in EAX; - leggiintero: salta eventuali caratteri bianchi, legge da tastiera un eventuale carattere segno e una sequenza di caratteri cifra in base dieci (che termina con il carattere spazio), la converte in un intero binario e lo pone in EAX. - leggireale: salta eventuali caratteri bianchi, legge da tastiera un eventuale carattere segno e una sequenza di caratteri che rappresenta un numero reale in base dieci (che termina con il carattere spazio), la converte in un reale con mantissa e caratteristica binarie e lo pone in ST. G. Frosini Programmazione mista Slide 37

38 Programma codifica2 (1) # PROGRAMMA codifica2 # File principale codifica2a.s.extern alfa, beta, esamina.global main.data kappa:.fill 8, 1.TEXT.INCLUDE "servizio.s" main: ancora: CALL leggisuccessivo CMPB $'\n', %AL JE fine CALL scrivicarattere CALL scrivispazio MOVB %AL, alfa MOVL $kappa, beta CALL esamina MOVL $0, %ESI ripeti: MOVB kappa(%esi), %AL CALL scrivicarattere INCL %ESI CMPL $8, %ESI JB ripeti CALL nuovalinea JMP ancora fine: XORL %EAX, %EAX RET G. Frosini Programmazione mista Slide 38

39 Programma codifica2 (2) # PROGRAMMA codifica2 # File secondario codifica2b.s # uguale al file secondario codifica1b.s.global alfa, beta, esamina.data alfa:.byte 0 beta:.long 0.TEXT esamina: PUSHL %EAX RET Sviluppo ed esecuzione del programma: g++ -m32 codifica2a.s codifica2b.s o codifica2./codifica2 G. Frosini Programmazione mista Slide 39

40 Programmi C++ su più file Semplici regole di collegamento: in un file, i nomi delle variabili definite fuori delle funzioni e i nomi di funzioni: sono implicitamente globali; possono essere riferite da altri file. in un file si possono riferire nomi definiti in altri file purché: vengano dichiarati esterni; siano globali nei file dove sono definiti. Dichiarazioni di nomi esterni: extern int var; extern void fun(int par1,, int parn); extern void fun(int,, int); // variabile // funzione G. Frosini Programmazione mista Slide 40

41 Programma codifica3 (in C++) (1) // Programma codifica3 // File principale codifica3a.cpp using namespace std; #include <iostream> extern char alfa; extern char* beta; extern void esamina(); char kappa[8]; int main() { char al; for(;;) { cin.get(al); if (al == '\n') break; cout << al << ' '; alfa = al; beta = &kappa[0]; } }; return 0; esamina(); for (int i=0; i<8; i++) cout << kappa[i]; cout << endl; // anche beta = kappa; G. Frosini Programmazione mista Slide 41

42 Programma codifica3 (in C++) (2) // PROGRAMMA codifica3 // File secondario codifica3b.cpp using namespace std; char alfa; char* beta; void esamina() { for(int i = 0; i < 8; i++) { if ((alfa & 0x80) == 0) *(beta+i) = '0'; else *(beta+i) = '1'; alfa = alfa<<1; } } // non necessario // anche beta[i] Sviluppo ed esecuzione del programma: g++ -m32 codifica3a.cpp codifica3b.cpp -o codifica3./codifica3 G. Frosini Programmazione mista Slide 42

43 Programmi misti (1) Programma GCC organizzato su più file: può essere scritto utilizzando linguaggi differenti per i vari file; ciascun file viene tradotto con il proprio traduttore, e tutti i traduttori producono file oggetto della stessa forma; viene utilizzato un unico collegatore, che produce il programma eseguibile. GCC, comando g++: richiama singolarmente i traduttori per i vari file; file con estensione c: richiama il Compilatore C; file con estensione cc o cpp: richiama il compilatore C++; i compilatori producono file Assembler, con estensione s; file con estensione s, compresi quelli generati nei punti precedenti: richiama l Assemblatore, che produce file con estensione o; richiama il collegatore, inserendo anche file di libreria. G. Frosini Programmazione mista Slide 43

44 Programmi misti (2) Compilatori C/C++: inseriscono le variabili globali, con i loro nomi nella sezione dati; inseriscono le funzioni, con nomi appropriati, nella sezione testo; i parametri e le variabili locali delle funzioni vengono manipolati per mezzo della pila. Intero programma: consistente solo se i differenti linguaggi utilizzati: fanno uso della stessa modalità di rappresentare dati; utilizzano nomi compatibili; utilizzano lo stesso standard per l'aggancio con i sottoprogrammi. Linguaggio C++ e Assembler: i file Assembler dovranno utilizzare lo standard proprio del compilatore C++.

45 Nomi C e nomi C++ Nomi di variabili globali e di funzioni C: sono uguali ai nomi Assembler. Nomi di variabili globali C++: come per il C. Nomi di funzioni C++: corrispondono a nomi Assembler ottenuti secondo regole complesse, che tengono conto del numero, del tipo e dell ordine degli argomenti formali; assicurano la possibilità di avere overloading; possono essere uguali ai nomi Assembler (avere la corrispondenza del C), purché si usi la dichiarazione extern "C". Ipotesi: al momento, per i nomi di funzione utilizzeremo la corrispondenza C (rinunciando ad avere overloading); esamineremo in un secondo momento, per i nomi di funzione, la corrispondenza secondo le regole C++. G. Frosini Programmazione mista Slide 45

46 Nomi esterni e globali C++ compatibili con nomi C Nomi esterni, definiti in un altro file e utilizzati in un file C++: variabile: extern int var; funzione: extern "C" void fun(); Nomi globali, definiti in un file C++ e utilizzati in un altro file: variabile: deve essere globale; funzione (sempre globale): extern "C" void fun() { // } La funzione main() definita in C++ è implicitamente extern "C". Attenzione! una funzione definita in C++ può modificare i registri. G. Frosini Programmazione mista Slide 46

47 Dati in C/C++ Elaboratori basati sul processore x86-32: variabile di tipo int: 4 byte, in complemento a 2; variabili di tipo double: 8 byte, con 1 bit di segno, 11 bit di esponente in traslazione, e 52 bit di mantissa; variabili di tipo bool: un byte, con valore 0 equivalente a false e valore 1 equivalente a true; variabili di tipo char: un byte, in codifica ASCII (con il bit più significativo uguale a 0); variabili di un tipo enumerato: un intero, il cui valore è dato dal numero d ordine dell enumeratore (identificatore), a partire da 0; variabili di un tipo puntatore: 4 byte (indirizzo di memoria). G. Frosini Programmazione mista Slide 47

48 Programma misto codifica4 (1) // Programma codifica4 // File principale codifica4a.cpp using namespace std; #include <iostream> extern char alfa; extern char* beta; extern "C" void esamina(); // unica differenza rispetto al file codifica3a.cpp char k[8]; int main() { char al; for(;;) { cin.get(al); if (al == '\n') break; cout << al << ' '; alfa = al; beta = &k[0]; // anche beta = k; esamina(); for (int i=0; i<8; i++) cout << k[i]; cout << endl; }; return 0; } G. Frosini Programmazione mista Slide 48

49 Programma misto codifica4 (2) # PROGRAMMA codifica4 # File secondario codifica4b.s, uguale al file codifica2b.s.global alfa, beta, esamina.data alfa:.byte 0 beta:.long 0.TEXT esamina: PUSHL %EAX RET G. Frosini Programmazione mista Slide 49

50 Programma misto codifica5 (1) # PROGRAMMA codifica5 # File principale codifica5a.s, uguale al file codifica2a.s.extern alfa, beta, esamina.global main.data kappa:.fill 8, 1.TEXT.INCLUDE "servizio.s" main: ancora: CALL leggisuccessivo fine: XORL %EAX, %EAX RET G. Frosini Programmazione mista Slide 50

51 Programma misto codifica5 (2) // PROGRAMMA codifica5 // File secondario codifica5b.cpp using namespace std; // non necessario char alfa; char* beta; extern "C" void esamina() // unica differenza rispetto al file codifica3b.cpp { for(int i = 0; i < 8; i++) { if ((alfa & 0x80) == 0) *(beta+i) = '0'; else *(beta+i) = '1'; // anche beta[i] alfa = alfa<<1; } } G. Frosini Programmazione mista Slide 51

52 Sviluppo delle versioni miste 4 e 5 Sviluppo della versione 4 g++ -m32 codifica4a.cpp codifica4b.s o codifica4./codifica4 Sviluppo della versione 5: g++ -m32 codifica5a.s codifica5b.cpp o codifica5./codifica5 G. Frosini Programmazione mista Slide 52

53 OPZIONI DEL COMANDO g++ Comando g++: con l opzione -nostdlib non collega nessun file di libreria (solo quelli esplicitamente elencati); in questo caso: non può più essere utilizzato il file servizio.s, ma solo il file ser.s; il programma principale deve avere la struttura vista per il comando as: # programma principale.data.text #include ser.s.global _start _start: JMP uscita G. Frosini Programmazione mista Slide 53

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit)

Processore PC. Spazio di indirizzamento. la ALU (Arithmetic and Logic Unit) la FPU (Floating Point Unit) Processore PC Faremo riferimento al cosiddetto processore PC, che rappresenta una schematizzazione dei processori a 32 bit presenti nei Personal Computer. Il processore è costituito da due unità fondamentali:

Dettagli

ARCHITETTURA DEI CALCOLATORI VOLUME I

ARCHITETTURA DEI CALCOLATORI VOLUME I Graziano Frosini ARCHITETTURA DEI CALCOLATORI VOLUME I ASSEMBLER E CORRISPONDENZA FRA C++ E ASSEMBLER CON RIFERIMENTO AL PERSONAL COMPUTER E ALL AMBIENTE DI PROGRAMMAZIONE DJGPP Copyright MMIX ARACNE editrice

Dettagli

SET/CLEAR LOAD DATA FROM STRING

SET/CLEAR LOAD DATA FROM STRING SET/CLEAR STD CLD AZIONE: Imposta ad 1 (STD) o a zero (CLD) il valore del flag DF. Sono istruzioni senza parametri. Vanno sempre messi!! FLAG di cui viene modificato il contenuto: Nessuno (a parte DF).

Dettagli

Architettura degli elaboratori (A)

Architettura degli elaboratori (A) Laurea in Informatica a.a. 2010-2011 Laboratorio del corso di Architettura degli elaboratori (A) Modulo 1: l Architettura dell 8086 Valeria Carofiglio Linguaggi a vari livelli e loro relazioni Programma

Dettagli

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio AXO Architettura dei Calcolatori e Sistema Operativo processo di assemblaggio linguaggio assembly è il linguaggio simbolico che consente di programmare un calcolatore utilizzando le istruzioni del linguaggio

Dettagli

Assembly. Modello x86

Assembly. Modello x86 Assembly Modello x86 1 Il microprocessore Un MICROPROCESSORE è un circuito integrato dotato di una struttura circuitale in grado di attuare un prefissato SET di ISTRUZIONI 2 Caratteristiche del microprocessore

Dettagli

Istruzioni di modifica della sequenza di elaborazione

Istruzioni di modifica della sequenza di elaborazione Istruzioni di modifica della sequenza di elaborazione Permettono di modificare la sequenza di esecuzione delle istruzioni di un programma, normalmente controllata dal meccanismo automatico di avanzamento

Dettagli

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000

AXO Achitettura dei Calcolatori e Sistema Operativo. Instruction Set Architecture (ISA) e 68000 AXO Achitettura dei Calcolatori e Sistema Operativo Instruction Set Architecture (ISA) e 68000 introduzione a ISA ISA - Instruction Set Architecture insieme delle istruzioni (instruction set) che possono

Dettagli

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C Università di Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Università di Roma Tre Facoltà di Scienze M.F.N. Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

INFORMATICA - I puntatori Roberta Gerboni

INFORMATICA - I puntatori Roberta Gerboni 1 2 I puntatori in C++ Il puntatore un tipo di dato scalare, che consente di rappresentare gli indirizzi delle variabili allocate in memoria. Dominio: Il dominio di una variabile di tipo puntatore è un

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

Corso Programmazione 1 Capitolo 01: Concetti Elementari

Corso Programmazione 1 Capitolo 01: Concetti Elementari Corso Programmazione 1 Capitolo 01: Concetti Elementari Docente: Roberto Sebastiani - roberto.sebastiani@unitn.it Esercitatori: Mario Passamani - mario.passamani@unitn.it Alessandro Tomasi - alessandro.tomasi@unitn.it

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H Architettura dei calcolatori e sistemi operativi Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H Sommario Il processo di assemblaggio Il collegatore (linker) 2 Assemblatore: traduzione

Dettagli

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++ ISTITUTO TECNICO INDUSTRIALE STATALE G A L I L E O F E R R A R I S DIISPENSA DII IINFORMATIICA E SIISTEMII AUTOMATIICII LA GESTIONE DEI FILE DI TESTO IN C++ Le classi per la gestione dei file. Il C++ è

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti Nascita di Java L uscita di Java, verso la metà degli anni novanta, fu accolta con molto entusiasmo dalla comunità dei programmatori e dei provider di servizi internet perché permetteva agli utenti del

Dettagli

Programmazione dello Z80

Programmazione dello Z80 Il microprocessore si incarica di: gestire il programma e i suoi dati di eseguire i calcoli richiesti. Le azioni appena elencate rendono necessario che il microprocessore abbia da qualche parte, al suo

Dettagli

Le stringhe. Le stringhe

Le stringhe. Le stringhe Informatica: C++ Gerboni Roberta Stringhe di caratteri (esempi di utilizzo dei vettori) Nel linguaggio C++ una stringa è semplicemente un vettore di caratteri Vettori di caratteri La stringa "hello" è

Dettagli

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. Generate debugging information FASE DEBUGGING: Prima della compilazione, si devono inserire 1 nel progetto informazioni per il debug cioè si devono visualizzare le opzioni di progetto seguendo il percorso: controllando che la voce Genera

Dettagli

Famiglia dei processori INTEL

Famiglia dei processori INTEL Famiglia dei processori INTEL 1975 2002 8080-8086 - 80286-80386 - 80486 - Pentium - Pentium II-III-IV - Itanium Compatibilità del SW (assemby) 8086 80286 80386 80486 Pentium Pentium III Perché studiare

Dettagli

Il livello architettura e set di istruzioni

Il livello architettura e set di istruzioni Corso di Informatica 2 Prof. Sciuto Il livello architettura e set di istruzioni Daniele Paolo Scarpazza Dipartimento di Elettronica e Informazione Politecnico di Milano 7 Giugno 2004 Daniele Paolo Scarpazza

Dettagli

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello):

Architettura (10/9/2003) Pag. 1/6. Cognome e Nome (in stampatello): Architettura (10/9003) Pag. 1/6 Esame di Architettura (matr.0-1) del 10/9003 Per Fondamenti di Architettura NON rispondere Per le domande a risposta multipla cerchiare la risposta scelta. Non alle domande

Dettagli

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086.

Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. I processori Intel Tutta la famiglia dei processori Intel (x86) si basa ed e' compatibile con il primo processore di questo tipo: l'8086. L'8086 e' un processore a 16 bit quindi i suoi registri potranno

Dettagli

Introduzione al Linguaggio C

Introduzione al Linguaggio C Introduzione al Linguaggio C File I/O Daniele Pighin April 2009 Daniele Pighin Introduzione al Linguaggio C 1/15 Outline File e dati Accesso ai file File I/O Daniele Pighin Introduzione al Linguaggio C

Dettagli

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine.

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine. Quinto Homework 1) Si vuole progettare una cache a mappatura diretta per un sistema a 32 bit per una memoria da 2 GB (quindi sono solo 31 i bit utili per gli indirizzi) e blocchi di 64 byte. Rispondere

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

ToolChain: Come Generare Applicazioni in Linguaggio Macchina ToolChain: Come Generare Applicazioni in Linguaggio Macchina Luca Abeni e Luigi Palopoli March 30, 2015 La Lingua della CPU Una CPU capisce e riesce ad eseguire solo il linguaggio macchina Linguaggio di

Dettagli

Alfabeto ed elementi lessicali del linguaggio C

Alfabeto ed elementi lessicali del linguaggio C Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2015-2016 Alfabeto ed elementi lessicali del linguaggio C Pietro Di Lena - pietro.dilena@unibo.it s t a t i c s h o r t l e g s ; i n

Dettagli

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013

Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 Operazioni Aritmetiche e Codici in Binario Giuseppe Talarico 23/01/2013 In questo documento vengono illustrate brevemente le operazioni aritmetiche salienti e quelle logiche ad esse strettamente collegate.

Dettagli

Caratteri e stringhe Esercizi risolti

Caratteri e stringhe Esercizi risolti Esercizi risolti 1 Esercizio: Conta vocali e consonanti Scrivere un programma in linguaggio C che legga una frase introdotta da tastiera. La frase è terminata dall introduzione del carattere di invio.

Dettagli

Il microprocessore 8086

Il microprocessore 8086 1 Il microprocessore 8086 LA CPU 8086 Il microprocessore 8086 fa parte della famiglia 80xxx della INTEL. Il capostipite di questa famiglia è stato l 8080, un microprocessore ad 8 bit che ha riscosso un

Dettagli

MULTIPROGRAMMAZIONE E PROTEZIONE. G. Frosini Multiprogrammazione e Protezione Slide 1

MULTIPROGRAMMAZIONE E PROTEZIONE. G. Frosini Multiprogrammazione e Protezione Slide 1 MULTIPROGRAMMAZIONE E PROTEZIONE G. Frosini Multiprogrammazione e Protezione Slide 1 SISTEMI MULTIPROGRAMMATI Sistema di elaborazione con un solo processore: può eseguire un solo programma alla volta;

Dettagli

I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi. Elementi di Assembly 8086

I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi. Elementi di Assembly 8086 I.T.I. A. RIGHI e VIII Napoli Specializzazione Informatica Tradizionale Corso D Materia: Sistemi Elementi di Assembly 8086 1 Assembly 8086 I registri Per poter elaborare le informazioni ricevute dall esterno,

Dettagli

L Assembler 8086. Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica

L Assembler 8086. Istruzioni Aritmetiche. M. Rebaudengo - M. Sonza Reorda. Politecnico di Torino Dip. di Automatica e Informatica L Assembler 8086 M. Rebaudengo - M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica 1 M. Rebaudengo, M. Sonza Reorda Si suddividono in: istruzioni per il calcolo binario istruzioni

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori Architettura degli Elaboratori Corso di Laurea Triennale in Informatica Università degli Studi di Bari Anno Accademico 2009-2010 Laboratorio lez1: il processore 8086/88 Prof. S.Pizzutilo I processori Intel

Dettagli

Dati testuali. Caratteri e stringhe. Tipi di dato testuali. Dati testuali. Il sistema dei tipi C. Rappresentazione dei testi

Dati testuali. Caratteri e stringhe. Tipi di dato testuali. Dati testuali. Il sistema dei tipi C. Rappresentazione dei testi Tipi di dato testuali Caratteri Stringhe Caratteri e stringhe 5 Tipi di dato testuali I programmi visti finora erano in grado di elaborare esclusivamente informazioni numeriche Numeri eri (), numeri reali

Dettagli

----------------------------------------------------------------

---------------------------------------------------------------- ---------------------------------------------------------------- utilizzo frequente di chiamate a.. A differenza del Pascal, il C permette di operare con assegnamenti e confronti su dati di tipo diverso,

Dettagli

Esercizi. Assembly. Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014

Esercizi. Assembly. Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 Esercizi Assembly Alessandro A. Nacci alessandro.nacci@polimi.it ACSO 2014/2014 1 RIPASSO Architettura dei registri del 68K Di (0 i 7): registri di dato a 8, 16, 32 bit Ai (0 i 7): resgistri di a 16, 32

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Programmazione L attività con cui si predispone l elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema Dati Input

Dettagli

Calcolatori Elettronici Parte X: l'assemblatore as88

Calcolatori Elettronici Parte X: l'assemblatore as88 Anno Accademico 2013/2014 Calcolatori Elettronici Parte X: l'assemblatore as88 Prof. Riccardo Torlone Università Roma Tre L'assemblatore as88 Disponibile presso: CD-ROM allegato al libro di testo del corso

Dettagli

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella Corso di Informatica Puntatori Anno Accademico 2010/2011 Francesco Tortorella Variabili, registri ed indirizzi Abbiamo visto che la definizione di una variabile implica l allocazione (da parte del compilatore)

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 2 Rappresentazione delle informazioni: numeri e caratteri 1 Codice La relazione che associa ad ogni successione ben formata di simboli di

Dettagli

Breve riepilogo della puntata precedente:

Breve riepilogo della puntata precedente: Breve riepilogo della puntata precedente: 1. In C, il passaggio dei parametri alle funzioni avviene sempre per copia, ovvero il valore del parametro viene copiato all'interno della variabile che rappresenta

Dettagli

Richiami di informatica e programmazione

Richiami di informatica e programmazione Richiami di informatica e programmazione Il calcolatore E una macchina usata per Analizzare Elaborare Collezionare precisamente e velocemente una grande quantità di informazioni. Non è creativo Occorre

Dettagli

ARCHITETTURA DEI CALCOLATORI

ARCHITETTURA DEI CALCOLATORI A09 139 Graziano Frosini Giuseppe Lettieri ARCHITETTURA DEI CALCOLATORI VOLUME II STRUTTURA DEL PROCESSORE, DEL BUS, DELLA MEMORIA E DELLE INTERFACCE, E GESTIONE DELL I/O CON RIFERIMENTO AL PERSONAL COMPUTER

Dettagli

puntatori Lab. Calc. AA 2007/08 1

puntatori Lab. Calc. AA 2007/08 1 puntatori Lab. Calc. AA 2007/08 1 parametri delle funzioni (dalla lezione scorsa) gli argomenti in C vengono passati by value dalla funzione chiamante alla funzione chiamata la lista degli argomenti viene

Dettagli

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE NOME: COGNOME: ============================================================== Esercizio 1 ci sono tante "righe"; non è detto servano tutte...

Dettagli

Linguaggio C Compilazione, linking e preprocessor

Linguaggio C Compilazione, linking e preprocessor FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Linguaggio C Compilazione, linking e preprocessor 2001 Pier Luca Montessoro

Dettagli

Introduzione ai linguaggi di programmazione

Introduzione ai linguaggi di programmazione Università degli Studi di Milano Laurea Specialistica in Genomica Funzionale e Bioinformatica Corso di Linguaggi di Programmazione per la Bioinformatica Introduzione ai linguaggi di programmazione Giorgio

Dettagli

Programmazione in Java (I modulo) Lezione 3: Prime nozioni

Programmazione in Java (I modulo) Lezione 3: Prime nozioni Programmazione in Java (I modulo) Lezione 3: Prime nozioni La volta scorsa Abbiamo avuto un primo assaggio! Abbiamo visto come usare l editor per scrivere un programma Java. Abbiamo analizzato riga per

Dettagli

Il simulatore SPIM SPIM

Il simulatore SPIM SPIM Il simulatore SPIM Architetture dei Calcolatori (lettere A-I) SPIM SPIM: un simulatore per eseguire programmi assembler scritti per processori MIPS32 Download e materiale relativo alla pagina Web http://www.cs.wisc.edu/~larus/spim.html

Dettagli

1 Organizzazione dell unità in virgola mobile (FPU)

1 Organizzazione dell unità in virgola mobile (FPU) 1 Organizzazione dell unità in virgola mobile (FPU) Il processore può maneggiare anche numeri reali, attraverso un modulo detto Floating-Point Unit (FPU). Storicamente, tale circuiteria è stata inizialmente

Dettagli

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 Programmazione I / Informatica generale Prova scritta 11 Giugno 2008 NOTA: Si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main. Inoltre, nei programmi è da sottintendere

Dettagli

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO

Corso Base. Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Corso Base Liceo Norberto Rosa Bussoleno Prof. Angelo GIORGIO Java Java è un Linguaggio di Programmazione orientato agli oggetti. Un Linguaggio di Programmazione è un linguaggio ad alto livello, dotato

Dettagli

Cenni ad Assembly Intel

Cenni ad Assembly Intel Cenni ad Assembly Intel Luca Abeni April 17, 2015 Architerrura Intel Utilizzata sulla maggior parte dei laptop, desktop e server moderni Lunga storia Dagli anni 70 (Intel 8080-8 bit!)......fino ad oggi

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C Università degli Studi di Cagliari Corso di Laurea in Ingegneria Biomedica (Industriale), Chimica, Elettrica, e Meccanica FONDAMENTI DI INFORMATICA 1 http://www.diee.unica.it/~marcialis/fi1 A.A. 2010/2011

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

Linguaggio C. Fondamenti. Struttura di un programma. Linguaggio C Fondamenti. Struttura di un programma. 1 La storia del Linguaggio C La nascita del linguaggio C fu dovuta all esigenza di disporre di un Linguaggio ad alto livello adatto alla realizzazione

Dettagli

Gestione dei File. dischi nastri cd

Gestione dei File. dischi nastri cd Gestione dei File Per mantenere disponibili i dati tra le diverse esecuzioni di un programma, questi si devono archiviare in file su memoria di massa (dati persistenti): dischi nastri cd Un file è un astrazione

Dettagli

Assembler Intel 80x86: Struttura di un programma e Direttive

Assembler Intel 80x86: Struttura di un programma e Direttive Assembler Intel 80x86: Struttura di un programma e Direttive Calcolatori Elettronici B a.a. 2004/2005 Massimiliano Giacomin 1 Istruzioni e direttive Formato generale dei comandi: [nome] codice operazione

Dettagli

Hardware di un Computer

Hardware di un Computer Hardware di un Computer Monitor Mouse Tastiera Printer Disk CPU Graphics Adapter USB Controller Parallel Port Disk Controller BUS Memoria RAM Memoria ROM (BIOS) DMA CPU esegue istruzioni, effettua calcoli,

Dettagli

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi : di base e applicativo L HardWare (monitor, tastiera, circuiti, stampante, ) è il nucleo fondamentale del calcolatore ma da solo non serve a nulla. Bisogna utilizzare il software per poterlo fare funzionare.

Dettagli

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 microprocessori Intel di terza generazione progetto originario del 1979, ancora oggi interessanti per: 1. motivi didattici: l architettura dei processori

Dettagli

Indice. Introduzione. I tipi aritmetici. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco A.A.

Indice. Introduzione. I tipi aritmetici. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco A.A. Variabili e Tipi Fondamentali in C++ (CAP 2, parte I) Alberto Garfagnini e Marco Mazzocco Università degli studi di Padova A.A. 2014/2015 Indice Tipi semplici propri del linguaggio Variabili Tipi composti

Dettagli

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment

Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio. IDE = Integrated Development Environment Bloodshed Dev-C++ Bloodshed Dev-C++ è l IDE usato durante le esercitazioni/laboratorio IDE = Integrated Development Environment Gerardo Pelosi 01 Ottobre 2014 Pagina 1 di 8 Dev-C++ - Installazione Potete

Dettagli

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza vers.0 in lavorazione Docente SAFFI FABIO Contenuti Implementazione delle operazioni di base mediante main in un unico file sorgente... 2 Struttura

Dettagli

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1

Fondamenti di Informatica PROBLEMI E ALGORITMI. Fondamenti di Informatica - D. Talia - UNICAL 1 Fondamenti di Informatica PROBLEMI E ALGORITMI Fondamenti di Informatica - D. Talia - UNICAL 1 Specifica di un algoritmo Primo approccio, scrittura diretta del programma: la soluzione coincide con la codifica

Dettagli

Linguaggio macchina. 73.1 Organizzazione della memoria. 73.1.1 Pila per salvare i dati. 73.1 Organizzazione della memoria... 37

Linguaggio macchina. 73.1 Organizzazione della memoria. 73.1.1 Pila per salvare i dati. 73.1 Organizzazione della memoria... 37 37 Linguaggio macchina Capitolo 73 73.1 Organizzazione della memoria.............................................. 37 73.1.1 Pila per salvare i dati............................................... 37 73.1.2

Dettagli

Linguaggi di Programmazione

Linguaggi di Programmazione Linguaggi di Programmazione Linguaggi di Programmazione Sintassi e semantica Compilatori, interpreti e il linker Introduzione al C La funzione main del C 2 Definizione 1 Un linguaggio è un insieme di parole

Dettagli

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896

(71,1), (35,1), (17,1), (8,1), (4,0), (2,0), (1,0), (0,1) 0, 7155 2 = 1, 431 0, 431 2 = 0, 862 0, 896 2 = 1, 792 0, 724 2 = 1, 448 0, 448 2 = 0, 896 2 Esercizio 2.2 La rappresentazione esadecimale prevede 16 configurazioni corrispondenti a 4 bit. Il contenuto di una parola di 16 bit può essere rappresentato direttamente con 4 digit esadecimali, sostituendo

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE

ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE ARCHITETTURA DI UN SISTEMA A MICROPROCESSORE 1. INTRODUZIONE In questo capitolo viene presentata la struttura, sia interna che esterna, di un microprocessore generico riprendendo i concetti esposti nella

Dettagli

Architettura del Set di Istruzioni (ISA)

Architettura del Set di Istruzioni (ISA) Architettura del Set di Istruzioni (ISA) Maurizio Palesi Maurizio Palesi 1 Instruction Set Architecture (ISA) Software instruction set Hardware Maurizio Palesi 2 1 Instruction Set Architecture (ISA) Applicazioni

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Architetture dei Calcolatori (Lettere. Installazione di SPIM. Interfaccia Grafica

Architetture dei Calcolatori (Lettere. Installazione di SPIM. Interfaccia Grafica SPIM Architetture dei Calcolatori (Lettere A-I) SPIM Ing.. Francesco Lo Presti Simulatore che esegue programmi assembler per architetture RISC MIPS R2000/R3000 Legge programmi in assembler MIPS e li traduce

Dettagli

CALCOLATORI ELETTRONICI II

CALCOLATORI ELETTRONICI II CALCOLATORI ELETTRONICI II L ASSEMBLATORE Microsoft MASM MASM Argomenti della lezione Faremo riferimento al linguaggio sorgente accettato dall assemblatore Microsoft MASM nelle versioni successive alla

Dettagli

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 05 La rappresentazione dell informazione Carla Limongelli Ottobre 2011 http://www.dia.uniroma3.it/~java/fondinf/ La rappresentazione

Dettagli

Nel microprocessore 8086 abbiamo una gran quantità di registri

Nel microprocessore 8086 abbiamo una gran quantità di registri I registri del microprocessore 8086 Nel microprocessore 8086 abbiamo una gran quantità di registri AH AL AX 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 B H B L BX 1 0 1 0 1 0 0 1 1 1 0 1 1 0 1 0 C H C L CX 1 0 1 1

Dettagli

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard)

BOZZA. cin per la comunicazione dal dispositivo di input standard, la tastiera, al programma (stream di input standard) Capitolo 6 Input/output su file BOZZA 6.1 Stream e file L input/output in C ++, in particolare quello su file, avviene tramite stream. stream. Uno stream è un astrazione di un canale di comunicazione,

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

Von Neumann. John Von Neumann (1903-1957)

Von Neumann. John Von Neumann (1903-1957) Linguaggio macchina Von Neumann John Von Neumann (1903-1957) Inventore dell EDVAC (Electronic Discrete Variables AutomaFc Computer), la prima macchina digitale programmabile tramite un soiware basata su

Dettagli

Testi di Esercizi e Quesiti 1

Testi di Esercizi e Quesiti 1 Architettura degli Elaboratori, 2009-2010 Testi di Esercizi e Quesiti 1 1. Una rete logica ha quattro variabili booleane di ingresso a 0, a 1, b 0, b 1 e due variabili booleane di uscita z 0, z 1. La specifica

Dettagli

Sottoprogrammi: astrazione procedurale

Sottoprogrammi: astrazione procedurale Sottoprogrammi: astrazione procedurale Incapsulamento di un segmento di programma presente = false; j = 0; while ( (j

Dettagli

PROGRAMMI DI SVILUPPO. G. Frosini - Programmi di sviluppo Slide 1

PROGRAMMI DI SVILUPPO. G. Frosini - Programmi di sviluppo Slide 1 PROGRAMMI DI SVILUPPO G. Frosini - Programmi di sviluppo Slide 1 Programmi di sviluppo considerati (1) Programmi di sviluppo: Traduttori (Assemblatore, Compilatore C, Compilatore C++), Collegatore, Caricatore.

Dettagli

AMBIENTE DI SIMULAZIONE ASIM

AMBIENTE DI SIMULAZIONE ASIM LABORATORIO DI ARCHITETTURA DEI CALCOLATORI lezione n 10 Prof. Rosario Cerbone rosario.cerbone@uniparthenope.it http://digilander.libero.it/rosario.cerbone a.a. 2008-2009 AMBIENTE DI SIMULAZIONE ASIM Digitazione

Dettagli

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2.

Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Capitolo Quarto...2 Le direttive di assemblaggio di ASM 68000...2 Premessa...2 1. Program Location Counter e direttiva ORG...2 2. Dichiarazione di dati: le direttive DS e DC...3 2.1 Direttiva DS...3 2.2

Dettagli

PD32. Esercitazione sull interfacciamento con un dispositivo di IO

PD32. Esercitazione sull interfacciamento con un dispositivo di IO PD32 Esercitazione sull interfacciamento con un dispositivo di IO Domanda #5 14/09/2000 Si dispone di un PD32 per effettuare il collaudo di un circuito integrato combinatorio con 5 ingressi e una uscita,

Dettagli

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi

Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009. Prof. Raffaele Nicolussi Fondamenti di Informatica Ingegneria Clinica Lezione 19/11/2009 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via B. Castiglione 59-00142 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni

Dettagli

Introduzione al Python

Introduzione al Python Andrea Passerini passerini@disi.unitn.it Informatica Caratteristiche procedurale si specifica la procedura da eseguire sui dati strutturato concetto di visibililtà delle variabili orientato agli oggetti

Dettagli

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1) Strutture Strutture e Unioni DD cap.10 pp.379-391, 405-406 KP cap. 9 pp.361-379 Strutture Collezioni di variabili correlate (aggregati) sotto un unico nome Possono contenere variabili con diversi nomi

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

Rappresentazione dell informazione Codifica Binaria

Rappresentazione dell informazione Codifica Binaria Fondamenti di Informatica Rappresentazione dell informazione Codifica Binaria Fondamenti di Informatica - D. Talia - UNICAL 1 Rappresentazione dell informazione Tutta l'informazione in un calcolatore è

Dettagli

Funzioni. Il modello console. Interfaccia in modalità console

Funzioni. Il modello console. Interfaccia in modalità console Funzioni Interfaccia con il sistema operativo Argomenti sulla linea di comando Parametri argc e argv Valore di ritorno del programma La funzione exit Esercizio Calcolatrice 2, presente in tutti i programmi

Dettagli

I sistemi di elaborazione

I sistemi di elaborazione 2 I sistemi di elaborazione 2.0 I sistemi di elaborazione c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 2.0 0 2 I sistemi di elaborazione Architettura

Dettagli

Corso di Calcolatori Elettronici I A.A. 2010-2011 Il processore Lezione 18

Corso di Calcolatori Elettronici I A.A. 2010-2011 Il processore Lezione 18 Corso di Calcolatori Elettronici I A.A. 2010-2011 Il processore Lezione 18 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Calcolatore: sottosistemi Processore o CPU (Central Processing

Dettagli

Sistemi Operativi 1. Mattia Monga. a.a. 2013/14. Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it.

Sistemi Operativi 1. Mattia Monga. a.a. 2013/14. Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it. 1 Mattia Monga Dip. di Informatica Università degli Studi di Milano, Italia mattia.monga@unimi.it a.a. 2013/14 1 cba 2008 14 M. Monga. Creative Commons Attribuzione Condividi allo stesso modo 4.0 Internazionale.

Dettagli

Struttura logica di un programma

Struttura logica di un programma Struttura logica di un programma Tutti i programmi per computer prevedono tre operazioni principali: l input di dati (cioè l inserimento delle informazioni da elaborare) il calcolo dei risultati cercati

Dettagli