Programmare con l assembler dell Il linguaggio assembler. Il linguaggio assembler

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmare con l assembler dell Il linguaggio assembler. Il linguaggio assembler"

Transcript

1 Programmare con l assembler dell Il linguaggio assembler Al livello di astrazione più basso, un programma scritto usando il linguaggio macchina (o ISA) di un certo processore è formato da una sequenza di istruzioni descritte ciascuna mediante una sequenza di bit. Per ogni istruzione, i bit di cui è composta indicano il tipo di operazione da compiere (somma, complemento, salto ) e gli operandi su cui eseguire l operazione (registri della macchina o indirizzi delle celle di memoria) 2 Il linguaggio assembler Poiché scrivere programmi usando i numeri binari è estremamente scomodo, tutte le CPU permettono di usare una rappresentazione simbolica del linguaggio macchina, il linguaggio assembler Con l assembler è possibile usare nomi simbolici per le istruzioni (ADD, SUB ) e per gli operandi (registri e indirizzi delle celle di memoria) Un programma assemblatore trasformerà poi le istruzioni assembler in corrispondenti istruzioni macchina 3 1

2 Il linguaggio assembler In un qualsiasi assembler, le istruzioni macchina sono indicate da nomi mnemonici, ovviamente più facili da ricordare che non una sequenza di bit. Nomi simbolici (o symbolic names) possono essere usati per indicare valori costanti Labels (etichette) possono essere usate per fare riferimento ad una specifica istruzione (ad esempio la destinazione di un salto) e più in generale ad un indirizzo di memoria. 4 Il linguaggio assembler Di solito è anche possibile usare delle pseudoistruzioni, che permettono di dare comandi all assemblatore per guidare il processo di traduzione Un particolare tipo di pseudoistruzioni sono le macro, che possono essere usate per specificare in modo abbreviato una sequenza di istruzioni assembler: ogni volta che l assemblatore incontra in un programma una particolare macro, la sostituisce con la sequenza di istruzioni macchina associate a quella macro. 5 Il linguaggio assembler Per poter programmare in assembler è necessaria una conoscenza approfondita non solo delle istruzioni di cui è formato l assembler di un particolare processore: è necessario conoscere in dettaglio l architettura del processore stesso È la situazione opposta ai linguaggi ad alto livello, che (entro certi limiti) permettono di ignorare l architettura interna del processore su cui verranno fatti girare i programmi scritti in quei linguaggi 6 2

3 Il linguaggio assembler Imparare a programmare in assembler sui processori usati nei moderni computer è molto complicato, perché questi processori sono estremamente complessi e sofisticati. Inoltre, quando si scrive un programma in assembler, lo si compila (si dice più comunemente: lo si assembla ) per generare un programma binario, lo si esegue sulla CPU per cui è stato scritto, e il programma si comporta in maniera sbagliata perché contiene degli errori, è quasi sempre impossibile sapere cosa è andato storto 7 Il linguaggio assembler Per questa ragione, è molto più comodo poter lanciare e testare il programma non sul vero e proprio processore, ma su un simulatore, che permetta di: Eseguire il programma una istruzione una alla volta Fermare l esecuzione del programma ad un punto specificato, e poi riprenderla da quel punto Visualizzare lo stato interno del processore, ossia i valori contenuti nei vari registri e nella memoria primaria (in alcuni casi) Modificare il contenuto di una qualsiasi registro o cella di RAM mentre l esecuzione del programma è sospesa in un certo punto. 8 Il linguaggio assembler Naturalmente, i programmi eseguiti su un simulatore girano molto più lentamente che se fossero eseguiti sul processore simulato, ma l uso del simulatore rende estremamente più semplice l apprendimento del linguaggio assembler e il debugging dei programmi. Il simulatore è più comunemente chiamato interpreter o tracer, proprio perché interpreta i programmi e permette di tracciarne l esecuzione. Nota: tutte le figure di questi lucidi sono tratte dalla sezione C del Tanenbaum 9 3

4 Il linguaggio assembler Il tracer t88. (comando: t88 HlloWrld) (a): il programma; (b): una schermata del tracer 10 Il processore 8088 L 8088 è uno degli antenati del moderni processori Intel: introdotto nel 1979, era una macchina a 16 bit, clock a 5 8 MHz, spazio di indirizzamento da 1 MB, era usato nei primi PC della IBM. Molte delle istruzioni dell 8088 si ritrovano nell ISA dei processori più moderni (ma a 64 o 32 bit anziché a 16 bit) e imparare a programmare l 8088 è una buona introduzione per la programmazione assembler dei processori Intel moderni La semplicità delle istruzioni dell 8088 le rende simili a quelle di molte architetture RISC più moderne. 11 funzionamento dell 8088 L 8088 ha un datapath molto semplice, non pipelined (ricordate che nella famiglia 80x86 la pipeline è comparsa solo col 486) e senza cache. Ogni singola istruzione viene eseguita nei seguenti passi: 1. prelievo dell istruzione puntata dal PC dalla RAM 2. incremento del PC 3. decodifica dell istruzione 4. prelievo degli operandi dalla memoria o dai registri 5. esecuzione dell istruzione 6. immagazzinamento del risultato in memoria o in un registro 7. goto 1 (Le prossime figure: Tanenbaum, Fig. C-2.) 12 4

5 registri generali dell 8088 L 8088 ha 4 registri generali a 16 bit, ciascuno suddiviso in 2 registri da 8 bit per le operazioni che lavorano su dati di tipo byte e caratteri. Sebbene i registri possano essere usati come registri generali, essi possono anche avere un uso specifico : AX: accumulator. Comunemente usato per contenere il risultato di alcune istruzioni (ad esempio la MUL. E una forma di indirizzamento implicito). MUL (addr) //AX = AX dato il cui indirizzo è addr BX: base register. Se usato tra parentesi specifica la word in RAM il cui indirizzo è contenuto in BX. MOV AX, (BX) //AX = dato il cui indirizzo è in BX 13 registri generali dell 8088 CX: counter register. Usato per contenere il contatore per gestire i loop. Viene automaticamente decrementato dalla istruzione LOOP, fino a che CX = 0. MOV CX, 10 lb: LOOP lb // decrementa CX, salta se CX > 0 DX: data register. Usato insieme ad AX nelle operazioni a 32 bit. 14 registri generali dell 8088 DX: data register. Usato insieme ad AX nelle operazioni a 32 bit. In questo caso, DX conterrà i 16 bit più significativi, e AX i restanti 16 bit meno significativi. DX ha quindi la funzione specifica di permettere di elaborare dati di tipo long Ogni registro a 16 bit è diviso in due parti che possono essere manipolate separatamente. Ad esempio: 1. ADDB AH, AL // AH = AH + AL 2. MOV AX, 258 // AH e AL ora contengono i valori 1 e 2 Se eseguiamo la 1 dopo la 2 AX conterrà il valore 770 ( ) 15 5

6 Lo stack segment dell 8088 Nell 8088, ad un programma è sempre associato una porzione di RAM da 64KB per contenere lo stack del programma 0 Quando il programma chiama una procedura (ad esempio A nella figura), nello stack vengono memorizzati gli argomenti della procedura, eventuali variabili locali, e l indirizzo di ritorno quando la procedura termina. La porzione di stack che contiene le informazioni di A è detta stack frame Se dentro A viene chiamata la procedura B, sulla cima dello stack viene allocato uno stack frame per B. Quando una procedura termina, il suo stack frame viene rimosso Stack frame della procedura B Stack frame della procedura A Lo stack segment dell 8088 Lo stack parte dall indirizzo più alto del segmento da 64 KB, e cresce verso il basso, ossia occupando man mano i byte di indirizzo più basso (questa è una scelta comune a molti processori). Quando si parla della cima, o top dello stack, si fa quindi in realtà riferimento al dato nello stack memorizzato all indirizzo più basso La chiamata di una procedura (istruzione CALL) fa quindi sempre espandere lo stack, in quanto viene allocato un nuovo stack frame Il ritorno da una procedura riduce invece la dimensione dello stack, perché viene deallocato lo stack frame della procedura terminata. 17 registri puntatori dell 8088 I registri puntatori contengono un indirizzo di RAM: SP: stack pointer. Punta sempre alla cima dello stack in RAM. Viene quindi decrementato dalla chiamata di una procedura e viene incrementato quando la procedura termina (perché il suo stack frame viene rimosso). Lo stack può essere anche usato per contenere risultati parziali del programma in esecuzione, mediante l uso delle istruzioni push e pop: PUSH AX // SP = SP-2; (SP) = AX POP AX // AX = (SP); SP = SP+2 18 Notate che la PUSH decrementa SP, mentre la POP incrementa SP. 6

7 registri puntatori dell 8088 BP: base pointer: può contenere un indirizzo qualsiasi dello stack, ma di solito viene usato per puntare all inizio dello stack frame sulla cima dello stack, ossia lo stack frame della procedura in esecuzione (questo stack frame è quindi delimitato da BP e SP). In questo caso, attraverso BP è possibile risalire alle variabili locali della procedura stessa (vedremo meglio più avanti) SI e DI vengono usati insieme a BP per indirizzare dati nello stack, oppure insieme a BX per indirizzare dati nel segmento dati del programma in esecuzione. Ad esempio: LODS (senza argomenti) usa il contenuto di SI per indirizzare il DATA SEGMENT e mette la word indirizzata in AX. SI viene automaticamente incrementato di 2 per puntare alla word successiva. 19 registri speciali dell 8088 IP: instruction pointer. Non è altro che il Program Counter dell 8088 (ma ovviamente Intel deve cambiare i nomi standard...) Flag Register. E la Program Status Word del processore, ossia un registro di bit (alcuni inutilizzati): ecco il significato di alcuni: Z: il risultato dell ultima operazione eseguita è zero (Zero bit) S: il risultato dell ultima operazione eseguita è negativo (Negative bit) O: il risultato dell ultima operazione ha generato overflow (Overflow bit) C: il risultato dell ultima operazione ha generato un riporto (Carry bit) I: abilita/disabilita gli interrupt 20 I registri dei segmenti dell 8088 Un eseguibile 8088 è composto da 3 segmenti di RAM grandi al massimo 64KB: il codice, i dati e lo stack. L indirizzo di partenza di ciascun segmento è contenuto nel corrispondente registro. E indirizzabile un ulteriore segmento extra attraverso il registro ES. In realtà, di solito i segmento dei dati e dello stack coincidono. Però, lo stack viene allocato nella parte alta del segmento, e cresce verso il basso, mentre le strutture dati sono allocate a partire dalla prima locazione del segmento. Notate che in assembler le variabili di un programma possono essere accedute solo attraverso il loro indirizzo (che però può essere 21 associato ad un nome, una label, per comodità) 7

8 Organizzazione della memoria il PC punta sempre una locazione interna al code segment: se PC = 0 viene puntata la prima locazione del code segment, non l indirizzo di RAM 0. l 8088 è in grado di gestire 1MB di RAM. Come è possibile con registri da 16 bit? L indirizzo di partenza di ogni segmento è sempre un multiplo di 64 KB, ed è un indirizzo su 20 bit costruito aggiungendo 4 bit a zero al fondo del corrispondente segment register (ossia quattro bit meno significativi vengono aggiungi all indirizzo su 16 bit). Quindi, un indirizzo assoluto è costruito moltiplicando il contenuto del corrispondente segment register per 16 e aggiungendo l indirizzo specificato all interno di quel segmento. 22 Organizzazione della memoria Ad esempio, se per un programma DS = 7 e BX = 12 (in decimale), l istruzione MOV AX, (BX) mette in AX il dato di 16 bit situato all indirizzo in RAM: = 124. In altre parole, l indirizzo binario su 20 bit implicato da DS = 7 è A questo va aggiunto BX = 12 = 1100 ottenendo (124 decimale) Per ogni riferimento in memoria uno dei segment register è usato nel modo visto per generare l effettivo indirizzo in RAM: la trasformazione di un indirizzo da 16 bit a 20 bit viene ovviamente fatta tutta a livello hardware. 23 Indirizzamento della memoria Nell assembler di un qualsiasi processore deve essere specificato in quali modi le istruzioni possono fare riferimento ai dati in RAM, ossia, come possono indirizzare la memoria. Nelle macchine RISC poi le diverse modalità possono essere usate solo nelle istruzioni LOAD e STORE, mentre nelle macchine CISC anche le altre istruzioni possono usare le diverse modalità per fare riferimento ai dati in RAM (eventualmente con alcune restrizioni, ad esempio: nelle istruzioni con almeno due operandi, uno dei due deve necessariamente essere un registro) 24 8

9 Indirizzamento della memoria Nel caso dell 8088, un indirizzo in RAM specifica sempre un byte ben preciso, ma se si stanno usando argomenti a 16 bit (il caso più frequente) o a 32 bit (per i long), l indirizzo specifica implicitamente anche il byte successivo o i tre byte successivi. Ad esempio: ADD CX (20) Somma a CX il contenuto della word da 2 byte memorizzata agli indirizzi 20 e 21 della RAM, e mette il risultato in CX (poiché l 8088 adotta l ordinamento little endian, il byte meno significativo di ogni word è memorizzato all indirizzo più basso) 25 Indirizzamento della memoria Gli assembler di tutti i processori adottano modalità per specificare gli operandi più o meno simili fra loro, incluse le modalità dell Ecco qui di seguito la specifica completa di tutte le modalità di indirizzamento dell 8088, che deve ovviamente specificare anche gli operandi che non sono variabili in RAM: i registri e i valori immediati (prossime 2 figure: Tanenbaum, Fig. C-3) 26 Indirizzamento della memoria Notate che quando parliamo di indirizzamento di un dato in RAM, ci riferiamo evidentemente alle informazioni contenute nel segmento dati (il simbolo # indica un valore immediato: un numero o una label) 27 9

10 Indirizzamento della memoria Le principali modalità di indirizzamento della RAM sono: Indirizzamento diretto, in cui l istruzione contiene l indirizzo dell operando: ADD CX, (20) // CX = CX + [20] Indirizzamento a registro indiretto, in cui l indirizzo dell operando è contenuto in un registro (BX, SI o DI) ADD CX, (BX) // CX = CX + [BX] 28 Indirizzamento della memoria Indirizzamento con spiazzamento, in cui il valore contenuto nel registro viene sommato ad una costante numerica per formare l indirizzo ADD CX, 10(BX) // CX = CX + [10+BX] Vi sono modalità di indirizzamento della RAM attraverso i registri più sofisticate, ad esempio: l indirizzamento a registri con indice: PUSH (BX) (DI) che inserisce sulla cima dello stack il contenuto della cella di memoria il cui indirizzo è dato dalla somma dei valori in BX e DI Tutte le modalità di indirizzamento che abbiamo visto (ma ve ne sono altre) permettono di specificare quelli che si chiamano: 29 indirizzi effettivi Istruzioni dell 8088 E impossibile scrivere programmi in assembler senza conoscere a fondo e nei dettagli le istruzioni dell ISA del processore su cui stiamo lavorando. Per comodità le istruzioni vengono suddivise in un insieme di classi più o meno omogenee, perché hanno caratteristiche simili nella sintassi e nell effetto che hanno sullo stato del processore. Nei prossimi lucidi vediamo alcune delle istruzioni più significative dell In generale, per usare l assembler di una qualsiasi CPU è necessario fare riferimento al manuale dell assembler di quella CPU che descrive in dettaglio tutte le istruzioni riconosciute e il loro effetto sul processore (prossime 3 figure: Tanenbaum, Fig. C-4) Potete trovare una descrizione completa degli instruction set x86 in rete 30 10

11 Istruzioni dell 8088 Trasferimento, copia e operazioni aritmetiche MOV: è l istruzione di gran lunga più usata, e permette di: Copiare quanto indicato da un indirizzo effettivo (e) in un registro (r) o viceversa (r! e, e! r) Copiare un dato immediato (#) in un indirizzo effettivo (e! #) 31 Istruzioni dell 8088 Trasferimento, copia e operazioni aritmetiche La lettera (B) indica l istruzione equivalente su operandi di tipo byte. Ad esempio: MOVB AH, (20) Notate la colonna status flag : il gruppo di istruzioni da MOV a XLAT non modifica i flag del flag register ADD e SUB: sono ovviamente le operazioni di somma e sottrazione. Possono avere effetto sugli status flag: O (overflow) viene settato a 1 se il risultato dell istruzione non può essere espresso con i 16 bit a disposizione. Viene resettato a 0 altrimenti Gli altri flag vengono settati/resettati concordemente con quanto indicato nel lucido 20 ADC e SBB usano il Carry bit (il bit/flag di riporto) per poter lavorare con interi a 32 bit 32 Istruzioni dell 8088 Trasferimento, copia e operazioni aritmetiche MUL, DIV: notate come queste istruzioni abbiano un solo operando esplicito: MUL (BX) // DX:AX = AX [BX] L Overflow ed il Carry bit vengono settati a 1 quando il risultato non può essere rappresentato in una word, i bit S e Z rimangono indefiniti DIV (BX) // AX = quoziente di AX / [BX] // DX = resto di AX / [BX] Tutti gli status bit rimangono indefiniti, ma un interrupt viene inviato in caso di divisione per zero. IMUL, IDIV permettono di lavorare con valori signed 33 11

12 Istruzioni dell 8088 Operazioni logiche, di shift e sui bit CBW e CWD operano sulla copia DX:AX Le RCL, RCR coinvolgono anche il Carry bit, e quindi di fatto danno luogo ad operazioni di shift circolare a 17 bit. SHR sposta tutti i bit a destra di uno, aggiungendo uno zero sulla sinistra. 34 Istruzioni dell 8088 Operazioni di test e manipolazione dei flag Queste istruzioni vengono usate principalmente per produrre la condizione da usare nelle istruzioni di salto condizionato. TEST: viene fatto l AND bit a bit tra i due operandi. Se sono tutti uguali viene settato a 1 il flag Z (Zero bit) CMP: viene fatta la differenza tra i due operandi, e i vari flag vengono settati corrispondentemente. 35 Istruzioni dell 8088 Cicli e operazioni su stringhe LOOP: decrementa CX e salta alla label se CX > 0. Il salto deve essere nell intervallo [ 128, +127] byte, perché è specificato su 8 bit con segno Notate che non si può dire quante istruzioni si possono saltare al massimo perché le istruzioni x86 non hanno lunghezza fissa. Le altre istruzioni LOOP testano anche il flag Zero REP CMPS eseguono operazioni ripetute su intere stringhe in RAM. Questo è un tipico esempio di istruzioni CISC Errore: togliete back errore: è CX >

13 Istruzioni dell 8088 Istruzioni di salto e salto condizionato JMP xxx: dove xxx può essere una label o un effective address, e il salto deve rimanere nel range [ 32768, ] byte I salti condizionati (spesso usati subito dopo una TEST o una CMP), ammettono uno spiazzamento massimo di 128 byte Per saltare più lontano si usa la tecnica jump over jump. Ad esempio, il branch: diventa: JE far_label JNE skip JMP far_label skip: 37 Istruzioni dell 8088 Chiamate di Subroutine (procedure) All interno di un programma assembler è possibile definire delle subroutine, che possono essere chiamate con l istruzione CALL Le subroutine possono avere degli argomenti, che il codice della subroutine si aspetta di trovare sullo stack. Prima di chiamare la subroutine quindi, il programma chiamante deve mettere gli argomenti sullo stack (in ordine inverso, se si fa riferimento alla sintassi del C) usando una PUSH per ciascun argomento. Quando viene eseguita la CALL, per prima cosa il valore corrente del PC viene automaticamente caricato sullo stack, in modo da salvare l indirizzo di ritorno dalla subroutine (return address): ossia da quale istruzione prosegue l esecuzione dopo la terminazione della subroutine 38 Chiamate di Subroutine Istruzioni dell 8088 Dopo il salvataggio dell indirizzo di ritorno sullo stack, nel PC viene scritto l indirizzo della prima istruzione della subroutine, che corrisponde all argomento (label o indirizzo effettivo) dell istruzione CALL L ultima istruzione della subroutine deve essere RET, che semplicemente preleva l indirizzo di ritorno sulla cima dello stack e lo scrive nel PC RET può avere un argomento numerico: il numero di byte occupati dagli argomenti passati alla subroutine. Viene automaticamente aggiunto a SP per pulire lo stack alla fine della subroutine

14 Istruzioni dell 8088 Codice delle Subroutine Per semplificare il ritorno da una subroutine, le prime istruzioni della subroutine sono di solito le seguenti (vedremo poi perché): PUSH BP // salva BP sullo stack. MOV BP, SP // ora BP punta alla cima dello stack, dove // è memorizzato OLD BP. BP = SP Return address si trova ora al indirizzo BP+2, e Argument 1 e Argument 2 si trovano a BP+4 e BP+6 Ecco esempi di come possono essere acceduti gli argomenti all interno della subroutine: MUL 4(BP) ADD AX, 6(BP) 40 Codice delle Subroutine Istruzioni dell 8088 Il codice della subroutine può usare lo stack nel modo appena visto, per passare argomenti e chiamare un altra subroutine. Ma lo stack si può anche usare come spazio per allocare variabili locali alla procedura, che sono riferite attraverso BP. BP e SP delimitano lo stack frame corrente: SP cambia col variare della dimensione dello stack frame corrente, mentre BP punta alla base dello stack frame, e quindi rimane costante finché quel frame è attivo) Così, ad esempio: ADD -2(BP), AX usa i primi due byte dello stack frame per salvare un risultato parziale 41 Istruzioni dell 8088 Ritorno dalla Subroutine Il codice della subroutine può allocare un numero imprecisato di variabili locali sullo stack, e soprattutto un numero che può variare da una chiamata all altra. Senza dover calcolare ogni volta la quantità di stack usato dalla subroutine, quando questa termina il suo stack frame può essere rimosso, e si può riattivare lo stack frame della procedura chiamante così: MOV SP, BP POP BP // BP " OLD BP RET Notate che questo non è altro che il complemento di quanto fatto all inizio 42 14

15 Istruzioni dell 8088 Precauzioni nella chiamata di una Subroutine La subroutine può ovviamente utilizzare i registri generali della macchina. Se il codice chiamante ha messo dei valori significativi in questi registri, prima di chiamare la subroutine dovrebbe salvarne il contenuto, ad esempio sullo stack. Con quattro registri generali in tutto, è molto probabile che ciò si renda necessario Ecco un esempio di come, avere molti registri a disposizione, riduce la probabilità di dover ricorrere all uso di spazio temporaneo in memoria principale Se si scrive codice in un linguaggio ad alto livello, tutti questi dettagli devono essere gestiti in modo automatico dal compilatore, una cosa assolutamente non banale 43 Subroutine di Sistema Istruzioni dell 8088 Un qualsiasi processore possiede delle istruzioni per comunicare con l esterno, usando opportune porte di comunicazione. Ad esempio, nell 8088 l istruzione: OUT portnumber, AX Scrive il contenuto di AX sulla porta di uscita specificata da portnumber Queste istruzioni sono ovviamente necessarie per operare sui file, e in generale per implementare le operazioni di input/output del processore, ma per permettere ad un interprete di funzionare su piattaforme e sistemi operativi diversi, vengono sostituite da un insieme opportuno di subroutine di sistema 44 Istruzioni dell 8088 Subroutine di Sistema Essendo delle subroutine, sono chiamate come abbiamo visto: 1) gli argomenti vengono inseriti sullo stack in ordine inverso 2) viene inserita sullo stack la label/nome della subroutine 3) viene chiamata la system trap SYS 45 15

16 Istruzioni dell 8088 Subroutine di Sistema Eventuali valori di ritorno vengono messi in AX, o in DX:AX Le subroutine di sistema garantiscono che tutti i registri (a parte AX e DX) non vengono modificati dalla subroutine stessa. Quando la subroutine di sistema termina, lascia sullo stack gli argomenti con cui è stata chiamata, che possono essere cancellati (basta modificare opportunamente SP) o riutilizzati per un altra chiamata. 46 Programmare in Assembler Come abbiamo già osservato, sviluppare programmi in assembler per un processore, è un buon modo per conoscere a fondo e vedere all opera l architettura di quel processore. Un programma scritto in assembler sarà assemblato da un assemblatore, e potrà poi essere eseguito su un processore che adotti quel linguaggio macchina. Ovviamente, il programma può contenere errori, che però sono difficili da trovare semplicemente eseguendo il programma. Per questa ragione, lo sviluppo di programmi assembler è di solito portato avanti attraverso un simulatore della macchina che permette di simulare appunto l esecuzione dei programmi sul processore per cui sono stati sviluppati. Il simulatore della macchina interpreta le istruzioni di un programma e permette di tracciarne l esecuzione: viene quindi di solito chiamato interpreter o tracer 47 Programmare in Assembler Ma un simulatore svolge di solito anche funzioni di debugger: permette in fatti di eseguire il programma passo passo, una sola istruzione per volta, tracciando il contenuto dei registri della macchina che simula mano a mano che le istruzioni li usano e li modificano. Naturalmente, il simulatore permette di fare molte altre cose, ad esempio di eseguire n istruzioni, di inserire dei breakpoint e di eseguire il programma fino al raggiungimento di uno specifico breakpoint, di visualizzare il contenuto di un segmento di memoria, e così via. Nel caso di processori embedded, è comodo usare il simulatore di un processore per sviluppare applicazioni che dovranno girare su quel processore, lavorando però in un ambiente più user-friendly, (ossia usando il simulatore in ambiente Windows o Unix) 48 16

17 Programmare in Assembler Sebbene vi sia una corrispondenza 1 a 1 tra istruzioni assembler e istruzioni macchina, l assembler permette di programmare usando nomi simbolici per le istruzioni e i registri: l assemblatore genererà poi il codice macchina vero e proprio, formato da sequenze di bit. L assembler permette inoltre di usare etichette (in inglese label), per indicare specifiche posizioni in memoria: la posizione di una variabile in RAM o una istruzione a cui deve saltare un branch Durante la generazione del codice macchina l assemblatore mappa le label del programma ai valori binari che rappresentano: indirizzi della RAM Un assembler permette anche di definire costanti: ossia associazioni tra valori numerici e nomi simbolici. 49 Una nota sugli assemblatori Il compilatore di un programma scritto in assembler viene comunemente detto assemblatore L output di un assemblatore è un file oggetto Spesso, un programma usa subroutines contenute in file oggetto separati. Il linker mette insieme tutti i file oggetto e produce un file eseguibile binario, che può essere caricato in memoria ed eseguito. Mentre l assemblatore produce il codice oggetto, scrive in una Symbol table i nomi di tutte le costanti e le label che incontra, insieme con il loro valore numerico. Però, mentre le costanti definite all inizio del programma in fase di compilazione possono essere immediatamente associate al loro valore numerico nella symbol table, per le label non è così ovvio. 50 Una nota sugli assemblatori Infatti una label può fare riferimento ad una locazione che ha un indirizzo maggiore di quello del punto in cui compare la label. Ad esempio come in questo caso: JB mylabel MUL (BX) mylabel: ADD AX, BX Quando il compilatore incontra la prima occorrenza di mylabel, non sa ancora a quale indirizzo fa riferimento. Per gestire queste situazioni, l assemblatore deve scandire due volte il codice del programma 51 17

18 Una nota sugli assemblatori Nella prima passata, ogni riga di codice viene analizzata e un location counter viene incrementato del numero di byte necessari per contenere quella riga. Ad esempio, nel caso: mylabel: ADD AX, BX JB mylabel //occupa 2 byte MUL (BX) //occupa 3 byte Quando l assemblatore incontra JB mylabel inserisce una nuova entry mylabel nella symbol table. Quando nel programma incontra mylabel: associa alla entry mylabel della symbol table il valore corrente del location counter Nella seconda passata il valore numerico di ogni label è noto, e può iniziare la generazione del codice binario (ad esempio, JB mylabel può essere trasformato in JB 5, e poi 52 in una sequenza di cifre binarie) l ACK-Based Assembler as88 Per un dato processore, possono essere disponibili diversi assemblatori/linker. Ovviamente tutti producono codice binario in grado di girare sul processore per cui sono stati concepiti. Ogni assemblatore/linker è poi normalmente accompagnato da un interprete/tracer/debugger per poter operare con una certa comodità sul codice sviluppato. Diversi kit di sviluppo possono quindi essere disponibili in letteratura e sul mercato. Quelli professionali possono avere costi molto alti, dato che sono usati per lo sviluppo di software che verrà poi venduto. 53 l ACK-Based Assembler as88 Pseudoistruzioni: ogni assemblatore prevede un insieme specifico di pseudoistruzioni: direttive che influenzano il processo di generazione del codice ma che non vengono tradotte in codice binario. Nell Amsterdam Compiler Kit (ACK) as88, le pseudoistruzioni più importanti sono quelle che permettono di definire le sezioni del codice (TEXT) e dei dati (DATA) del programma, che andranno poi memorizzate nei corrispondenti segmenti di memoria All interno della sezione dati è anche possibile definire una sottosezione di dati (variabili) non inizializzati detta BSS (Block Started by Symbol) 54 18

19 l ACK-Based Assembler as88 Vi sono altre pseudoistruzioni riconosciute dall ACK. Ad esempio.word per definire un vettore di dati, o.ascii per definire una stringa. Vedremo l uso di alcune di queste pseudoistruzioni negli esempi. 55 l ACK-Based Assembler as88 Labels: Nell ACK qualsiasi istruzione o dato può essere preceduto da una label. Ne esistono di due tipi: Global labels: stringhe alfanumeriche seguite dai due punti (ad esempio: mylabel5: ) Devono essere uniche in tutto il programma, e non devono essere uguali a nomi di istruzioni, pseudoistruzioni, eccetera. Local labels: una cifra da 0 a 9 seguita dai due punti. (es: 5: ) Sono limitate alla sola sezione TEXT, e possono occorrere più volte. Una istruzione come: JE 2f significa: Jump if Equal forward alla prima label 2 che incontri JE 4b significa: Jump if Equal back alla prima label 4 che incontri 56 l ACK-Based tracer t88 Il tracer-debugger che useremo assume di interfacciarsi con un terminale standard 24 x 80 linee. Il suo layout, formato da 7 finestre, è il seguente (Tanenbaum, Fig. C-10)

20 l ACK-Based tracer t88 Processor with registers (1): mostra i registri generali in decimale e gli altri registri (inclusi i byte register, come AL) in esadecimale. Al di sotto dell IP (Program Counter) viene indicata l istruzione correntemente puntata dall IP rispetto all ultima label globale Sopra l IP compaiono alcuni flag della PSW, e al di sotto il loro valore: O (overflow): indicato da una v D (direction): > o < S (sign): p o n Z (zero): indicato da una z C (carry): indicato da una c - indica che il flag è a 0 58 l ACK-Based tracer t88 Stack (2): visualizza il contenuto dello stack e la locazione correntemente puntata da SP Un numero a fianco di un indirizzo indica che quello è l indirizzo di ritorno di una subroutine. Il valore del numero indica di quale livello di subroutine si tratta rispetto al programma principale Program text (3): visualizza la porzione di codice correntemente in esecuzione, insieme con la posizione precisa del program counter l ACK-Based tracer t88 Subroutine call stack (4): le righe di codice relative alle chiamate di subroutine più recenti (nell esempio, la chiamata di subroutine più recente è avvenuta alla riga di codice inpstart + 7 ) Interpreters Command (6): ultimi comandi dell interprete dati, e cursore dei comandi Error/Input/Output (5): E: eventuali errori del tracer I: eventuali valori dati in input righe restanti: output Global variables (7): mostra una porzione del data segment:

21 Comandi dell ACK tracer t88 Ogni comando va seguito da return, e dando il solo return viene eseguita solo una istruzione # (dove # è un numero > 0) esegue # istruzioni di seguito #g esegue le istruzioni fino alla linea di codice # Label+#b mette un breakpoint alla riga label+# (con c al posto di b rimuove il breakpoint) r esegue fino al prossimo breakpoint o fino alla fine, se non ci sono breakpoint 61 Comandi dell ACK tracer t88 - esegue fino all uscita dalla subroutine correntemente chiamata. + esegue fino alla chiamata di una subroutine = esegue fino che non si incontra lo stesso livello di subroutine corrente. Comodo per eseguire una chiamata di subroutine se ci si trova alla sua istruzione CALL 62 Primo esempio: Helloworld.s Questo programma è praticamente fatto solo di istruzioni per produrre l output Definizione delle pseudoistruzioni necessarie Inizio della sezione di codice (.TEXT) Calcola la lunghezza di Hello world\n come differenza di due label Esecuzione della system call _WRITE, che ha tre argomenti: file descriptor, indirizzo della stringa da stampare, lunghezza della stringa. Pulisce lo stack ( PUSH X = 2) Termina restituendo l esito della _WRITE (la _WRITE scrive in AX il numero di byte scritti) Inizio della sezione.data: le label hw e de servono per delimitare la stringa in stampa 63 21

22 Primo esempio: Helloworld.s comando t88 HlloWrld ecco la situazione quando il PC sta per eseguire l istruzione numero 12, per pulire lo stack prima della terminazione 64 Secondo esempio: vecprod.s Questo programma moltiplica gli elementi di due vettori a coppie, e produce in output la somma dei singoli prodotti. Il programma inizia preparandosi a chiamare la subroutine vecmul(count, vec1, vec2) count contiene il numero di elementi di uno due vettori. Riuscite a vedere come viene calcolato? Nella sezione DATA, la pseudoistruzione.align sposta il location counter alla prima locazione pari disponibile, in modo che vec1 possa essere allocato a partire da una locazione di indirizzo pari..space viene usato per riservare uno spazio di due byte per la variabile inprod, che sarà usata dal programma pricipale 65 Secondo esempio: vecprod.s Il codice della subroutine vecmul inizia, come abbiamo visto in precedenza, predisponendo i registri per trovare in BP+2 l indirizzo di ritorno, e in BP+4, BP+6 e BP+8 gli argomenti della chiamata,che vengono caricati nei registri: CX = count; SI = vec1; DI = vec2 vecmul ha bisogno di una variabile locale inizializzata a zero (chiamiamola varloc ) AX = vec1[i] vec2[i] varloc = varloc + AX Spostati alla word successiva di vec2 CX = CX 1; Jump if CX > 0 AX = varloc 66 22

23 Secondo esempio: vecprod.s Al ritorno da vecmul il risultato viene salvato nella variabile locale inprod, e poi vengono preparati gli argomenti per la stampa del risultato. In particolare, la pseudoistruzione _PRINTF usa la sintassi della printf del C: _PRINTF( Inner product is: %d\n, %d), dove: pfmt = Inner product is: %d\n AX = %d Infine, lo stack viene ripulito E il programma termina con una EXIT (0) 67 Secondo esempio: vecprod.s In questa figura vediamo la configurazione del tracer quando il programma deve eseguire per la prima volta la LODS. Notate sullo stack gli argomenti della vecmul e l indirizzo di ritorno, il vecchio valore di BP e la varloc. 68 Un semplice esercizio: Power.s Scrivete un programma assembler per l elevazione a potenza di due numeri interi in cui la base viene moltiplicata per se stessa un numero di volte pari all esponente. Base ed esponente sono due numeri interi dichiarati come WORD nel DATA SEGMENT (in altre parole, sono già in memoria e non devono essere richiesti in input, un po come abbiamo visto per i due vettori di vecprod) Il programma deve stampare in output il risultato dell elevazione a potenza (usate lo schema visto in vecprod) 69 23

24 L assembler dell 8088 Trovate una descrizione dettagliata delle cose viste in questi lucidi nell appendice C del Tanenbaum. trovate l Amsterdam Compiler Kit sul CD che accompagna il testo o agli indirizzi: Il kit contiene i due programmi fondamentali: as88 // l assemblatore (i file devono avere // l estensione. s. Ad esempio: as88 power.s ) t88 // il tracer (ad esempio, t88 power ) 70 24

Programmare con l assembler dell 8088

Programmare con l assembler dell 8088 Programmare con l assembler dell 8088 1 Il linguaggio assembler Al livello di astrazione più basso, un programma scritto usando il linguaggio macchina (o ISA) di un certo processore è formato da una sequenza

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

Programmazione Assembly per 8088: Esercizi svolti

Programmazione Assembly per 8088: Esercizi svolti Programmazione Assembly per 8088: Esercizi svolti Marco Di Felice 13 dicembre 2006 1 Esercizio 1 (esercizio 1 del Tanenbaum, Appendice C) TESTO. Dopo l esecuzione dell istruzione MOV AX, 702 qual è il

Dettagli

Architettura di una CPU

Architettura di una CPU Massimo VIOLANTE Politecnico di Torino Dipartimento di Automatica e Informatica Sommario Organizzazione di un processore Linguaggio macchina Modi di indirizzamento Tipi di istruzioni 2 M. Violante 1.1

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

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

Famiglia dei processori INTEL

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

Dettagli

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

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA Lezione n.11 n.11 Lezione n. 11 ARCHITETTURA INTERNA ARCHITETTURA ESTERNA CODICE MACCHINA MODI DI INDIRIZZAMENTO ARCHITETTURE A PIU' INDIRIZZI In questa lezione verranno introdotti i concetti di base relativi

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

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

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

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU: Struttura e Funzione del Processore Capitolo 12 Struttura CPU Compiti CPU: Prelevare istruzioni Interpretare istruzioni Prelevare dati Elaborare dati Scrivere (memorizzare) dati 1 CPU con bus di sistema

Dettagli

Componenti e connessioni. Capitolo 3

Componenti e connessioni. Capitolo 3 Componenti e connessioni Capitolo 3 Componenti principali CPU (Unità Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro Architettura di Von Neumann Dati e instruzioni in memoria (lettura

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

Modi di indirizzamento

Modi di indirizzamento Vari modi di specificare l indirizzo degli operandi Modi di indirizzamento Capitolo 11 Immediato Diretto Indiretto Registro Registro indiretto Spiazzamento Pila 1 2 Indirizzamento immediato L operando

Dettagli

FONDAMENTI DI INFORMATICA Lezione n. 11

FONDAMENTI DI INFORMATICA Lezione n. 11 FONDAMENTI DI INFORMATICA Lezione n. 11 ARCHITETTURA INTERNA ARCHITETTURA ESTERNA CODICE MACCHINA MODI DI INDIRIZZAMENTO ARCHITETTURE A PIU' INDIRIZZI In questa lezione verranno introdotti i concetti di

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

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

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

Modi di indirizzamento del processore MC68000 (parte prima)

Modi di indirizzamento del processore MC68000 (parte prima) Corso di Calcolatori Elettronici I A.A. 2011-2012 Modi di indirizzamento del processore MC68000 (parte prima) Lezione 21 Prof. Antonio Pescapè Università degli Studi di Napoli Federico II Facoltà di Ingegneria

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

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

Informatica Teorica. Macchine a registri

Informatica Teorica. Macchine a registri Informatica Teorica Macchine a registri 1 Macchine a registri RAM (Random Access Machine) astrazione ragionevole di un calcolatore nastro di ingresso nastro di uscita unità centrale in grado di eseguire

Dettagli

Nel microprocessore 8086 abbiamo una gran quantità di registri

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

Dettagli

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

Elaborazione dell informazione

Elaborazione dell informazione Elaborazione dell informazione Primo esempio Ricominciamo dai numeri (45 + 25) è definita rigorosamente Un primo calcolatore (a) Figura 1.1 Configurazione del pallottoliere (a) prima e (b) dopo l esecuzione

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

Esercitazione n. 3. Dott. Salvatore Pontarelli

Esercitazione n. 3. Dott. Salvatore Pontarelli Esercitazione n. 3 Dott. Salvatore Pontarelli Struttura di un modulo Assembly Assembly è il linguaggio che l ARM assembler (armasm) legge per produrre il codice oggetto. può essere: ARM assembly language

Dettagli

LINGUAGGIO MACCHINA e ASSEMBLER. Una CPU MINIMA Il linguaggio macchina di MINIMA Il linguaggio Assembler per MINIMA

LINGUAGGIO MACCHINA e ASSEMBLER. Una CPU MINIMA Il linguaggio macchina di MINIMA Il linguaggio Assembler per MINIMA LINGUAGGIO MACCHINA e ASSEMBLER Una CPU MINIMA Il linguaggio macchina di MINIMA Il linguaggio Assembler per MINIMA Nel computer non vengono memorizzati soltanto i dati da elaborare ma anche il programma

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

Mini-dispensa sui puntatori in C

Mini-dispensa sui puntatori in C Mini-dispensa sui puntatori in C P. Zavarise Versione 1 ottobre 013 1 Valore e indirizzo di una variabile Ripassiamo il significato di dal punto di vista del programmatore. int a=; Viene creata una variabile

Dettagli

Istruzioni di modifica della sequenza di elaborazione

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

Dettagli

Esercizi per il recupero del debito formativo:

Esercizi per il recupero del debito formativo: ANNO SCOLASTICO 2005/2006 CLASSE 4 ISC Esercizi per il recupero del debito formativo: Facendo esclusivamente uso delle istruzioni del linguaggio macchina mnemonico del microprocessore INTEL 8086 viste

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

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

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

Cenni ad Assembly Intel

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

Dettagli

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003

Il Ciclo Fetch-Decode-Execute. C Nyssen/Aberdeen College 2003 Il Ciclo Fetch-Decode-Execute C Nyssen/Aberdeen College 2003 Linguaggio Assembler Op code (Mnemonico) Operando #assembly code program 0000 LDA-24 #loads 0001 ADD-25 #adds 0002 HLT #stops #end of program

Dettagli

Calcolatori Elettronici Parte VIII: linguaggi assemblativi

Calcolatori Elettronici Parte VIII: linguaggi assemblativi Anno Accademico 2013/2014 Calcolatori Elettronici Parte VIII: linguaggi assemblativi Prof. Riccardo Torlone Universita di Roma Tre Linguaggi di Programmazione Linguaggi ad alto livello Maggiore espressività

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

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

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

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE Input/output da file Il linguaggio C non contiene istruzioni di I/O, in quanto tali operazioni vengono eseguite tramite funzioni di libreria standard. Questo approccio rende estremamente flessibile e potente

Dettagli

Rappresentazione dell Informazione

Rappresentazione dell Informazione Rappresentazione dell Informazione Rappresentazione delle informazioni in codice binario Caratteri Naturali e Reali positivi Interi Razionali Rappresentazione del testo Una stringa di bit per ogni simbolo

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

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione DAGLI ALGORITMI AI LINGUAGGI Linguaggi di Programmazione E` una notazione con cui e` possibile descrivere gli algoritmi. Programma: e` la rappresentazione di un algoritmo in un particolare linguaggio di

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

Capitolo 5 Elementi architetturali di base

Capitolo 5 Elementi architetturali di base Capitolo 5 Elementi architetturali di base Giuseppe Lami Istituto di Scienza e Tecnologie dell Informazione CNR Via Moruzzi, 1 - Pisa giuseppe.lami@isti.cnr.it Struttura - Unità di elaborazione e controllo

Dettagli

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

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

Dettagli

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema Algoritmo 2 Procedimento di risoluzione di un problema La programmazione Ver. 2.4 Permette di ottenere un risultato eseguendo una sequenza finita di operazioni elementari Esempi: Una ricetta di cucina

Dettagli

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2

La CPU e la Memoria. Sistemi e Tecnologie Informatiche 1. Struttura del computer. Sistemi e Tecnologie Informatiche 2 La CPU e la Memoria Sistemi e Tecnologie Informatiche 1 Struttura del computer Sistemi e Tecnologie Informatiche 2 1 I registri La memoria contiene sia i dati che le istruzioni Il contenuto dei registri

Dettagli

Rappresentazione dell informazione

Rappresentazione dell informazione Rappresentazione dell informazione Problema che coinvolge aspetti filosofici Interessa soprattutto distinguere informazioni diverse Con un solo simbolo è impossibile Pertanto l insieme minimo è costituito

Dettagli

Lezione 13: Il linguaggio assembly di LC-3

Lezione 13: Il linguaggio assembly di LC-3 Lezione 13: Il linguaggio assembly di LC-3 Laboratorio di Elementi di Architettura e Sistemi Operativi 30 Maggio 2012 Abbiamo visto... L ISA di LC-3; Ogni istruzione è identificata da un insieme di 1 e

Dettagli

PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO

PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO PASSI DI SVILUPPO DI UN PROGRAMMA: ESEMPIO Programma diviso in due moduli: MA.ASM: programma pricipale e funzioni di utilità MB.ASM: sottoprogramma di elaborazione Primo modulo: MA.ASM EXTRN alfa: BYTE

Dettagli

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale

Analogico vs. Digitale. LEZIONE II La codifica binaria. Analogico vs digitale. Analogico. Digitale Analogico vs. Digitale LEZIONE II La codifica binaria Analogico Segnale che può assumere infiniti valori con continuità Digitale Segnale che può assumere solo valori discreti Analogico vs digitale Il computer

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

Linguaggi e moduli. Dott. Franco Liberati

Linguaggi e moduli. Dott. Franco Liberati (canale A-D) A Linguaggi e moduli Dott. Franco Liberati Linguaggi di programmazione Compilatore Assemblatore Linker (collegatore) LINKER COMPILATORE ASSEMBLATORE LINGUAGGI DI PROGRAMMAZIONE Linguaggio

Dettagli

Funzioni, Stack e Visibilità delle Variabili in C

Funzioni, Stack e Visibilità delle Variabili in C Funzioni, Stack e Visibilità delle Variabili in C Programmazione I e Laboratorio Corso di Laurea in Informatica A.A. 2016/2017 Calendario delle lezioni Lez. 1 Lez. 2 Lez. 3 Lez. 4 Lez. 5 Lez. 6 Lez. 7

Dettagli

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari Lezione 4 L artimetica binaria: I numeri relativi e frazionari Sommario I numeri relativi I numeri frazionari I numeri in virgola fissa I numeri in virgola mobile 1 Cosa sono inumeri relativi? I numeri

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

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-La memoria 1 Prerequisiti Concetto di memoria Dati e istruzioni Bit e byte 2 1 Introduzione In questa Unità studiamo più in dettaglio la memoria del computer e le sue funzioni.

Dettagli

Il Modello di von Neumann (2) Prevede 3 entità logiche:

Il Modello di von Neumann (2) Prevede 3 entità logiche: Introduzione all Architettura degli Elaboratori Sommario Macchina di von Neumann Esecuzione dei programmi Rappresentazione dei dati Dati numerici Dati alfabetici 1 2 Il Modello di von Neumann (1) L architettura

Dettagli

Lezione4: MIPS e Istruzioni (1 Parte)

Lezione4: MIPS e Istruzioni (1 Parte) Architettura degli Elaboratori Lezione4: MIPS e Istruzioni (1 Parte) Michele Nappi mnappi@unisa.it http://www.biplab.unisa.it/ Alcune slide di questa lezione sono prodotte dal Prof. Luigi Palopoli AGENDA

Dettagli

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012 Fondamenti di Informatica - 1 Prof. B.Buttarazzi A.A. 2011/2012 Sommario Rappresentazione dei numeri naturali (N) Rappresentazione dei numeri interi (Z) Modulo e segno In complemento a 2 Operazioni aritmetiche

Dettagli

Assembler. In verde sono evidenziati i comandi del debug. Attiva la scrittura di istruzioni assembler nella locazione 0100.

Assembler. In verde sono evidenziati i comandi del debug. Attiva la scrittura di istruzioni assembler nella locazione 0100. 2010-02-16- pagina 1 di 6 Assembler Quando si installa un programma si creano dei file che sono memorizzati nell hard-disk del PC. Quando si lancia il programma parte di questi file è copiata nella RAM

Dettagli

La codifica digitale

La codifica digitale La codifica digitale Codifica digitale Il computer e il sistema binario Il computer elabora esclusivamente numeri. Ogni immagine, ogni suono, ogni informazione per essere compresa e rielaborata dal calcolatore

Dettagli

Primi passi col linguaggio C

Primi passi col linguaggio C Andrea Marin Università Ca Foscari Venezia Laurea in Informatica Corso di Programmazione part-time a.a. 2011/2012 Come introdurre un linguaggio di programmazione? Obiettivi: Introduciamo una macchina astratta

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

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2

LA CODIFICA DELL INFORMAZIONE. Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2 LA CODIFICA DELL INFORMAZIONE Introduzione ai sistemi informatici D. Sciuto, G. Buonanno, L. Mari, McGraw-Hill Cap.2 Codifica dati e istruzioni Per scrivere un programma è necessario rappresentare istruzioni

Dettagli

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088

ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 ARCHITETTURA DEI MICROPROCESSORI INTEL 8086/8088 microprocessori Intel della terza generazione progetto del 1978/79 address bus: 20 bit Ä 1M byte data bus: 8 bit per l 8088, 16 bit per l 8086 identico

Dettagli

Debug di un programma

Debug di un programma Debug di un programma Col termine Debug si intende una fase di sviluppo del software, nella quale si cerca di eliminare gli errori dal programma Due tipi di errori: Errori sintattici, rilevati sempre dal

Dettagli

Sistemi di numerazione

Sistemi di numerazione SOMMARIO Sistemi di numerazione...2 Sistema decimale (o a base 10)...2 Sistema binario...2 Operazioni sui numeri binari...3 Espressioni logiche...4 Definizione...4 Prodotto Logico : AND...4 Somma Logica

Dettagli

Calcolatori Elettronici Lezione A2 Architettura i8086

Calcolatori Elettronici Lezione A2 Architettura i8086 Calcolatori Elettronici Lezione A2 Architettura i8086 Ing. Gestionale e delle Telecomunicazioni A.A. 2007/08 Gabriele Cecchetti Architettura i8086 Sommario: L i8086 Registri Accesso alla memoria: indirizzi

Dettagli

Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori

Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori Università degli studi di Bologna Anno Accademico 2000/2001 Corso di Architettura degli elaboratori Esercitazione di Reti Logiche Realizzazione completa di un'architettura di processore attraverso strumenti

Dettagli

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE Francesco Tura francesco.tura@unibo.it 1 Lo strumento dell informatico: ELABORATORE ELETTRONICO [= calcolatore = computer] Macchina multifunzionale Macchina

Dettagli

GESTIONE DELLA MEMORIA CENTRALE 6.1 D. - UNICAL

GESTIONE DELLA MEMORIA CENTRALE 6.1 D. - UNICAL GESTIONE DELLA MEMORIA CENTRALE 6.1 Gestione della Memoria Background Spazio di indirizzi Swapping Allocazione Contigua Paginazione 6.2 Background Per essere eseguito un programma deve trovarsi (almeno

Dettagli

Programmi per la macchina di Mano addizione di due numeri

Programmi per la macchina di Mano addizione di due numeri Programmi per la macchina di Mano addizione di due numeri Indi Codici simbolici esadecimale binario rizzo 000 LDA 004 2004 0010 0000 0000 0100 001 ADD 005 1005 0001 0000 0000 0101 002 STA 006 3006 0011

Dettagli

ARCHITETTURA DEL MICROPROCESSORE INTEL 8086 (iapx86/10)

ARCHITETTURA DEL MICROPROCESSORE INTEL 8086 (iapx86/10) ARCHITETTURA DEL MICROPROCESSORE INTEL 8086 (iapx86/10) Chip con 40 piedini e 29000 transistori Progettato a metà degli anni 70, periodo in cui la densità di integrazione era relativamente bassa ( solo

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

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

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware.

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware. 1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware. 2. Spiegare i diversi tipi di indirizzamento usati dalle istruzioni del set

Dettagli

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L attività di progettare e realizzare un programma è detta programmazione

Dettagli

La codifica. dell informazione

La codifica. dell informazione 00010010101001110101010100010110101000011100010111 00010010101001110101010100010110101000011100010111 La codifica 00010010101001110101010100010110101000011100010111 dell informazione 00010010101001110101010100010110101000011100010111

Dettagli

Codifica binaria. Rappresentazioni medianti basi diverse

Codifica binaria. Rappresentazioni medianti basi diverse Codifica binaria Rappresentazione di numeri Notazione di tipo posizionale (come la notazione decimale). Ogni numero è rappresentato da una sequenza di simboli Il valore del numero dipende non solo dalla

Dettagli

Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086)

Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086) PROF. CARMELO CALARCO Breve guida AL LINGUAGGIO ASSEMBLY (emulatore EMU8086) 1 IL LINGUAGGIO ASSEMBLY Il linguaggio assembly è un linguaggio di programmazione a basso livello. Per linguaggi di basso livello

Dettagli

Organizzazione di un SO monolitico

Organizzazione di un SO monolitico Organizzazione di un SO monolitico Applicazioni Interprete di comandi (shell) Interfaccia grafica (desktop) Gestore del Gestore delle processore / Gestore della periferiche/ Scheduler(s) memoria dispositivi

Dettagli

La codifica. dell informazione

La codifica. dell informazione La codifica dell informazione (continua) Codifica dei numeri Il codice ASCII consente di codificare le cifre decimali da 0 a 9 fornendo in questo modo un metodo per la rappresentazione dei numeri Il numero

Dettagli

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE Laboratorio di Architettura lezione 5 Massimo Marchiori W3C/MIT/UNIVE Da Alto a Basso livello: compilazione Come si passa da un linguaggio di alto livello a uno di basso livello? Cioe a dire, come lavora

Dettagli

Architettura di un calcolatore

Architettura di un calcolatore Architettura di un calcolatore Corso di Informatica A Vito Perrone Indice La macchina di Von Neumann Memoria CPU Bus Interfacce Esempio L algoritmo Il programma Fasi di esecuzione di un istruzione 2 1

Dettagli

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO Lez. 5 La Programmazione Prof. Salvatore CUOMO 1 2 Programma di utilità: Bootstrap All accensione dell elaboratore (Bootsrap), parte l esecuzione del BIOS (Basic Input Output System), un programma residente

Dettagli

Programmazione in Java (I modulo)

Programmazione in Java (I modulo) Programmazione in Java (I modulo) Lezione 4 Variabili di tipo primitivo. Dichiarazione di costanti Conversioni di tipo: operatore cast Altri operatori di assegnamento Operazioni aritmetiche e di confronto

Dettagli

Lezione 3. I numeri relativi

Lezione 3. I numeri relativi Lezione 3 L artimetcia binaria: i numeri relativi i numeri frazionari I numeri relativi Si possono rappresentare i numeri negativi in due modi con modulo e segno in complemento a 2 1 Modulo e segno Si

Dettagli

PROBLEMI ALGORITMI E PROGRAMMAZIONE

PROBLEMI ALGORITMI E PROGRAMMAZIONE PROBLEMI ALGORITMI E PROGRAMMAZIONE SCIENZE E TECNOLOGIE APPLICATE CLASSE SECONDA D PROGRAMMARE = SPECIFICARE UN PROCEDIMENTO CAPACE DI FAR SVOLGERE AD UNA MACCHINA UNA SERIE ORDINATA DI OPERAZIONI AL

Dettagli

perror: individuare l errore quando una system call restituisce -1

perror: individuare l errore quando una system call restituisce -1 perror: individuare l errore quando una system call restituisce -1 Quando una system call (o una funzione di libreria) non va a buon fine, restituisce come valore -1 Come si fa a sapere più precisamente

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

Elementi di Architettura

Elementi di Architettura Elementi di Architettura Fondamenti di Informatica Roberto BASILI Marzo, 2007 Classi di Istruzioni Istruzioni di assegnamento/modifica Istruzioni di controllo delle sequenze Istruzioni di I/O Classi di

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