Le istruzioni: il linguaggio dei calcolatori. Luigi Palopoli

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Le istruzioni: il linguaggio dei calcolatori. Luigi Palopoli"

Transcript

1 Le istruzioni: il linguaggio dei calcolatori Luigi Palopoli

2 Insieme delle Istruzioni Per impartire istruzioni al computer bisogna parlare il suo linguaggio Il linguaggio si compone di un vocabolario di istruzioni detto instruction set (IS) I vari tipi di processore hanno ciascuno il proprio IS. Tuttavia le differenze non sono eccessive Un utile esempio e quello delle inflessioni regionali di un unica radice linguistica

3 Instruction Set Come osservato da Von Nueman le istruzioni: certi [insiemi di istruzioni] che in linea di principio siprestano a controllare l Hardware Egli stesso osservava che le considerazioni davvero decisive sono di natura pratica: semplicita dei dispositivi richiesti chiarezza delle applicazioni velocita di esecuzionei Queste considerazioni scritte nel 1947 sono straordinariamente valide anche oggi

4 In queste lezioni Questa serie di lezioni vuole mostrare degli IS (in modo da vedere in seguito la realizzazione) Studieremo il concettodi programma memorizzato: Studieremo tre IS: MIPS INTEL ARM (cenni) Istruzioni e dati sono memorizzati come numeri

5 Perche il MIPS Il motivo per cui mostreremo e faremo esercizi con INTEL e abbastanza chiaro (qualche milione di PC sono basati su Intel o Intel compatibili) L architettura MIPS e invece un architettura RISC (in verita non diffusissima) Tuttavia E molto simile ad altre architetture RISC diffusissime (esempio ARM) L architettura INTEL fa una traduzione on the fly del proprio IS che viene tradotta internamente in un linguaggio RISC

6 Incominciamo.. Inzieremo dall IS MIPS A cominciare da Von Neuman si diceva che all interno di un IS: Devono necessariamente essere previste istruzioni per il calcolo delle operazioni aritmetiche fondamentali

7 Operazioni artimetiche E dunque naturale che l architettura MIPS supportile operazioni aritmetiche Per progettare un IS come quello del MIPS terremo conto di vari principi ispiratori Principio di Progettazione n. 1: La semplicita favorisce la regolarita

8 Istruzioni aritmetiche Il modo piu semplice di immaginare una istruzione aritmetica e a tre operandi: a = b + c Quindi l architettura del MIPS prevede soltanto istruzioni aritmetiche a tre operandi add a, b, c

9 Istruzioni piu complesse Istruzioni piu complesse si ottengono a partire dalla combinazione di istruzioni semplici. Es. a = b + c; d = a e; Diventa add a, b, c sub d, a, e

10 Esempio Neilinguaggi ad alto livello possiamoscrivere espressioni complesse a piacimento: f = (g+h) (i+j); Quando si traduce a basso livello bisogna per forza usare sequenzedi istruzioni elementari

11 Esempio Ad esempio la nostra espressione verra tradotta come mostrato di seguito add t0, g, h; #la variabile temp. # t0 = g + h add t1, i, j; #la variabile temp. # t1 = i + j sub f, t0, t1; # f = t0 t1

12 Un po di commenti Nell assembler MIPS i commenti iniziano con # e continuano fino alla fine della linea l operando destinatario dell operazione e sempre il primo Questo non vale per tutti gli assemblatori. Ad esempio se si usa gcc come assemblatore questo segue la sintassi AT&T per la quale: I commenti si fanno a la C /* commento */ L operando destinatario dell operazione e messo in fondo

13 Operandi Fino ad ora abbiamo usato gli operandi piuttosto allegramente (come se fossero normali variabili di un linguaggio ad alto livello) In realta nel MIPS gli operandi di operazioni aritmetiche sono vincolati ad essere registri Un registro e una particolarelocazionedi memoria che e interna al processore e quindi puo essere reperita in maniera velocissima (un ciclo di clock)

14 Registri del MIPS Il MIPS contiene 32 registri a 32 bit (64 nel caso di MIPS 64) Il vincolo di operare solo tra registri semplifica di molto il progetto dell hardware Ma perche solo 32 registri? Principio di Progettazione n. 2: minori sono le dimensioni, maggiore la velocita Avere molti registri obbligherebbe I segnali a spostarsi su distanze piu lunghe all interno del processore Quindi per effettuare uno spostamento all interno di un ciclo di clock saremmo costretti a rallentare il clock

15 Esempio (Ripreso) Torniamo al nostro esempio: f = (g+h) (i+j); Il codice con I registri diviene: add $t0, $s1, $s2; #Il registro temporaneo # t0 viene settato = # regist. s1+s2 add $t1, $s3, $s4; sub $s0, $t0, t1; # f = t1 t0

16 Osservazioni Nell assembler MIPS per indicare che un operando e un registro lo si fa precedere da $ Come abbiamo detto le operazioni aritmetiche e logiche si effettuano solo tra registri Il problema e che I registri non bastano Ci occorrono istruzioni di trasferimento che prelevino locazioni di memoria e li mettano nei registri (load) salvino il contenuto dei registri in memoria

17 La memoria La memoria e una sequenza di bit organizzati in gruppi di 8 (byte). Ciascun byte e associato ad un indirizzo lineare progressivo tramite il quale e possibile prelevarlo

18 Word Per quanto la maggior parte delle architetture permettano l accesso a ciascun byte la maggior parte delle volte si trasferiscano parole di dimensioni uguali ai registri Vincolo di allineamento: e possibile accedere solo a parole poste a indirizzi multipli dell ampiezza della parola

19 Trasferimento Per caricare una word (o un byte) devo specificarne l indirizzo Nell assembler MIPS l indirizzo si specifica tramite una base (in un registro) e uno spiazzamento o offset (costante) Come vedremo in altre architetture (esempio INTEL) c e molta piu flessibilita nello specificare l indirizzo

20 Load Il caricamento di una parola contenuta in indirizzo in un registro avviene tramite la seguente istruzione: lw $t0, 4($s3) Si sta operando su una parola Registro in cui si vuole caricare Spiazzamento Base L effetto di questa istruzione e di caricare in t0 la word all indirizzo dato da s3 + 4

21 Esempio Supponiamo divolere effettuarel istruzione A[12] = h + A[8] La traduzione in assembly MIPS lw $t0, 32($s3); # La parola 8 comincia #all indirizzo 32 e il #puntatore A e in s3 add $t0, $s2, $t0; #h e in s2 sw $t0, 48($s3); # memorizzo il contenuto del # registro temp. in A[12]

22 Register Spilling Tipicamente I programmi contengono piu variabili che registri :=) Quello che si fa e caricare le variabili in uso in un dato momento nei registri e scaricare quelle che non si usano piu in quel momento Questa operazione e chiamata register spilling ed e eseguita dal compilatore che stimail working set ed inserisce nel codice I carichi/scarichi appropriati Nell esempio precedente,magari l indirizzo di A serve ancora in s3 nelle istruzioni successive mentre forse h si puo scaricare da s2

23 Operandi immediati o costanti Molto spessonelleoperazioni aritmetiche almeno uno dei due operandi e costante Un possibile approccio puo essere di memorizzare la costante in un qualche indirizzo Esempio: f = f + 4; lw $t0, IndCost4($s1);# la costante 4 #e all indirizzo s1 + IndCost4 add $s3, $s3, $t0;

24 Operandi Immediati La soluzione cheabbiamo visto e piuttosto inefficiente Principio di Progettazione n. 3: rendi piu veloci possibile le operazioni comuni Per questo motivo esistono istruzioni che permettono di operare con costani f = f + 4; addi $s3, $s3, 4 Immediate

25 La costante 0 Esistono alcune costanti che possono essere di grande utilita per semplificare alcune operazioni Ad esempio per spostare un registro in un altro posso renderlo destinatorio della somma del sorgente con 0 Per questo motivo il MIPS dedica un registro $zero a contenere la costante0

26 Numeri Prima di parlare del modo in cui le istruzioni sono codificate attraverso numeri (rappresentate) ricordiamo: Nei calcolatori l unita base di informazione e il bit Un gruppo di 4 bit puo essere associato ad un numerofino a 16 che rappresenta una cifra nella notazione esadecimale Quindi un byte viene rappresentato da due cifre esadecimali (ciascuna corrispondente a 4 bit) Ad esempio D

27 Cifre esadecimali

28 Little e big endian Quando si memorizza una parola di quattro byte (o di 8) in una sequenza di byte posti a indirizzi progressivi va capito dove va il byte piu significativo e quello meno significativo. Esempio (esadecimale) 0XEA01BD1C Byte piu significativo Byte meno significativo

29 Little e big endian Little endian (ArchitettureMotorola, Protocolli Internet) EA01BD1C Big Endian (Intel) Addr 3 EA Addr 2 01 Addr 1 BD Addr 0 1C EA01BD1C Addr 3 Addr 2 Addr 1 Addr 0 1C BD 01 EA

30 Rappresentazione delle istruzioni Come I dati, anche un programma deve essere memorizzato in forma numerica Questo vuol dire che le istruzione che abbiamo introdotto simbolicamente (assembly) devono essere convertite in dei numeri (codice macchina) Cominciamo con un esempio

31 Esempio Consideriamo l istruzione add $t0, $s1, $s2 Per rappresentarla tramite un codice numerico univoco ci occorre: Un codice numerico che ci dica che si tratta di un add Altri codici numerici che ci dicano quali sono gli operandi il tutto in 32 bit

32 Risultato Il risultato rappresentato in decimale e il seguente: 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit (0) (17) (18) (8) (0) (32) I primi e gli ultimi bit codificano l istruzione Primo operando Secondo operando Risultato I registri sono numerati (es. s1 = 17, s2 = 18) e quindi possono essere specificati come operandi all interno del codice dell istruzione

33 Campi delle istruzioni MIPS In generale, e utile dare un nome ai vari campi relative al codice macchina di un istruzione 6 bit 5 bit 5 bit 5 bit 5 bit 6 bit OP rs rt rd shamt funct op: codice operativo dell istruzione rs: primo operando sorgente rt: secondo operando sorgente rd: operando destinazione shamt: shift amount (lo vedremo per alcune istuzioni) funct: definisce la funzionalita specifica dell istruzione (insieme a op). Ad esempio la sottrazione e un particolare tipo di addizione

34 Tradeoff Principio di Progettazione n. 4: un buon progetto richiede buonicompromessi Nel nostro caso il buon compromesso e di far stare le istruzioni in 32 bit Ci costa limite al numero di istruzioni limiteal numerodiregistri limite alle modalita di indirizzamento ma ci permette di guadagnare molto in efficienza

35 Istruzioni Immediate Abbiamo visto che ci sonoistruzioni di caricamento/salvataggio e somma con costanti che non possono ovviamente stare nelformato cheabbiamo visto (dettor, da registro) Per questo motivo esiste anche un formato per l indirizzamento immediato (detto I)

36 Istruzioni Immediate Il formato e il seguente 6 bit 5 bit 5 bit 16 bit OP rs rt costante o indirizzo Ad esempio: lw $t0, 32($s3) $s3 $t0

37 Esempio Supponiamo di vole tradurre in linguaggio macchinale seguentiistruzioni: A[300] = h + A[300]; La traduzione e la seguente: lw $t0, 1200($t1) add $t0, $s2, $t0 sw $t0, 1200($t1)

38 in codice macchina. Cominciamo con il guardare i codici decimali: Istruzione op rs rt rd Ind/Shamt Funct lw $t0, 1200($t1) add $t0, $s2, $t sw $t0, 1200($t1) In binario op rs rt rd Ind/Shamt Funct

39 Riassumendo Ciascuna istruzione viene espressa come un numero di 32bit Un programma consistedunque in una sequenza di numeri Tale sequenzaviene scrittain locaziomi consecuitve di RAM In momenti diversi, nella stessa RAM, possiamo rappresentare programmi diversi

40 Codici delle istruzioni viste fino ad ora

41 Elenco (quasi completo) delle istruzioni MIPS

42 Elenco (quasi completo) delle istruzioni MIPS

43 Operazioni Logiche I primi calcolatori operavano solo su parole intere Molto presto si manifesto la necessita di operare su porzioni di parole o addirittura sul singolo bit Il MIPS fornisce alcune istruzioni che permettono di fare questo in maniera semplificata (rispetto ad altre architetture) ma efficace

44 Shift logico La prima operazione che andiamo a vedere e il cosidetto shift logico a sinistra L idea e di inserire degli zeri nella posizione meno significativa e traslare tutto a sinistra perdendoi bit piu significativi Esempio consideriamo: eseguiamo: s0 = sll $t2, $s0, L effetto e di memorizzare in t2 144 (da 9 inizialmente presente in s0)

45 Il codice operativo Il codice operativo dell istruzione: e : sll $t2, $s0, 4 op rs rt rd Ind/Shamt Funct Da qui si comprende l utilita del campo shift amount

46 Effetto collaterale Un effetto collaterale di questa istruzione e moltiplicare il numero operandoper 2^I, dove I e il numero di elementi di cui si fa lo shift Questo funziona sempre? Esempio: s0 = Cosa succede se noi effettuiamo: Otteniamo: sll $t2, $s0, 1 t2 = (dec. 8) (dec ) Il problema e semplicementeche il numero non e rappresentabile.

47 Un caso diverso Se invece prendiamo: s0 = (dec.-2) Se effettuiamo: Otteniamo: sll $t2, $s0, 1 s0 = (dec.-4) Se rimaniamo nel range di rappresentabilita la moltiplicazioneper potenzedi 2 tramite shift funziona bene.

48 Shift a destra Analogamente allo shift logico a sinistra si puo avereuno shift logico a destra Esempio: s0 = Se effettuiamo: srl $t2, $s0,

49 Effetti collaterali Generalizzandoil ragionamento che abbiamo fatto prima, ci verrebbe di dire che lo shift a destra di I unita corrisponde a dividereper 2^I E corretto? Nell esempio fatto prima facendo lo shift a destra di 1 sul numero 9 abbiamoottenuto4 (che e il risultatodella divisioneintera) Consideriamoun altro esempio: s0 = (dec.-4) srl $t2, $s0, 1 Quello che si ottiene e un numero positivo e questo nonostanteil risultato dell operazionesia perfettamenterappresentabile:=(

50 Shift aritmetico Per risolvereil problema evidenziato si risolvecon lo shift aritmetico a destra. In sostanza quello che si inserisce a destra non sono bit ugualia 0 ma uguali al bit di segno Nel nostro esempio s0 = sra $t2, $s0, Risultato (corretto):

51 Shift aritmetico Notare che lo shift aritmetico non ha nessun senso fatto a sinistra In quel caso o il risultato e rappresentabile e lo shift logico funziona come artimetico o non lo e e non c e molto che si possa fare. Altre architetture offrono entrambi I tipi di shift MIPS essendo RISC fornisce solo l essenziale :=)

52 Altre operazioni logiche Il MIPS offrein aggiunta a quelle viste altre operazioni logiche Alcune di queste sono elencate di sotto:

53 AND bit a bit Le operazioni logiche operano su ciascun bit Esempio: t1 = t2 = Risultato: and $t0, $t1, $t2 t0 = L operazione and forza alcuni bit a 0 usando come operando una maschera (I cui bit corrispondenti a quellichesivoglionoannullare siano0)

54 OR bit a bit Analogamente e possibile settare a 1 alcuni bit facendo or con un operando che abbia 1 nella posizione corrispondente(maschera) Esempio: Supponiamo di volere impostare a 1 i 4 bit piu significativi di una word contenuta in s0. addi $t0,$zero,0x000f sll $t0, $t0,28 or $s0, $s0, $t0

55 Rotazione Esempio: Supponiamo di volere girare i quattro bit piu significative di una word sui suoi bit meno significativi

56 Esempio Primo passo s0 = srl $t0, $s0, 28 t0 = Second passo s0 = sll $s0, $s0, 4 s0 =

57 Esempio Terzo passo s0 = or $s0, $s0, $to s0 =

58 Il nor Supponiamo: t1 = t2 = nor$t0, $t1, $t2 Risultato: t0 =

59 Lo strano caso del not Il not normalmente e un operatore unario Per i progettisti MIPS tutte le operazioni artimetiche hanno tre operandi di tipo registro Per questo motivo si e deciso di non fornire il not ma il nor Il not si ottiene dal nor molto facilmente nor $s0, $s0, $zero #equivale a not s0

60 Or esclusivo Oltre che AND, OR, NOR abbiamo anche un supporto per l OR esclusivo (XOR) Ricordiamo che l OR esclusivo produce 1 se e solo se I due bit operandi sono uno e zero (e zero negli altri casi). t1 = t2 = Risultato: xor$t0, $t1, $t2 t0 =

61 Esempio Cosa succede se facciamo? xor $t0, $t0, $t0 Il risultato e quello di annullare il valore di t0 E una maniera molto veloce ed efficiente per annullare un registro Ricordare A XOR B = (A AND NOT(B)) OR (NOT(A) AND B)

62 Istruzioni per prendere decisioni Una delle caratteristiche fondamentali dei calcolatori (che li distinguono dalle calcolatrici) e la possibilita di alterare il flusso di programma al verificarsi di certe condizioni costrutto if nelle varie forme Il linguaggio macchina delle varie architetture supporta questa possibilita fornendo istruzioni di salto condizionali Tipicamente questo avviene sulla base del valore di un registro di flag di stato Nel caso le condizioni per il salto sono esplicite nell istuzione di salto

63 Salto su condizioni Le due istruzioni di salto condizionale sono: beq reg1, reg2, L1 bne reg1, reg2, L1 Se il registro reg1 e uguale al registro reg2 effettua un salto all istruzione con etichetta L! Se il registro reg1 e diverso dal registro reg2 effettua un salto all istruzione con etichetta L!

64 Costrutto if Supponiamo di avere il seguente codice C. Come viene tradotto? if (i == j) f = g + h; else f = g h;

65 Costrutto if Traduzione costrutto if precedente: bne $s3, $s4, ELSE #Salta a ELSE se s3 div. da s4 add $s0, $s1, $s2 #f = g + h j ESCI # Salto incond. a ESCI ELSE: sub $s0, $s1, $s2 # f = g - h ESCI: Alcune osservazioni Le label vengono alla fine tradotte in indirizzi Per fortuna questo lavoro noioso e opera del compilatore

66 Cicli La struttura che abbiamo presentato puo essere usata anche per realizzare dei cicli Consideriamo l esempio: Traduzione: while (salva[i] == k) i += 1; Ciclo: sll $t1, $s2, 2 #Registro temp. t1 = 4*I add $t1, $t1, $s6 #Ind di salva[i] in t1 lw $t0, 0($t1) #salva[i] in t0 bne $t0, $s5, Esci #Esci se raggiunto limite addi $s2, $s2, 1 #i = i+1 j Ciclo Esci:.

67 Commenti Le sequenze di istruzioni di salto condizionato (conditional branch) sono cosi importanti che viene dato loro un nome: blocchi di base Blocco di base: seq. di istruzioni che non contiene istuziomi di salto (con l eccezione dell ultima) ne etichette di destinazione (con l eccezione dela prima) Una delle prime fasi della compilazione e di individuare I blocchi base Tutti I cicli in linguaggio ad alto livello vengono implementati co blocchi di base.

68 Altri confronti Oltre al salto su operandi uguali o diversi, e utile avere un salto anche su operandi minori/maggiorio minori uguali Il modo di fare del MIPS e tramite istruzioni che settano il valore di registri flag La prima di queste e setta se minore o uguale slt $t0, $s3, $s4 #t0 = 1 se s3 < s4 Di questa istruzione esiste anche una variante immediata: slti $t0, $s3, 10 #t0 = 1 se s3 < 10 I compilatorimips ottengono I salti su condizioni di tipo minore o uguale combinando SLT con BEQ, o BNE e usando la costante 0 per fare I test

69 Esempio Consideriamo il codice Traduzione if (i < j) f = g + h; else f = g h; slt $t0, $s3, $s4 #setta t0 se se i < j beq $t0, $zero, ELSE #Salta a ELSE se s3 div. da s4 add $s0, $s1, $s2 #f = g + h j ESCI # Salto incond. a ESCI ELSE: sub $s0, $s1, $s2 # f = g - h ESCI:

70 Signed e unsigned L esito del confronto e ovviamente diverso se si tiene conto del segno oppure no. Per questo motivo troviamo due versioni di SLT (SLTU, SLTUI) cheoperano suinteri senza segno

71 Esempio Si supponga che s0 = s1 = Cosa produce? slt $t0, $s0, $s1 E cosa t0 = 1 sltu $t0, $s0, $s1 t0 = 0

72 Un piccolo trucco Supponiamo di volere controllare se un indice (s1) e fuori dal limite di un array ([0, t2]) Ce la possiamo cavare con un solo confronto Perche? sltu $t0, $s1, $t2 beq $t0, $zero, FuoriLimite Se s1 e maggiore di t2, ovviamente avremo 0 in t2 Ma anche se s1 e negativo, interpretato come unsigned, sara maggiore di t2 (che ha il bit piu significativo a 0)

73 Il costrutto case/switch Una possibilita e quella di effettuare una sequenzain cascatadiif-then-else In realta esiste una tecnica diversa Memorizzare i vari indirizzi dove eseguire il codice in una tabella (una sequenza di word) Caricare in un registro l indirizzo cui si deve saltare fare un salto all indirizzo puntatodal registro (jr)

74 Il costrutto case/switch Esempio: switch(a) { case 1: <code 1>; case 2: <code 2>;.. }; Tabella dove memorizzo gli indirizzi dei codici sll $t0, $a0, 2 #moltiplica per 4 lw $t0, TABLE($t0) jr $t0 Salto all indiriizzo nel registro

75 Procedure L utilita di un compute sarebbe molto limitata se non si potessero chiamare procedure (o funzioni) Possiamo pensare a una procedure come a una spia che fa del lavoro per noi senza che noi vogliamo sapere come lo fa La cosa importante e di mettersi d accordo su un protocollo

76 Protocollo 1. metter i parametri in un posto noto 2. trasferire il controllo alla procedura 1. Acquisire le risorse necessarie 2. Eseguire il compito 3. metterei valori di ritorno in posti noti 4. Restituire il controllo al chiamante 3. Prendersi il valore di ritorno e cancellare le traccie

77 Protocollo Il modo in cui questo protocollo viene messo in pratica dipende dall architettura e dalle convenzioni di chiamata del compilatore Ci limitiamo a pochi cenni per il MIPS

78 Protocollo di chiamata MIPS L idea di base e di cercare di laddove possibile i registri, perche sono il meccanismo piu veloce per effettuare il passaggio dei parametri Convenzione per il MIPS $a0,..$a3: usati per i parametri in ingresso $v0, $v1 : valori di ritorno $ra : indirizzo di ritorno per tornare al punto di partenza

79 Protocollo di chiamata MIPS Oltre ai registri, l hardware MIPS mette a disposizione l istruzione di jump and link (JAL) che effettua il salto e contemporaneamente memorizzain ra l indirizzo di ritorno L indirizzo che viene salvato in ra e il PC (program counter) incrementatodi 4 (istruzionesucessiva alla jal) Alla fine della procedura sara sufficiente fare un salto jr $ra

80 e se i registri non bastano? In certi casi I registri non bastano perche ho piu parametri di quanti ne possano contenere I registri In tal caso si una lo stack, una struttura dati gestita con disciplina FIFO in cui e possibile mettere a partire da una posizione nota alla procedura (puntata dal registro fp) I parametri in piu Lo stack si puo usare anche mettere variabili locali (tramite un operazione di push) e salvare registri che occorrera ripristinare in seguito Alla fine della procedura si puo ripulire lo stack (operazione pop) riportandolo alla situazione precedente

81 Esempio Consideriamo la procedura in C: int esempio_foglia(int g, int h, int i, int j) { int f; } f = (g+h) (i+j); return f; Cerchiamo di capire come verrebbe tradotta

82 Prologo Per prima cosa il compilatore sceglie un etichetta associata all indirizzo di entrata della procedura (esempio_foglia) In fase di collegamento (linking) l etichetta sara collegata a un indirizzo La prima operazione e quella di salvare in memoria tutti I registri che la procedura usa in modo da poterli ripristinare in seguito Tale fase e chiamata prologo e potrebbe richiedere di allocare nello stack anche spazio per le variabili locali (se i registri non bastano).

83 Uso dei Registri Parametri in input - g = $a0; h=$a1; i=$a2: j=$a3 Variabile locale f: $s0 Usiamo a titolo di esempio anche I registri $t0 e $t1 (cosa che nessun compilatore farebbe) Supponiamo, sempre a titolo di esempio, di dover salvere $s0, $t1 e $t0

84 Prologo La procedura us I registri s0, t0, t1; Il registro SP punta alla testa dello stack (che si evolve verso il basso) Il codice del prologo e il seguente: Decrementiamo sp di 12, per far posto a 3 word esempio_foglia: addi $sp, $sp, -12; sw $t1, 8($sp) sw $t0, 4($sp) sw $s0, 0($sp) Salvataggio di t1 in sp+8 Salvataggio di s0 in sp+0

85 Esecuzione della procedura Dopo il prologo, l esecuzione della procedura: In t0 mettiamo g+h add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 In t1 mettiamo i+j In s0 (g+h)-(i+j)

86 Epilogo Dopo aver eseguito la procedura, si ripristinano i registri usati e si setta il valore di ritorno Trasferiamo s0 in v0 (valore di ritorno) add $v0, $s0, $zer0 lw $s0, 0($sp) lw $t0, 4($sp) lw $t1, 8($sp) addi $sp, $sp, 12 jr $ra Salto al punto da dove sono arrivato Ripristino I registri prelevando i valori esattamente da dove li avevomessi Ripristino lo stack (tutto cio che e sotto sp non e significativo)

87 Evoluzione dello stack Stack prima della chiamata Stack durante l esecuzione della procedura Stack dopo la chiamata

88 Un bagno di realta Nessun compilatore farebbe mai questo Infatti I registri temporanei *non* devono essere salvaguardati L uso di $s0 era non necessario (potevamo lavorare direttamentesu $t0 e $v0)

89 Ulteriori complicazioni In realta le cose possono complicarsi per via di Variabili locali Procedure annidate Questo si risolve usando sempre lo stack e allocandovi dentro variabili locali e valori del registro ra Vediamo un esempio

90 Procedure ricorsiva Consideriamo il seguente esempio int fact(int n) { if (n < 1) return 1; else return n*fact(n-1); } Qui (ma sarebbe lo stessocon una qualsiasi funzione che chiama un altra funzione) abbiamo due problemi: sovrascrittura di $ra che mi renderebbe impossibileil ritorno una volta finita la chiamata innestata. Sovrascrittura di $a0 usato per il registro n

91 Procedure ricorsiva Soluzione: salvaguardare il registro $ra, a0 Vediamo la soluzione Primo step: creiamo spazio nello stack e salviamo ra e a0 Fact: addi $sp, $sp, -8 #Ci serve spazio per due oggetti sw $ra, 4($sp) #Salviamo ra sw $a0, 0($sp) #Salviamo a0 Secondo step, testiamo se n <1 (ritornando 1 in caso affermativo): slti $t0, $a0, 1 #t0 settato a 1 se n < 1 beq $t0, $zero, L1 #Se n > 1 saltiamo a L1

92 Procedure ricorsiva Se n < 1 chiudiamo la procedura addi $v0, $zero, 1 #metodo del MIP per mettere in v0 1 addi $sp, $sp, 8 #Ripuliamo lo stack jr $ra #Ritorniamo all indirizzo di ritorno nota che non ripristiniamo ra e a0 (come si farebbe normalmente, perchè non li abbiamo cambiati) Se n > 1 decrementiamo n e richiamiamo fact L1: addi $a0, $a0, -1 #decrementiamo n jal fact #chiamiamo fact(n-1)

93 Procedure ricorsiva A questo punto ripristiniamo a0 e ra e ripuliamo lo stack lw $a0, 0($sp) #Ripristino a0 lw $ra, 4($sp) #Ripristino ra addi $sp, $sp, 8 #ripulisco stack Non ci resta che moltiplicare fact(n-1), che è in v0, per n e ritornare mul $v0, $a0, $v0 jr $ra

94 Storage class Le variabili in C sono in genere associate a locazioni di memoria Si caratterizzano per Tipo (int, char, float) Storage class Il C ha due possibili storage class Automatic (variabili locali che hanno un ciclo di vita collegata alla funzione) Static sopravvivono alle chiamate di procedura. Sono essenzialmente variabili globali o definite dentro funzioni come static Le variabili statiche sono memorizzate in una zona di memoria (nel MIPS accessibile attraverso il registro global pointer, $GP)

95 Variabili locali L ultimo problema è costituito dalle variabili locali Quando sono poche, si riescono a usare registri Quando sono tante (ad esempio struct complesse o array) non ci sono abbastanza registri Quello che sifa è allocare le variabili locali nello stack

96 Record di attivazione Il segmento di stack che contiene registri salvati e variabili locali relative a una funzione viene chimata record di attivazione (o stack frame) Le variabili locali vengono individuate tramite un offset a partire da un puntatore Il puntatore $sp è alle volte scomodo come base perchè cambia durante l esecuzione della funzione Il registro $fp (frame pointer) viene sempre mantenuto costante durante la funzione e può essere usato come base.

97 Evoluzione dello stack $fp $fp $sp $fp Saved arguments registers $sp Saved return address $sp Saved registers Saved registers Prima della chaimata Durante la chiamata Dopo la chiamata

98 Dati dinamici In aggiunta a variabili globali e variabili locali abbiamo anche le variabili dinamiche (quelle che vengono allocata con malloc/free, new/delete) Il MIPS adotta il seguente schema di memoria $sp stack Lo stack procede per indirizzi decrescenti $gp $pc Dynamic data Static Data Text Resrved Lo heapprocede per indirizzi crescenti

99 Convenzioni sui registi In base alle convenzioni, l uso dei registri è nella sequente tabella Nome Numero Uso Preservare $zero 0 Valore costante 0 n.a. $v0 - $v1 2-3 Valori di ritorno per chiamate di funzioni e valuazione di espressioni $a0-$a3 4-7 Argomenti No $t0-$t Temporanei No $s0 - $s Salvati Si $t8-$t Ulteriori temporanei No $gp 28 Puntatore ai globali Si $sp 29 Puntatore allo stack Si $fp 30 Frame pointer Si $ra 31 Return Address si No

100 Elaborazione Per quantole ricorsioni siano eleganti spesso sono causa di varie inefficienze Never hire a programmer who solve the factorial with a recursion Consideriamo la seguentefunzione int sum(int n) { if (n > 0) return sum(n-1) + n; else return n; }

101 Elaborazione Consideriamo la chiamata sum (2) Sum (2) n = 2 Sum (1) 2+sum(1) Il valore di ritorno viene costruito Tornando su per la catena di chiamate. Ogni frame di attivazione deve essere Preservato per produrre il risutlato corretto. 0 n = 1 Sum (0) 1+sum(0) n = 0

102 Elaborazione Consideriamo ora il codicecosìmodicato int sum(int n, int acc) { if (n > 0) return sum(n-1, acc+n); else return acc; } Stavolta la chiamata ricorsiva è l ultima cosa che la funzione fa (si limita a ritornare). Questa ricorsione viene detta di coda ritorniamo al nostro esempi sum(2,0).

103 Codice La proceduraricorsiva vienecompilata come segue segue: sum: move $v0, $a1 #metti $a1 in $v0 blez $a0, $L5 #se $a0 < 0, salta a L5 addiu $sp, $sp, -32 #Prologo> crea spazio nello stack sw $ra, (28)$sp #Prologo, salve ra addu $a1, $a1, $a0 #Somma a0 ad a1 (acc=acc+n) addiu $a0, $a0, -1 #Decrementa a0 (n=n-1) jal sum #Chiamata ricorsiva (modifica ra) lw $ra, 28($sp) #ripristina ra addiu $sp, $sp, 32 #rimette a posto lo stack $L5: j $ra

104 Elaborazione Consideriamo la chiamata sum (2) 3 3 Sum (2,0) n = 2, acc=0 Sum (1) Sum(1,2) In questo caso lungo i rami di ritorno non faccio che restituire 3. Conservare i dati nel frame di attivazione è inutile. Posso usare un unico frame di attivazione e svolgere La ricorsione in iterazione. 3 n = 1, acc= 2 Sum (0) Sum(0, 3) n = 0, acc= 3

105 Ottimizzazione Alcuni compilatori sanno riconoscere la ricorsione di coda: Il chiamante ritorna subito dopo la jal $v0 e gli altri registri non cambiano Il chiamato potrebbe direttamente ritornare al $ra del chiamante In altre parole il chiamante salva $ra e lo recupera per nulla Torniamo al nostro esempiodella somma

106 Ottimizzazione Quello che potremmo fare guardando al codice e molto semplicemente osservare che possiamo sostituire la jal con un jump j, con grandi semplificazioni sum: move $v0, $a1 #metti $a1 in $v0 blez $a0, $L5 #se $a0 < 0, salta a L5 addiu $sp, $sp, -32 #Prologo> crea spazio nello stack sw $ra, (28)$sp #Prologo, salve ra addu $a1, $a1, $a0 #Somma a0 ad a1 (acc=acc+n) addiu $a0, $a0, -1 #Decrementa a0 (n=n-1) jal sum #Chiamata ricorsiva (modifica ra) lw $ra, 28($sp) #ripristina ra addiu $sp, $sp, 32 #rimette a posto lo stack $L5: j $ra

107 Ottimizzazione Il codice risultante e piu corto e anche piu efficiente Il gcc fa questo con O2 sum: move $v0, $a1 #metti $a1 in $v0 blez $a0, $L5 #se $a0 < 0, salta a L5 addu $a1, $a1, $a0 #Somma a0 ad a1 (acc=acc+n) addiu $a0, $a0, -1 #Decrementa a0 (n=n-1) j sum #Chiamata ricorsiva (modifica ra) $L5: j $ra

Istruzioni di trasferimento dati

Istruzioni di trasferimento dati Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:

Dettagli

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):

Dettagli

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini Architettura degli Elaboratori e delle Reti Il set istruzioni di MIPS Modalità di indirizzamento Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando

Un altro tipo di indirizzamento. L insieme delle istruzioni (3) Istruz. di somma e scelta con operando (2) Istruzioni di somma e scelta con operando Un altro tipo di indirizzamento L insieme delle istruzioni (3) Architetture dei Calcolatori (lettere A-I) Tipi di indirizzamento visti finora Indirizzamento di un registro Indirizzamento con registro base

Dettagli

Università degli Studi di Cassino

Università degli Studi di Cassino Corso di Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M. Anno Accademico 2007/2008 Francesco Tortorella Istruzioni di confronto Istruzione Significato slt $t1,$t2,$t3 if

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori Architettura degli Elaboratori Linguaggio macchina e assembler (caso di studio: processore MIPS) slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello Architettura degli Elaboratori 1 1 Istruzioni

Dettagli

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div MIPS load/store word, con indirizzamento al byte aritmetica solo su registri Istruzioni Significato add $t1, $t2, $t3 $t1 = $t2 + $t3 sub $t1, $t2, $t3 $t1 = $t2 - $t3 mult $t1, $t2 Hi,Lo = $t1*$t2 div

Dettagli

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M. di Cassino e del Lazio Meridionale Corso di MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M. Anno Accademico 201/201 Francesco Tortorella Istruzioni di confronto Istruzione

Dettagli

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I) Le procedure L insieme delle istruzioni (4) Architetture dei Calcolatori (lettere A-I) In ogni linguaggio di programmazione si struttura il proprio codice usando procedure (funzioni, metodi, ) L utilizzo

Dettagli

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F. Architettura degli Elaboratori e delle Reti Lezione 16 Il linguaggio macchina Proff. A. Borghese, F. Pedeini Dipaimento di Scienze dell Informazione Univeità degli Studi di Milano L 16 1/32 Linguaggio

Dettagli

Il linguaggio macchina

Il linguaggio macchina Architettura degli Elaboratori e delle Reti Lezione 16 Il linguaggio macchina Proff. A. Borghese, F. Pedeini Dipaimento di Scienze dell Informazione Univeità degli Studi di Milano L 16 1/33 Linguaggio

Dettagli

Assembly (3): le procedure

Assembly (3): le procedure Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata

Dettagli

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)

Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS) Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS) Salvatore Orlando Arch. Elab. - S. Orlando 1 Livelli di astrazione Scendendo di livello, diventiamo più concreti e scopriamo

Dettagli

Richiami sull architettura del processore MIPS a 32 bit

Richiami sull architettura del processore MIPS a 32 bit Caratteristiche principali dell architettura del processore MIPS Richiami sull architettura del processore MIPS a 32 bit Architetture Avanzate dei Calcolatori Valeria Cardellini E un architettura RISC

Dettagli

Il linguaggio macchina

Il linguaggio macchina Il linguaggio macchina Istruzioni macchina (PH 2.4) Indirizzamento (PH 2.9) Costanti a 32-bit (PH 2.9) 1 Linguaggio macchina Le istruzioni in linguaggio assembly devono essere tradotte in linguaggio macchina

Dettagli

Istruzioni assembler Istruzione N Registri

Istruzioni assembler Istruzione N Registri Istruzioni assembler Istruzione N Registri Aritmetica add a, b, c a = b+c addi a, b, num a = b + sub a, b, c a = b - c mul a, b, c a = b*c div a, b, c a = b/c utilizzati Descrizione 3 Somma. Somma b e

Dettagli

Richiami sull architettura del processore MIPS a 32 bit

Richiami sull architettura del processore MIPS a 32 bit Richiami sull architettura del processore MIPS a 32 bit Architetture Avanzate dei Calcolatori Valeria Cardellini Caratteristiche principali dell architettura del processore MIPS E un architettura RISC

Dettagli

Convenzioni di chiamata a procedure

Convenzioni di chiamata a procedure Università degli Studi di Milano Laboratorio di Architettura degli Elaboratori II Corso di Laurea in Informatica, A.A. 2016-2017 Convenzioni di chiamata a procedure Nicola Basilico Dipartimento di Informatica

Dettagli

L'architettura del processore MIPS

L'architettura del processore MIPS L'architettura del processore MIPS Piano della lezione Ripasso di formati istruzione e registri MIPS Passi di esecuzione delle istruzioni: Formato R (istruzioni aritmetico-logiche) Istruzioni di caricamento

Dettagli

Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento

Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento Architetture degli Elaboratori e delle Reti Lezione 17 Linguaggio macchina: utilizzo di costanti, metodi di indirizzamento Proff. A. Borghese, F. Pedeini Dipaimento di Scienze dell Informazione Univeità

Dettagli

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Richiamo sull

Dettagli

Calcolatori Elettronici

Calcolatori Elettronici Calcolatori Elettronici Il linguaggio assemblativo MIPS (1) Istruzioni di ALU: operazioni ed operandi Trasferimenti tra memoria e CPU Vettori (1) Le costanti Livelli di astrazione s o f t w a r e H W Linguaggio

Dettagli

Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a Docente: H. Muccini

Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a Docente: H. Muccini [http://www.di.univaq.it/muccini/labarch] Laboratorio di Architettura degli Elaboratori LabArch 2007 Terzo Quadimestre, a.a. 2006-2007 Docente: H. Muccini Lecture 12: - Numeri con segno -Somma e sottrazione

Dettagli

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly Architettura degli Elaboratori Lezione 20 Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly Prof. F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Lecture 2: Prime Istruzioni

Lecture 2: Prime Istruzioni [http://www.di.univaq.it/muccini/labarch] Modulo di Laboratorio di Architettura degli Elaboratori Corso di Architettura degli Elaboratori con Laboratorio Docente: H. Muccini Lecture 2: Prime Istruzioni

Dettagli

Il linguaggio assembly

Il linguaggio assembly Il linguaggio assembly PH 2.3 (continua) 1 Argomenti Organizzazione della memoria Istruzioni di trasferimento dei dati Array Istruzioni logiche 2 1 La memoria del MIPS I contenuti delle locazioni di memoria

Dettagli

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Laboratorio di Architettura degli Elaboratori

Laboratorio di Architettura degli Elaboratori Laboratorio di Architettura degli Elaboratori Dott. Massimo Tivoli Set di istruzioni del MIPS32: istruzioni aritmetiche e di trasferimento Istruzioni (Alcune) Categorie di istruzioni in MIPS Istruzioni

Dettagli

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H Architettura dei calcolatori e sistemi operativi Sottoprogrammi e MIPS Espressioni algebriche Capitolo 2 P&H Sottoprogrammi Modello di chiamata Area di attivazione Calcolare un espressione algebrica 2

Dettagli

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini

Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock. Prof. Andrea Sterbini Architettura degli Elaboratori Lez. 8 CPU MIPS a 1 colpo di clock Prof. Andrea Sterbini sterbini@di.uniroma1.it Argomenti Progetto della CPU MIPS a 1 colpo di clock - Istruzioni da implementare - Unità

Dettagli

Architetture dei Calcolatori

Architetture dei Calcolatori Architetture dei Calcolatori Lezione 11 -- 10/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Fattoriale: risparmiamo sull uso dei registri q Rispetto alla soluzione precedente

Dettagli

Le istruzioni: il linguaggio dei calcolatori. Luigi Palopoli

Le istruzioni: il linguaggio dei calcolatori. Luigi Palopoli Le istruzioni: il linguaggio dei calcolatori Luigi Palopoli Insieme delle Istruzioni Per impar.re istruzioni al computer bisogna parlare il suo linguaggio Il linguaggio si compone di un vocabolario di

Dettagli

ISA e linguaggio macchina

ISA e linguaggio macchina ISA e linguaggio macchina Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@di.unimi.it Università degli Studi di Milano Riferimento sul Patterson: capitolo 4.2, 4.4, D1, D2. 1/55

Dettagli

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali Prof. Gian Luca Marcialis Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto dei calcolatori

Dettagli

ISA (Instruction Set Architecture) della CPU MIPS

ISA (Instruction Set Architecture) della CPU MIPS Architettura degli Elaboratori Lezione 20 ISA (Instruction Set Architecture) della CPU MIPS Prof. Federico Pedersini Dipartimento di Informatica Uniersità degli Studi di Milano L16-20 1 Linguaggio macchina

Dettagli

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly Architettura degli Elaboratori Lezione 20 Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly Prof. F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano

Dettagli

Calcolatori Elettronici

Calcolatori Elettronici Calcolatori Elettronici ISA di riferimento: MIPS Massimiliano Giacomin 1 DOVE CI TROVIAMO Livello funzionale Livello logico Livello circuitale Livello del layout istruzioni macchina, ISA Reti logiche:

Dettagli

MIPS! !

MIPS! ! MIPS! Sono descritte solamente le istruzioni di MIPS32, le pseudo-istruzioni, System Calls e direttive del linguaggio assembly che sono maggiormente usate.! MIPS è big-endian, cioè, lʼindirizzo di una

Dettagli

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni Istruzioni macchina Linguaggio macchina Insieme delle istruzioni (instruction set) che la CPU puo eseguire Capitolo 10 1 2 Elementi di un istruzione macchina Codice operativo Specifica l operazione da

Dettagli

Lezione 15 Il Set di Istruzioni (1)

Lezione 15 Il Set di Istruzioni (1) Lezione 15 Il Set di Istruzioni (1) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno Un quadro della situazione Input/Output Sistema di Interconnessione Registri

Dettagli

Calcolatori Elettronici

Calcolatori Elettronici Calcolatori Elettronici Il linguaggio assemblativo MIPS (4) Le function (2) Gestione dei sottoprogrammi $a0 - $a3 - $v1 $ra : 4 registri argomento per il passaggio dei parametri : due registri per la restituzione

Dettagli

Il processore: unità di controllo

Il processore: unità di controllo Il processore: unità di lo Architetture dei Calcolatori (lettere A-I) L unità di lo L unità di lo è responsabile della generazione dei segnali di lo che vengono inviati all unità di elaborazione Alcune

Dettagli

Corso di Architettura (Prof. Scarano) 09/04/2002

Corso di Architettura (Prof. Scarano) 09/04/2002 Corso di Architettura (Prof. Scarano) 09/0/2002 Un quadro della situazione Lezione 15 Il Set di Istruzioni (1) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno

Dettagli

Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A.

Accesso a memoria. Accesso a memoria. Accesso a memoria. Modalità di indirizzamento. Lezione 5 e 6. Architettura degli Elaboratori A. < < } } Lezione 5 e 6 Accesso a memoria A questo livello di astrazione, la memoria viene vista come un array di byte Per ogni richiesta di un dato ad un certo indirizzo, la CPU ottiene un numero di byte

Dettagli

21 March : ESERCITAZIONE 01 GESTIONE DELLA MEMORIA VETTORI CONTROLLOO O DI FLUSSO DI UN PROGRAMMA. I. Frosio

21 March : ESERCITAZIONE 01 GESTIONE DELLA MEMORIA VETTORI CONTROLLOO O DI FLUSSO DI UN PROGRAMMA. I. Frosio 02: ESERCITAZIONE 01 21 March 2011 GESTIONE DELLA MEMORIA VETTORI CONTROLLOO O DI FLUSSO DI UN PROGRAMMA I. Frosio 1 SOMMARIO Organizzazione della memoria Istruzioni di accesso alla memoria Vettori Istruzioni

Dettagli

Architettura hardware

Architettura hardware Architettura hardware la parte che si può prendere a calci Architettura dell elaboratore Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Il Linguaggio Assembly: Gestione della memoria e controllo

Il Linguaggio Assembly: Gestione della memoria e controllo Il Linguaggio Assembly: Gestione della memoria e controllo Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@dsi.unimi.it Università degli Studi di Milano 1/42 Sommario L organizzazione

Dettagli

Assembly. Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A. Linguaggio assembly (App.

Assembly. Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A. Linguaggio assembly (App. Assembly Linguaggio di programmazione corrispondente al linguaggio macchina P.H. Cap. 2.1, 2.2 e App. A 1 Linguaggio assembly (App. A) Rappresentazione simbolica del linguaggio macchina Più comprensibile

Dettagli

Dal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione

Dal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione Dal sorgente all eseguibile I programmi Assembly Prof. Alberto Borghese Dipartimento di Scienze dell Informazione alberto.borghese@unimi.it Riferimenti sul Patterson: Cap. 2.10 + Appendice B, tranne B.7

Dettagli

MIPS Instruction Set 1

MIPS Instruction Set 1 Architettura degli Elaboratori e Laboratorio 20 marzo 2012 Istruzioni Comuni 1/3 Istruzioni Aritmetiche: Instruction Example Meaning Comments add add $1,$2,$3 $1=$2+$3 Always 3 operands subtract sub $1,$2,$3

Dettagli

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa) Processore Memoria Control (Parte di controllo) Datapath (Parte operativa) I/O Parte di Controllo La Parte Controllo (Control) della CPU è un circuito sequenziale istruzioni eseguite in più cicli di clock

Dettagli

Progettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore

Progettazione dell unità di elaborazioni dati e prestazioni. Il processore: unità di elaborazione. I passi per progettare un processore Il processore: unità di elaborazione Architetture dei Calcolatori (lettere A-I) Progettazione dell unità di elaborazioni dati e prestazioni Le prestazioni di un calcolatore sono determinate da: Numero

Dettagli

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso

Dettagli

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso

Dettagli

Macchina di Riferimento: argomenti

Macchina di Riferimento: argomenti Macchina di Riferimento: argomenti L'architettura di una macchina MIPS Organizzazione della memoria I registri della CPU L'esecuzione dei programmi Il ciclo fetch-execute Il simulatore SPIM 1 Architettura

Dettagli

Corso di Calcolatori Elettronici I Istruzioni macchina ing. Alessandro Cilardo

Corso di Calcolatori Elettronici I Istruzioni macchina ing. Alessandro Cilardo Corso di Calcolatori Elettronici I Istruzioni macchina ing. Alessandro Cilardo Corso di Laurea in Ingegneria Biomedica Istruzioni del processore Abbiamo visto in precedenza alcuni esempi di istruzioni

Dettagli

5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio

5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio 5 April 2012 04 LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE I. Frosio 1 SOMMARIO If... Then... If... Then... Else... For... Break... While... Do Do... While Switch (jump address

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 Instruction Set Architecture: nozioni generali Massimiliano Giacomin 1 DOVE CI TROVIAMO Livello del linguaggio specializzato Traduzione (compilatore) o interpretazione

Dettagli

Sistemi di Elaborazione delle Informazioni

Sistemi di Elaborazione delle Informazioni SCUOLA DI MEDICINA E CHIRURGIA Università degli Studi di Napoli Federico II Corso di Sistemi di Elaborazione delle Informazioni Dott. Francesco Rossi a.a. 2016/2017 1 Programma del corso Informatica di

Dettagli

L insieme delle istruzioni (6)

L insieme delle istruzioni (6) L insieme delle istruzioni (6) Architetture dei Calcolatori (lettere A-I) Alcune note conclusive I due principi dell architettura a programma memorizzato Uso di istruzioni indistinguibili dai dati Uso

Dettagli

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione Architettura di un calcolatore e linguaggio macchina Primo modulo Tecniche della programmazione CPU Central Processing Unit, processore Unita logica/aritmetica: elaborazione dati Unita di controllo: coordina

Dettagli

Il linguaggio Assembly

Il linguaggio Assembly Il linguaggio Assembly Linguaggio macchina Linguaggio definito da un insieme di istruzioni, codificate come stringhe di bit, che il processore può interpretare ed eseguire direttamente Linguaggio Assembly

Dettagli

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET: Università degli Studi di Milano Corso Architettura degli elaboratori e delle reti Prof. Cristina Silvano A.A. 2004/2005 Esame scritto del 15 luglio 2005 Cognome: Matricola: Nome: Istruzioni Scrivere solo

Dettagli

ARM: stack e subroutine

ARM: stack e subroutine ARM: stack e subroutine 05.d Le istruzioni di accesso allo stack L istruzione di chiamata a subroutine Gestione degli stack frame Istruzione di store multiplo (STM Le istruzioni LDR e STR operano su parole

Dettagli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli

Calcolatori Elettronici Lezione A4 Programmazione a Moduli Calcolatori Elettronici Lezione A4 Programmazione a Moduli Ing. Gestionale e delle Telecomunicazioni A.A. 2007/08 Gabriele Cecchetti Sommario Programmazione a moduli Programmi con linguaggi misti Tempo

Dettagli

Elementi base per la realizzazione dell unità di calcolo

Elementi base per la realizzazione dell unità di calcolo Elementi base per la realizzazione dell unità di calcolo Memoria istruzioni elemento di stato dove le istruzioni vengono memorizzate e recuperate tramite un indirizzo. ind. istruzione Memoria istruzioni

Dettagli

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly Esercitazione di Calcolatori Elettronici Ing. Battista Biggio Corso di Laurea in Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Richiami: v[i] e &v[i] v[i] è il valore dell elemento i nel vettore

Dettagli

Architettura dei computer

Architettura dei computer Architettura dei computer In un computer possiamo distinguere quattro unità funzionali: il processore la memoria principale (memoria centrale, RAM) la memoria secondaria i dispositivi di input/output La

Dettagli

Il processore: unità di elaborazione

Il processore: unità di elaborazione Il processore: unità di elaborazione Architetture dei Calcolatori (lettere A-I) Progettazione dell unità di elaborazioni dati e prestazioni Le prestazioni di un calcolatore sono determinate da: Numero

Dettagli

Il processore. Istituzionii di Informatica -- Rossano Gaeta

Il processore. Istituzionii di Informatica -- Rossano Gaeta Il processore Il processore (detto anche CPU, ovvero, Central Processing Unit) è la componente dell unità centrale che fornisce la capacità di elaborazione delle informazioni contenute nella memoria principale

Dettagli

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa)

Processore. Memoria I/O. Control (Parte di controllo) Datapath (Parte operativa) Processore Memoria Control (Parte di controllo) Datapath (Parte operativa) I/O Memoria La dimensione del Register File è piccola registri usati per memorizzare singole variabili di tipo semplice purtroppo

Dettagli

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H

Architettura dei calcolatori e sistemi operativi. Il processore Capitolo 4 P&H Architettura dei calcolatori e sistemi operativi Il processore Capitolo 4 P&H 4. 11. 2015 Sommario Instruction Set di riferimento per il processore Esecuzione delle istruzioni Struttura del processore

Dettagli

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010.

Programmazione II. Lezione 7. Daniele Sgandurra 9/11/2010. Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010

Dettagli

Richiami: v[i] e &v[i] Organizzazione della memoria. Organizzazione della memoria. Esercitazione di Calcolatori Elettronici Ing. Gian Luca Marcialis

Richiami: v[i] e &v[i] Organizzazione della memoria. Organizzazione della memoria. Esercitazione di Calcolatori Elettronici Ing. Gian Luca Marcialis Esercitazione di Ing. Gian Luca Corso di Laurea in Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Richiami: v[i] e &v[i] v[i] è il valore dell elemento i nel vettore v; &v[i] è il suo indirizzo.

Dettagli

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche

Linguaggio macchina. 3 tipi di istruzioni macchina. Istruzioni per trasferimento dati. Istruzioni logico/aritmetiche 3 tipi di istruzioni macchina Linguaggio macchina e assembler 1) trasferimento tra RAM e registri di calcolo della CPU 2) operazioni aritmetiche: somma, differenza, moltiplicazione e divisione 3) operazioni

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

MIPS Instruction Set 1

MIPS Instruction Set 1 Laboratorio di Architettura 8 aprile 2011 1 SPIM 2 Architettura Mips 3 Esercitazione SPIM emulatore software architettura MIPS R2000/R3000 debugger + servizi base di sistema operativo realizzazione/verifica

Dettagli

Architettura degli Elaboratori

Architettura degli Elaboratori circuiti combinatori: ALU slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello 1 ALU ALU (Arithmetic Logic Unit) circuito combinatorio all interno del processore per l esecuzione di istruzioni

Dettagli

Somma di numeri binari

Somma di numeri binari Fondamenti di Informatica: Codifica Binaria dell Informazione 1 Somma di numeri binari 0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 10 Esempio: 10011011 + 00101011 = 11000110 in base e una base Fondamenti di

Dettagli

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler Indice Linguaggio ad alto livello, linguagio assembler e linguaggio macchina Il linguaggio assembler MIPS: istruzioni aritmetiche, di trasferimento dati e di salto Conversione linguaggio assembler in linguaggio

Dettagli

La programmazione dei calcolatori. L insieme delle istruzioni. Vantaggi e svantaggi dell assembler. Benefici dei linguaggi ad alto livello

La programmazione dei calcolatori. L insieme delle istruzioni. Vantaggi e svantaggi dell assembler. Benefici dei linguaggi ad alto livello La programmazione dei calcolatori L insieme delle istruzioni Architetture dei Calcolatori (lettere A-I) Linguaggio macchina (codifica con numeri binari) Linguaggio direttamente comprensibile dal calcolatore

Dettagli

Architettura dei Calcolatori elettronici

Architettura dei Calcolatori elettronici Architettura dei Calcolatori elettronici CORSO DI CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II Dal punto di vista architetturale un calcolatore

Dettagli

Università degli Studi di Roma La Sapienza

Università degli Studi di Roma La Sapienza Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Introduzione ai concetti ed al simulatore SPIM Indice degli argomenti Introduzione Assembler, compilatore, linker, programma

Dettagli

Lezione 12: L architettura LC-3

Lezione 12: L architettura LC-3 Lezione 12: L architettura LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 24 Maggio 2012 Ricorda... Il ciclo di esecuzione di un istruzione è composto da sei fasi: FETCH DECODE ADDRESS

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dei numeri relativi Codice BCD Prima di passare alla rappresentazione dei numeri relativi in binario vediamo un tipo di codifica che ha una certa rilevanza in alcune applicazioni: il codice BCD (Binary Coded Decimal). È un

Dettagli

Struttura di programmi MAL Elementi lessicali

Struttura di programmi MAL Elementi lessicali Elementi lessicali Ogni microistruzione è definita su una linea di programma Le linee vuote vengono ignorate Le linee con solo commenti vengono ignorate Il carattere di fine linea (RETURN ENTER INVIO)

Dettagli

Il Processore: l unità di controllo

Il Processore: l unità di controllo Il Processore: l unità di controllo La frequenza con cui vengono eseguiti i cicli di esecuzione è scandita da una componente detta clock Ad ogni impulso di clock la UC esegue un ciclo di esecuzione di

Dettagli

CPU a ciclo multiplo

CPU a ciclo multiplo Architettura degli Elaboratori e delle Reti Lezione CPU a ciclo multiplo Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 1/8 Sommario! I problemi

Dettagli

Il linguaggio assembly

Il linguaggio assembly Il linguaggio assembly Introduzione al linguaggio macchina Indice Che cos è l assembly Elementi del linguaggio Memoria di programma Registri interni e di I/O Registri particolari Rappresentazione dell

Dettagli

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione:

Architettura degli Elaboratori. Classe 3 Prof.ssa Anselmo. Appello del 18 Febbraio Attenzione: Cognome.. Nome.... Architettura degli Elaboratori Classe 3 Prof.ssa Anselmo Appello del 18 Febbraio 2015 Attenzione: Inserire i propri dati nell apposito spazio sottostante e in testa a questa pagina.

Dettagli

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE

ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE ARCHITETTURA DI UN SISTEMA DI ELABORAZIONE Il computer o elaboratore è una macchina altamente organizzata capace di immagazzinare, elaborare e trasmettere dati con notevole precisione e rapidità. Schematicamente

Dettagli

Arithmetic and Logic Unit e moltiplicatore

Arithmetic and Logic Unit e moltiplicatore Arithmetic and Logic Unit e moltiplicatore M. Favalli Engineering Department in Ferrara (ENDIF) ALU - multiplier Analisiesintesideicircuitidigitali 1 / 34 Sommario 1 Arithmetic and Logic Unit - ALU 2 Moltiplicatore

Dettagli

SOLUZIONI DELLA PROVA SCRITTA DEL CORSO DI. NUOVO E VECCHIO ORDINAMENTO DIDATTICO 28 Settembre 2006

SOLUZIONI DELLA PROVA SCRITTA DEL CORSO DI. NUOVO E VECCHIO ORDINAMENTO DIDATTICO 28 Settembre 2006 SOLUZIONI DELLA PROVA SCRITTA DEL CORSO DI NUOVO E VECCHIO ORDINAMENTO DIDATTICO 28 Settembre 26 MOTIVARE IN MANIERA CHIARA LE SOLUZIONI PROPOSTE A CIASCUNO DEGLI ESERCIZI SVOLTI ESERCIZIO 1 (8 punti)

Dettagli

Elementi di informatica

Elementi di informatica Elementi di informatica Architetture degli elaboratori Il calcolatore Un calcolatore è sistema composto da un elevato numero di componenti Il suo funzionamento può essere descritto se lo si considera come

Dettagli

DEC PDP8, III Generazione, '65-'75

DEC PDP8, III Generazione, '65-'75 Parte I DEC PDP8, III Generazione, '65-'75 PDP8 Architettura (Livello Registri) 12 bit Program Counter PC 12 bit Memory Address Register MAR Random Access Memory RAM 4096 x 16 1 bit I 3 bit Operation Code

Dettagli

/ sezione dichiarativa variabili globali / #define N 10 int vett [N];

/ sezione dichiarativa variabili globali / #define N 10 int vett [N]; esercizio linguaggio macchina esame 9 luglio 2015 prima parte traduzione in assembler Si deve tradurre in linguaggio macchina simbolico (linguaggio assemblatore) MIPS il frammento di programma C riportato

Dettagli

Introduzione alla programmazione

Introduzione alla programmazione Introduzione alla programmazione Risolvere un problema Per risolvere un problema si procede innanzitutto all individuazione Delle informazioni, dei dati noti Dei risultati desiderati Il secondo passo consiste

Dettagli

Rappresentazione dei Dati

Rappresentazione dei Dati Parte II I computer hanno una memoria finita. Quindi, l insieme dei numeri interi e reali che si possono rappresentare in un computer è necessariamente finito 2 Codifica Binaria Tutti i dati usati dagli

Dettagli