PROGRAMMAZIONE MISTA. G. Frosini Programmazione mista Slide 1

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

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

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

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

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

SISTEMI DI NUMERAZIONE E CODICI

SISTEMI DI NUMERAZIONE E CODICI SISTEMI DI NUMERAZIONE E CODICI Il Sistema di Numerazione Decimale Il sistema decimale o sistema di numerazione a base dieci usa dieci cifre, dette cifre decimali, da O a 9. Il sistema decimale è un sistema

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

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

(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

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

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

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

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

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

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Dall Algoritmo al Programma Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni IL PROGRAMMA Gli algoritmi sono modelli di descrizione astratti e per controllarne il funzionamento devono essere

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

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

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

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

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

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

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

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

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

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

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Informazione analogica e digitale

Informazione analogica e digitale L informazione L informazione si può: rappresentare elaborare gestire trasmettere reperire L informatica offre la possibilità di effettuare queste operazioni in modo automatico. Informazione analogica

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

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

void funzioneprova() { int x=2; cout<<dentro la funzione x=<<x<<endl; } FUNZIONI 57. Cosa servono le funzioni? A spezzare il programma in diverse parti relativamente indipendenti fra loro, ovvero interagenti sono attraverso i parametri di input ed IL VALORE di uscita. In questo

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

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO

CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO CLASSE III A I.T.I. (ABACUS) SISTEMI DI ELABORAZIONE E TRASMISSIONE DEI DATI VERIFICA DI RECUPERO 1 Domanda [1 punto] Dato il formato in virgola mobile su 32 bit così definito (precisione singola): o 1

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

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15 WG TRANSLATE Pagina 1 di 15 Sommario WG TRANSLATE... 1 1.1 INTRODUZIONE... 3 1 TRADUZIONE DISPLAY FILE... 3 1.1 Traduzione singolo display file... 4 1.2 Traduzione stringhe da display file... 5 1.3 Traduzione

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

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

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

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni. Le funzioni in C I programmi C sono costituiti da definizioni di variabili e funzioni. Una definizione di funzione ha il seguente formato: tipo-ritornato nome-funzione(lista-parametri) { dichiarazioni

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

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

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

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

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

2 - Modifica. 2.1 - Annulla. 2.2 - Selezione finestra. S.C.S. - survey CAD system FIGURA 2.1

2 - Modifica. 2.1 - Annulla. 2.2 - Selezione finestra. S.C.S. - survey CAD system FIGURA 2.1 2 - Modifica FIGURA 2.1 Il menu a tendina Modifica contiene il gruppo di comandi relativi alla selezione delle entità del disegno, alla gestione dei layer, alla gestione delle proprietà delle varie entità

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

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

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

CPU. Maurizio Palesi

CPU. Maurizio Palesi CPU Central Processing Unit 1 Organizzazione Tipica CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus 2 L'Esecutore

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di un programma, cioè di una sequenza di istruzioni descritte nel linguaggio interpretabile dal calcolatore

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

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

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

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

Compilatore risorse display grafico LCD serie IEC-line

Compilatore risorse display grafico LCD serie IEC-line Compilatore risorse display grafico LCD serie IEC-line aggiornamento: 22-11-2012 IEC-line by OVERDIGIT overdigit.com 1. Il display grafico LCD I PLC della serie IPC-line possono disporre opzionalmente

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Laboratorio di Programmazione 1 1 Docente: dr. Damiano Macedonio Lezione 18 31/03/2014 Funzioni: Dichiarazione e Definizione La dichiarazione di una funzione serve a comunicare al compilatore quali sono

Dettagli

RISOLUTORE AUTOMATICO PER SUDOKU

RISOLUTORE AUTOMATICO PER SUDOKU RISOLUTORE AUTOMATICO PER SUDOKU Progetto Prolog - Pierluigi Tresoldi 609618 INDICE 1.STORIA DEL SUDOKU 2.REGOLE DEL GIOCO 3.PROGRAMMAZIONE CON VINCOLI 4.COMANDI DEL PROGRAMMA 5.ESEMPI 1. STORIA DEL SUDOKU

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli

La codifica delle informazioni

La codifica delle informazioni La codifica delle informazioni Bit e byte Come già visto l elaboratore è in grado di rappresentare informazioni al proprio interno solo utilizzando cifre binarie (bit) che solitamente vengono manipolate

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Versioni x.7.9 Note Operative

Versioni x.7.9 Note Operative Versioni x.7.9 Note Operative Le versioni x.7.9 sono state rilasciate per poter predisporre i dati per il cosiddetto spesometro 2013 o per la comunicazione delle operazioni IVA rilevanti utilizzando il

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

Codifica dei numeri negativi

Codifica dei numeri negativi E. Calabrese: Fondamenti di Informatica Rappresentazione numerica-1 Rappresentazione in complemento a 2 Codifica dei numeri negativi Per rappresentare numeri interi negativi si usa la cosiddetta rappresentazione

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Architettura del Calcolatore Macchina di von Neumann Il calcolatore moderno è basato su un architettura

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

Corso di Informatica Applicata. Lezione 3. Università degli studi di Cassino

Corso di Informatica Applicata. Lezione 3. Università degli studi di Cassino Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Corso di Informatica Applicata Lezione 3 Ing. Saverio De Vito e-mail: saverio.devito@portici.enea.it Tel.: +39

Dettagli

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti

Esercitazione Informatica I AA 2012-2013. Nicola Paoletti Esercitazione Informatica I AA 2012-2013 Nicola Paoletti 4 Gigno 2013 2 Conversioni Effettuare le seguenti conversioni, tenendo conto del numero di bit con cui si rappresenta il numero da convertire/convertito.

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

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE

Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE Note per generazione file.txt per invio trimestrale V.P. all AGENZIA DELLE ENTRATE Si tratta della funzione che consente di generare il file in formato testo (.TXT) che permette la spedizione all Agenzia

Dettagli

Leggere un messaggio. Copyright 2009 Apogeo

Leggere un messaggio. Copyright 2009 Apogeo 463 Leggere un messaggio SyllabuS 7.6.3.3 Per contrassegnare un messaggio selezionato puoi fare clic anche sulla voce di menu Messaggio > Contrassegna messaggio. Marcare, smarcare un messaggio I messaggi

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Gestione Risorse Umane Web

Gestione Risorse Umane Web La gestione delle risorse umane Gestione Risorse Umane Web Generazione attestati di partecipazione ai corsi di formazione (Versione V03) Premessa... 2 Configurazione del sistema... 3 Estrattore dati...

Dettagli

Lez. 3 L elaborazione (II parte) Prof. Pasquale De Michele Gruppo 2

Lez. 3 L elaborazione (II parte) Prof. Pasquale De Michele Gruppo 2 Lez. 3 L elaborazione (II parte) Prof. Pasquale De Michele Gruppo 2 1 Dott. Pasquale De Michele Dipartimento di Matematica e Applicazioni Università di Napoli Federico II Compl. Univ. Monte S.Angelo Via

Dettagli

Rappresentazione delle informazioni

Rappresentazione delle informazioni Rappresentazione delle informazioni Abbiamo informazioni (numeri, caratteri, immagini, suoni, video... ) che vogliamo rappresentare (e poter elaborare) in un calcolatore. Per motivi tecnologici un calcolatore

Dettagli

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c Caratteristiche MATLAB Linguaggio di programmazione orientato all elaborazione di matrici (MATLAB=MATrix LABoratory) Le variabili sono matrici (una variabile scalare equivale ad una matrice di dimensione

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

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014

Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014 Lezione 1: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 10 Marzo 2014 Ricorda... Il ciclo di esecuzione di un istruzione è composto da sei fasi: FETCH DECODE ADDRESS

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

Sottoprogrammi: astrazione procedurale

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

Dettagli

Richiesta pagina PHP (es: index.php)

Richiesta pagina PHP (es: index.php) PHP PHP = personal home page SERVER Richiesta pagina PHP (es: index.php) Server Web (Apache) in ascolto sulla porta 80, si accorge che la pagina richiesta è una pagina PHP in base all'estensione o con

Dettagli

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 10 Settembre 2013

ESAME SCRITTO DI ELEMENTI DI INFORMATICA E PROGRAMMAZIONE. 10 Settembre 2013 COGNOME E NOME: MATRICOLA: Civile Ambiente e Territorio Non si possono consultare manuali, appunti e calcolatrici. Esercizio 1: Rappresentare i numeri 37 e 90 (in base 10) in notazione binaria in complemento

Dettagli

http://www.programmiamo.altervista.org/c/oop/o...

http://www.programmiamo.altervista.org/c/oop/o... PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.

Dettagli