Programmazione Assembly Note su Microsoft Assembler

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione Assembly Note su Microsoft Assembler"

Transcript

1 Programmazione Assembly Note su Microsoft Assembler Giacomo Fiumara Anno Accademico / 254

2 Microsoft Assembler Masm32.com installare configurare path perchè contenga la directory bin di Masm32 2 / 254

3 Microsoft Assembler Strumenti Editor di testo (anche Notepad) emulatore DOS Assemblatore (ml) Link a 16 bit (link16) 3 / 254

4 Microsoft Assembler Documentazione Documentazione Intel Debugger K. R. Irvine, Assembly language for Intel-based computers, 4th or 5th edition J. T. Streib, Guide to Assembly Language, Springer L. B. Das, The x86 Microprocessors, Pearson 4 / 254

5 Codice Assembly embedded in programmi C Uno degli elementi di maggiore difficoltà della programmazione Assembly è rappresentata dalla gestione dell I/O Per evitare queste difficoltà, nei primi tempi, è possibile effettuare l embedding di porzioni di codice Assembly in programmi C La compilazione deve essere effettuata tenendo conto della presenza di codice Assembly Per esempio, nel caso di un compilatore gcc (consigliato), il comando di compilazione è: gcc -fasm-blocks nome_programma.c -o nome_programma.x 5 / 254

6 Codice Assembly embedded in programmi C /2 Si consideri il seguente codice C: #include stdio.h int main() { int num1, num2; num1 = 5; num2 = num1; printf("%s%d\n", "Valore di num2: ", num2); return 0; } 6 / 254

7 Codice Assembly embedded in programmi C /3 Si modifica come segue: #include stdio.h int main() { int num1, num2; num1 = 5; asm{ mov eax, num1 mov num2, eax } printf("%s%d\n", "Valore di num2: ", num2); return 0; } 7 / 254

8 Registri Introduzione Una delle cose più importanti di un processore è l insieme dei registri Quelli accessibili al programmatore sono detti general purpose Nel caso delle architetture x86 sono presenti, per motivi di compatibilità, registri a 8, 16, 32 bit 8 / 254

9 Registri È la situazione dei registri eax, ebx, ecx, edx Ognuna della porzioni può essere considerata un registro vero e proprio Ognuna delle porzioni può essere utilizzata indipendentemente (e contemporaneamente) dalle altre 9 / 254

10 Registri Registri a 32 bit Nome 16/8 bit Descrizione eax Accumulator ax, ah, al Arithmetic and Logic ebx Base bx, bh, bl Arrays ecx Counter cx, ch, cl Loops edx Data dx, dh, dl Arithmetics esi Source Index si Strings and arrays edi Destination Index di Strings and arrays esp Stack Pointer sp Top of stack ebp Base Pointer bp Base of stack eip Instruction Pointer ip Points to next instruction eflags Flag flag Status and control flag 10 / 254

11 Registro eflags Si tratta di un registro particolare, nel senso che ogni singolo bit che lo compone può essere riferito indipendentemente dagli altri Ogni bit controlla un operazione della CPU o fornisce informazioni sul risultato dell operazione Si tratta comunque di un registro che può essere acceduto in lettura e scrittura: In lettura per verificare, come detto, il risultato di un operazione In scrittura per impostare lo stato di un flag del processore 11 / 254

12 Registro eflags /2 Il registro eflags è un registro a 16 bit 7 bit non sono utilizzati 6 flag condizionali (contengono informazioni sullo stato delle operazioni della CPU): Carry Flag (CF) Zero Flag (ZF) Parity Flag (PF) Sign Flag (SF) Auxiliary Carry Flag (AF) Overflow Flag (OF) 3 flag di controllo: Direction Flag (DF) Interrupt Flag (IF) Trap Flag (TF) 12 / 254

13 Registro eflags /3 Flag condizionali Carry Flag (CF) Viene settato se si verifica un riporto sul bit più significativo durante un calcolo. Il riporto può verificarsi sul bit 7 (operazioni a 8 bit) oppure sul bit 15 (operazioni a 16 bit) Zero Flag (ZF) Viene settato quando il risultato di un operazione logico-aritmetica è zero. Per esempio: quando si decrementa il contenuto di un registro (di solito il registro CX, che viene usato come contatore), il contenuto del registro sarà zero. In quel momento ZF viene settato. Un altro caso è rappresentato dal confronto tra due numeri. Parity Flag (PF) Quando questo flag viene settato, si ha un numero pari di bit nel byte meno significativo del registro destinazione. Non viene molto usato. 13 / 254

14 Registro eflags /4 Flag condizionali /2 Sign Flag (SF) Viene settato se il risultato di un operazione logico-aritmetica è negativo. Di fatto contiene il MSB (most significant bit) del risultato, ovvero il bit di segno nelle operazioni aritmetiche con segno. Auxiliary Carry Flag (AF) Identico a CF, salvo il fatto che viene settato quando si produce riporto sul bit 3, cioè quando si produce riporto sui 4 bit meno significativi. Overflow Flag (OF) Viene settato se: si produce overflow nel MSB con riporto si produce overflow senza riporto 14 / 254

15 Registro eflags /5 Flag di controllo Direction Flag (DF) Controlla la direzione (sx-dx o viceversa) nella manipolazione delle stringhe. Quando è settato, le operazioni che auto-incrementano i registri sorgente e destinazione (SI e DI) incrementano entrambi i registri e il flusso dei caratteri che compongono le stringhe avviene da sinistra verso destra. Quando è posto uguale a zero, il flusso avviene da destra verso sinistra. Interrupt Flag (IF) Quando viene settato da programmi con sufficienti privilegi, gli interrupt hardware mascherabili possono essere gestiti. Trap Flag (TF) Viene settato per scopi di debug: i programmi vengono eseguiti un istruzione per volta e si arrestano. Ovviamente, questo consente di esaminare lo stato dei registri. 15 / 254

16 Registri di segmento Architettura della memoria Il processore 8086 ha un bus degli indirizzi a 20 bit Questo significa che la memoria indirizzabile ammonta a 2 20 = byte Cioè dall indirizzo 00000H all indirizzo fffffh La memoria è vista come suddivisa in quattro segmenti: Segmento dati Segmento codice Segmento stack Segmento extra 16 / 254

17 Registri di segmento /2 Ognuno dei segmenti è accessibile mediante l indirizzo contenuto nel corrispondente registro di segmento Ogni registro memorizza l indirizzo base (di partenza) del segmento corrispondente Considerata la differenza di dimensione (indirizzo a 20 bit, registro a 16), nei registri vengono memorizzati i 16 bit più significativi dell indirizzo L indirizzo fisico (a 20 bit) di un dato viene calcolato a partire dall indirizzo base (contenuto nel registro) Per esempio, l indirizzo logico 2222H : 0016H diventa 22220H H = 22236H Si noti che il registro DS (Data Segment) contiene il valore 2222H, e che la quantità 0016H viene detta scostamento (offset) 17 / 254

18 Registri di segmento /3 Segmento di Codice Il segmento di codice (Code Segment, CS) è l area di memoria che contiene soltanto il codice di un programma. L offset rispetto al segmento di codice è fornito dall Instruction Pointer (IP), che punta sempre all istruzione successiva. L indirizzo logico di una istruzione è pertanto CS:IP Segmento di Stack Il segmento di stack (Stack Segment, SS) è l area di memoria che contiene lo stack. È gestita seconda la logica last-in-first-out. Il registro Stack Pointer punta alla cima dello stack. Un indirizzo logico 4466H : 0122H significa che il registro SS contiene il valore 4466H e che il registro IP 0122H: l indirizzo fisico si ottiene come 44660H H = 44782H. 18 / 254

19 Registri di segmento /4 Segmento Dati e Segmento Extra Contengono entrambi dati, ma in alcuni casi particolari (quando si gestiscono stringhe) può essere necessario gestirli in segmenti separati. I registri corrispondenti sono DS (Data Segment) e ES (Extra Segment). 19 / 254

20 Struttura della memoria 20 / 254

21 Struttura della memoria /2 21 / 254

22 Mappa della memoria Disposizione del codice eseguibile e dei dati in memoria: Stack Dati non inizializzati Dati del programma Codice eseguibile Prefisso del segmento del programma (PSP, Program Segment Prefix 22 / 254

23 Modelli di memoria I programmi eseguibili presentano di norma segmenti separati per i dati, il codice, lo stack ogni segmento non può occupare più di 64kB di memoria il modello di memoria è il modo in cui un programma indirizza le differenti aree della mappa di memoria Modello Num. segmenti codice Num. segmenti dati small 1 1 compact 1 più di 1 medium più di 1 1 large più di 1 più di 1 23 / 254

24 Interrupt Introduzione Sono il mezzo con cui i circuiti esterni al microprocessore comunicano il verificarsi di un evento i microprocessori possono rispondere ad interrupt hardware e/o software un dispositivo hardware può produrre un segnale di interrupt che viene elaborato dal PIC (Programmable Interrupt Controller) e da questi trasmesso al processore gli interrupt software vengono generati mediante la funzione INT l effetto di un interrupt è che il processore arresta la sua normale attività ed esegue una routine residente in memoria (gestione di interrupt) al termine, il microprocessore riprende la sua attività dal punto in cui l interrupt l aveva fermato 24 / 254

25 Interrupt Gestione degli interrupt 8086 La famiglia di processori 80x86 gestisce fino a 256 interrupt differenti (da 00H fino a FFH), dove H sta per esadecimale ad ogni interrupt è associata una routine l indirizzo di ognuna delle 256 routine è memorizzato in una tabella, detta tabella dei vettori di interrupt ogni vettore di interrupt occupa 4 byte, quindi l indirizzo di ogni vettore di interrupt può essere ottenuto moltiplicando per 4 il numero dell interrupt 25 / 254

26 Interrupt Interrupt software Quando il processore esegue l istruzione: INT 12H vengono caricati sullo stack i contenuti correnti: del registro dei flag del registro del codice (CS) del registro IP (Instruction Pointer) il controllo viene trasferito alla routine di gestione dell interrupt, mediante l indirizzo 48H il processore esegue la routine di gestione dell interrupt la routine termina con l istruzione IRET, che scarica dallo stack i contenuti dei registri della routine interrotta il controllo viene restituito al programma interrotto 26 / 254

27 Interrupt Interrupt del DOS Interrupt 20H (32D) 21H (33D) 22H (34D) 23H (35D) 24H (36D) 25H (37D) 26H (38D) 27H (39D) 28H (20D) 2FH (47D) Descrizione Arresto del programma Servizi generali del DOS Indirizzo di terminazione Indirizzo del gestore del Ctrl-C Indirizzo gestore errori critici Lettura disco assoluta Scrittura disco assoluta TSR (Terminate and Stay Resident) Interrupt stato d attesa DOS Interrupt Multiplex 27 / 254

28 Interrupt L interrupt int21h Uno degli interrupt più utilizzati è INT 21H Nell elenco alcune funzioni: Funzione 00H (00D) 01H (01D) 02H (02D) 05H (05D) 08H (08D) 09H (09D) 0FH (15D) 10H (16D) Descrizione Termina Input di un carattere con eco Output di un carattere Output della stampante Input dalla console senza eco Output di una stringa Apertura file Chiusura file 28 / 254

29 Interrupt L interrupt int21h Esempio di utilizzo di una delle funzioni dell interrupt int 21h: mov ah, 1h int 21h Nell esempio: il valore 1h viene caricato nel registro ah (viene selezionata la funzione di input carattere con eco) viene invocato l interrupt il carattere digitato da tastiera viene memorizzato nel registro al 29 / 254

30 Struttura di un programma assembly.model small.stack 100h.data.code start:... mov ax, 4c00h int 21h end start 30 / 254

31 Esempi di programmazione assembly ; prog1.asm ; stampa il carattere a a schermo ;.model small.stack 100h.code start: mov dl, a mov ah, 2h int 21h mov ax, 4c00h int 21h end start 31 / 254

32 Esempi di programmazione assembly / 2 ; legge un carattere da tastiera e lo stampa a video.model small.stack 100h.code start: mov ah, 1h int 21h mov dl, al mov ah, 2h int 21h mov ax, 4c00h int 21h end start 32 / 254

33 Esempi di programmazione assembly / 3 ; legge un carattere da tastiera ; lo stampa a video ; viene visualizzato un prompt.model small.stack 100h.code start: mov dl, > mov ah, 2h int 21h mov ah, 1h int 21h mov bl, al mov dl, mov ah, 2h int 21h mov dl, bl mov ah, 2h int 21h mov ax, 4c00h int 21h end start 33 / 254

34 Esempi di programmazione assembly / 4 ; prog4.asm ; legge un carattere da tastiera ; mostra CR, LF e il carattere inserito ;.model small.stack 100h.code start: mov dl, > mov ah, 2h int 21h mov ah, 1h int 21h mov bl, al mov dl, 13d mov ah, 2h int 21h mov dl, 10d mov ah, 2h int 21h mov dl, bl mov ah, 2h int 21h mov ax, 4c00h int 21h end start 34 / 254

35 Esempi di programmazione assembly / 5 ; prog5.asm ; visualizza una stringa a video ;.model small.stack 100h.data stringa db Ciao a tutti, 13, 10, \$ mov dx, offset stringa mov ah, 9h int 21h mov ax, 4c00h int 21h end start.code start: mov mov ds, ax 35 / 254

36 Operazioni e Metodi di Indirizzamento L architettura 8086 richiede l esistenza di uno o due operandi Per esempio uno shift richiede un operando, un addizione due Come esempio si consideri l istruzione mov destination, source Gli operandi (destination e source) possono essere specificati nei seguenti modi: Indirizzamento mediante registri Indirizzamento immediato Indirizzamento diretto Indirizzamento indiretto mediante registri Indirizzamento relativo mediante registri Indirizzamento indicizzato Indirizzamento indicizzato relativo 36 / 254

37 Operazioni e Metodi di Indirizzamento Indirizzamento mediante registri In questo caso, destination e source sono entrambi registri Per esempio: mov al, ah mov si, ax mov ax, bl ; errore (un dato a 8 bit viene copiato in un registro a 16 bit) mov bl, ax ; errore (un dato a 16 bit viene copiato in un registro a 8 bit) 37 / 254

38 Operazioni e Metodi di Indirizzamento Indirizzamento immediato In questo caso, source è un dato costante Per esempio: mov al, 33h mov cx, 1234h mov al, c mov var1, / 254

39 Operazioni e Metodi di Indirizzamento Indirizzamento diretto In questo caso, destination o source sono indirizzi (offset rispetto al valore di DS) di memoria Per esempio: mov ax, [1234h] mov [5678h], al mov var1, al mov bx, var2 39 / 254

40 Operazioni e Metodi di Indirizzamento Indirizzamento indiretto mediante registri In questa modalità di indirizzamento, l indirizzo di un dato è memorizzato in un registro, che si comporta come se fosse un puntatore al dato. I registri permessi in questa modalità sono BX, SI, DI mov al, [bx] ; il contenuto della locazione il cui indirizzo è puntato da bx viene copiato in al mov [si], cl ; il contenuto di cl viene copiato nella locazione il cui indirizzo è puntato da si 40 / 254

41 Operazioni e Metodi di Indirizzamento Indirizzamento relativo mediante registri In questa modalità il registro (quelli permessi sono BX, SI, DI, BP) contiene l indirizzo di un dato; a questo viene aggiunto uno scostamento mov cl, 10[bx] mov cl, [bx+10] mov cl, [bx]10 41 / 254

42 Operazioni e Metodi di Indirizzamento Indirizzamento indicizzato In questa modalità l indirizzo del dato viene ottenuto sommando il contenuto di due registri: un registro base e un registro indice mov al, [bx][si] mov [bx][di], cx 42 / 254

43 Operazioni e Metodi di Indirizzamento Indirizzamento indicizzato relativo In questa modalità l indirizzo del dato viene ottenuto sommando il contenuto di due registri ed uno scostamento mov dl, 5[bx][di] mov 5[bp][si], ax 43 / 254

44 Operazioni e Metodi di Indirizzamento Esempio - Indirizzamento relativo mediante registri.model small.data array db 10h, 20h, 30h, 40h, 50h.code start: mov di, 0 mov al, array[di] add al, 07h add di, 05h mov array[di], al mov ax, 4c00h int 21h end start 44 / 254

45 Operazioni e Metodi di Indirizzamento Esempio - Indirizzamento indicizzato.model small.data array db 34h, 87h, 56h, 05h, 07h.code start: mov bx, offset array mov di, 0 mov al, [bx + di] add al, 35h mov di, 05 mov [bx + di], al mov ax, 4c00h int 21h end start 45 / 254

46 Tipi di dati Gli operandi numerici possono essere espressi in notazione decimale, binaria, esadecimale e ottale la convenzione utilizzata dall assemblatore è che un operando viene espresso in base 10 a meno che non sia presente un suffisso che indichi il contrario i suffissi utilizzabili sono: H (hexadecimal) D (decimal) B (binary) O o Q (octal) nessuno (decimale) 46 / 254

47 Tipi di dati /2 Tipo BYTE SBYTE WORD SWORD DWORD SDWORD FWORD QWORD TBYTE REAL4 REAL8 REAL10 Descrizione Intero senza segno a 8 bit Intero con segno a 8 bit Intero senza segno a 16 bit Intero con segno a 16 bit Intero senza segno a 32 bit Intero con segno a 32 bit Intero a 48 bit Intero a 64 bit Intero a 80 bit Reale a 32 bit Reale a 64 bit (long) Reale a 80 bit (extended) 47 / 254

48 Tipi di dati /3 La direttiva BYTE riserva uno o più byte per la memorizzazione di dati. La direttiva: numero BYTE b riserva un byte di memoria e lo inizializza al valore 65H a tutti gli effetti pratici, sono assolutamente equivalenti le seguenti direttive: numero BYTE b numero BYTE 65h numero BYTE 101 numero BYTE 145q 48 / 254

49 Tipi di dati /4 Analogamente, le direttive WORD e DWORD permettono di riservare una o due parole di memoria tenendo conto del segno del numero che si vuole memorizzare; si può avere: WORD da a oppure WORD da 0 a DWORD da a oppure DWORD da 0 a / 254

50 Tipi di dati /5 Esempio Ad esempio: var1 WORD -1 var2 WORD 0 var3 WORD var4 WORD var5 WORD dvar1 DWORD 0 dvar2 DWORD -1 dvar3 DWORD dvar4 DWORD dvar3 DWORD / 254

51 Tipi di dati /6 BYTE La direttiva BYTE permette di definire operandi sotto forma di caratteri o di stringhe di caratteri caratteri e stringhe devono essere racchiusi tra apici (semplici o doppi) char1 BYTE g char2 BYTE "g" str1 BYTE ciccio str2 BYTE "ciccio s" 51 / 254

52 Tipi di dati /7 Assegnazioni multiple Le costanti permettono le assegnazioni multiple L etichetta si riferisce soltanto all offset del primo byte Per esempio: lista BYTE 10, 20, 30, 40 Offset Valore 52 / 254

53 Tipi di dati /8 Operatore DUP L operatore DUP produce un allocazione ripetuta, mediante l utilizzo di un espressione costante come contatore È particolarmente utile quando si alloca spazio per array o stringhe, e può essere impiegato per la definizione di dati inizializzati o meno Per esempio: BYTE 20 DUP(0) ; 20 byte, tutti inizializzati a zero BYTE 20 DUP(?) ; 20 byte, non inizializzati mioarray DWORD 100 DUP(101) ; 100 elementi DWORD, inizializzati a / 254

54 Tipi di dati /9 Esempio di utilizzo di DUP ; prog9.asm ; utilizzo di DUP.model small.stack 100h.data ostr db 50 dup( * ).code start: mov mov ds, ax mov dx, offset ostr call puts mov ax, 4c00h int 21h ;;;;;;;;;;;;;;;;;; ; subroutine puts puts: mov ah, 9h int 21h ret end start 54 / 254

55 Istruzione mov Copia dati da un operando sorgente ad un operando destinazione bisogna rispettare le seguenti regole: gli operandi devono avere la stessa dimensione gli operandi non possono essere entrambi locazioni di memoria i registri CS, EIP e IP non possono essere operandi destinazione un valore immediato non può essere spostato in un registro di segmento Le possibilità sono: MOV reg, reg MOV mem, reg MOV reg, mem MOV mem, imm MOV reg, imm 55 / 254

56 Istruzione xchg Scambia il contenuto di due operandi Le possibilità sono: xchg reg, reg xchg reg, mem xchg mem, reg Per esempio: xchg ax, bx xchg ah, al xchg var1, bx 56 / 254

57 Operandi con offset diretto E possibile aggiungere un offset ad una variabile questo permette di raggiungere locazioni di memoria prive di etichette esplicite Per esempio: vettore byte 10h, 20h, 30h, 40h, 50h... mov al, vettore ; al = 10 mov al, [vettore+1] ; al = 20 mov al, [vettore+2] ; al = / 254

58 Operandi con offset diretto /2 Lo scostamento dipende dalla dimensione della locazione di memoria Per esempio:.data vettore word 100h, 200h, 300h.code mov ax, vettore ; ax = 100 mov ax, [vettore+2] ; ax = 200 ogni elemento dell array occupa 16 bit, e quindi l offset deve essere di 2 per raggiungere il secondo elemento dell array 58 / 254

59 Incremento e decremento Permettono (rispettivamente) di incrementare e decrementare di 1 un singolo operando La sintassi: inc reg/mem dec reg/mem Per esempio:.data var word 1000h.code inc var ; var = 1001h mov bx, var dec bx ; bx = 1000h 59 / 254

60 Addizione e sottrazione Permettono di addizionare (sottrarre) l operando sorgente all (dall )operando destinazione La sintassi: add dest/source sub dest/source Per esempio:.data var1 word 2000h var2 word 1000h.code mov ax, var1 add ax, var2... mov ax, var1 sub ax, var2 60 / 254

61 Istruzione NEG Inverte il segno di un numero mediante complemento a due Sono permessi gli operandi: NEG reg NEG mem 61 / 254

62 Implementazione di istruzioni matematiche Si supponga di dover implementare l espressione: Res = X + (Y Z) res sword? x sword 25 y sword 30 z sword 40 ; primo termine (-x) mov ax, x neg ax ; secondo termine (y - z) mov bx, y sub bx, z ; addizione e memorizzazione add ax, bx mov res, ax 62 / 254

63 Operatori MASM presenta una serie di operatori utili per descrivere e indirizzare variabili: offset, restituisce la distanza di una variabile dall inizio del segmento di appartenenza ptr, permette di modificare la dimensione di default di una variabile type, restituisce la dimensione in byte di ogni elemento di un array lengthof, restituisce il numero di elementi di un array sizeof, restituisce il numero di byte usati per inizializzare un array 63 / 254

64 Operatore offset L operatore offset restituisce l offset di una variabile, cioè la distanza in byte della variabile dall inizio del segmento dati in modalità protetta un offset è sempre di 32 bit in modalità reale un offset è sempre di 16 bit Per esempio:.data bvar byte? wvar word? dvar1 dword? dvar2 dword?.code mov si, offset bvar ; si = 4000 mov si, offset wvar ; si = 4001 mov si, offset dvar1 ; si = 4003 mov si, offset dvar2 ; si = / 254

65 Operatore ptr Permette di modificare la dimensione di default di un operando È necessario quando si tenta di accedere alla variabile utilizzando un attributo di dimensione differente da quello utilizzato per la dichiarazione della variabile esempio: spostare i 16 bit meno significativi di una variabile DWORD in un registro (a 16 bit) Per esempio:.data var dword h.code mov ax, var ; SBAGLIATO mov ax, word ptr var ; ax = 5678h mov ax, byte ptr var ; ax = 78h mov ax, word ptr [var + 2] ; ax = 1234h 65 / 254

66 Operatore type Restituisce la dimensione in byte di un singolo elemento di una variabile Per esempio:.data var1 byte? ; type = 1 var2 word? ; type = 2 var3 dword? ; type = 4 66 / 254

67 Operatore lengthof Conta il numero di elementi di un array definiti in base ai valori che appaiono nella linea della label Per esempio:.data byte1 byte 10, 20, 30 ; lengthof = 3 vec1 word 30 dup(?),0,0 ; lengthof = 32 vec2 word 5 dup(3 dup(?)) ; lengthof = 5*3 vec3 dword 1, 2, 3, 4 ; lengthof = 4 str1 byte " ", \$ ; lengthof = 9 67 / 254

68 Operatore sizeof Restituisce un valore uguale al prodotto di lengthof per type Per esempio: vec word 32 dup(0) ; sizeof = / 254

69 Procedure ; prog7.asm ; conversione M/m.model small.stack 100h.data istr db Carattere M: $ ostr db Carattere m: $.code ; subroutine getc getc proc mov ah, 1h int 21h ret getc endp ; subroutint putc putc proc mov ah, 2h int 21h ret putc endp ; subroutine puts puts proc mov ah, 9h int 21h ret puts endp 69 / 254

70 Procedure /2 ; subroutine put1310 put1310 proc mov dl, 13d mov ah, 2h int 21h mov dl, 10d mov ah, 2h int 21h ret put1310 endp main proc mov mov ds, ax mov dx, offset istr invoke puts call getc mov bl, al add bl, 32d call put1310 mov dx, offset ostr call puts mov dl, bl call putc mov ax, 4c00h int 21h main endp end main 70 / 254

71 Procedure /3 Programmazione modulare ; modules2.asm ; conversione M/m ; programmazione modulare, ; le procedure si trovano ; nel file procs.asm.model small.stack 100h.data istr db Carattere M: $ ostr db Carattere m: $.code getc proto putc proto puts proto put1310 proto main proc mov mov ds, ax mov dx, offset istr invoke puts invoke getc mov bl, al add bl, 32d invoke put1310 mov dx, offset ostr invoke puts mov dl, bl invoke putc mov ax, 4c00h int 21h main endp end main 71 / 254

72 Procedure /4 Programmazione modulare - file procedure.model small.code ; subroutine getc getc proc mov ah, 1h int 21h ret getc endp ; subroutint putc putc proc mov ah, 2h int 21h ret putc endp ; subroutine puts puts proc mov ah, 9h int 21h ret puts endp ; subroutine put1310 put1310 proc mov dl, 13d mov ah, 2h int 21h mov dl, 10d mov ah, 2h int 21h ret put1310 endp end 72 / 254

73 Procedure /5 Programmazione modulare - compilazione C:\masm32\progs>ml /c modules2.asm procs.asm C:\masm32\progs>link16 modules2.obj procsobj,,,,, C:\masm32\progs>modules2 Carattere M: F Carattere m: f 73 / 254

74 Debug debug.exe e un programma per il debug, la verifica e il test di programmi Sintassi: debug nome-programma.exe al prompt (-) digitare? per ottenere un elenco dei comandi disponibili 74 / 254

75 Debug /2 75 / 254

76 Debug /3 Comando g (go) digitando g viene effettuata l esecuzione del programma nell ambiente di debug 76 / 254

77 Debug /4 Comando r (registers) serve a visualizzare lo stato dei registri 77 / 254

78 Debug /5 Comando t (trace) permette di eseguire l istruzione corrente molto utile, perche mostra lo stato dei registri ad ogni istruzione 78 / 254

79 Debug /6 Comando u (unassemble) traduce in assembly i byte contenuti dopo la conclusione del codice sorgente, il comando u continua disassemblando tutto quello che incontra (quasi sempre senza senso) 79 / 254

80 Debug /7 Comando p (proceed) esegue una procedura (call o int) per intero senza entrare nei dettagli delle istruzioni della procedura si usa in alternanza al comando t 80 / 254

81 Debug /8 Comando d (dump) mostra il contenuto della memoria quando un eseguibile e caricato dal debug mostra la mappa di memoria 81 / 254

82 Debug /9 Esempio di utilizzo Visualizzare lo stato dei registri mediante il comando trace di debug.model small.stack 100h.data.code start: mov ax, 11h add ax, 22h sub ax, 30h mov ax, 4c00h int 21h end start 82 / 254

83 Indirizzamento indiretto L indirizzamento diretto non pratico per operazioni sugli array richiede infatti di fornire un nome (label) per ogni elemento dell array la soluzione consiste nell utilizzare un registro come puntatore e modificare il valore del registro questa tecnica si chiama indirizzamento indiretto il registro che memorizza un indirizzo viene detto operando indiretto 83 / 254

84 Operandi indiretti Un operando indiretto pu essere qualsiasi registro general-purpose (bx, si, di, bp) viene utilizzato racchiudendolo tra parentesi quadre (per esempio, [ax]).data var1 byte 10h.code start: mov si, offset var1 mov al, [si] end start 84 / 254

85 Operandi indiretti (modalit protetta, a 32 bit) In modalit protetta si possono utilizzare pcome operandi indiretti i registri a 32 bit: eax, ebx, ecx, edx, esi, edi, ebp, esp se l indirizzo punta ad un area esterna al segmento dati del programma si genera un general protection (GP) fault un GP fault si pu verificare anche senza che si intenda modificare la memoria indirizzata il modo migliore per evitare questo tipo di errori consiste nell inizializzare i registri da impiegare per l indirizzamento indiretto i GP fault non si verificano in modalit reale (16 bit) 85 / 254

86 Utilizzo di ptr con gli operandi indiretti La dimensione di un operando non sempre chiara dal contesto Per esempio: inc [si] ; errore: l operando deve essere dimensionato inc ptr byte [si] ; corretto: si chiarisce il puntamento ad un byte 86 / 254

87 Array Gli operandi indiretti sono particolarmente utili quando si gestiscono array, perch il valore di un operando indiretto pu essere modificato facilmente in modo analogo all indice di un array, un operando indiretto pu puntare ai diversi elementi di un array Per esempio:.data vettore byte 10h, 20h, 30h.code mov mov ds, ax mov si, offset vettore mov al, [si] ; al = 10h inc si mov al, [si] ; al = 20h inc si mov al, [si] ; al = 30h 87 / 254

88 Array /2 Quando si gestisce un array di interi a 16 bit (word), bisogna incrementare il registro si di 2 per indirizzare i successivi elementi Per esempio:.data vettore word 1000h, 2000h, 3000h.code mov si, offset vettore mov ax, [si] ; ax = 1000h add si, 2 mov ax, [si] ; ax = 2000h add si, 2 mov ax, [si] ; ax = 3000h 88 / 254

89 Array /3 Quando si gestisce un array di interi a 32 bit (dword), bisogna incrementare il registro si di 4 Per esempio:.data vettore dword 10000h, 20000h, 30000h.code mov si, offset vettore mov ax, [si] ; ax = 10000h add si, 4 mov ax, [si] ; ax = 20000h add si, 4 add ax, [si] ; ax = 30000h 89 / 254

90 Operandi indicizzati Un operando indicizzato aggiunge una costante ad un registro per produrre un indirizzo in modalit protetta qualsiasi registro a 32 bit pu essere utilizzato come registro indice in modalit reale soltanto i registri si, di, bx o bp possono essere utilizzati come registri indice MASM permette due notazioni: cost[reg] [cost + reg] 90 / 254

91 Operandi indicizzati /2 E buona consuetudine inizializzare a zero il registro indice.data bvec byte 10h, 20h, 30h.code mov si, 0 mov al, [bvec + si] ; al = 10h 91 / 254

92 Operandi indicizzati /3.data wvec word 1000h, 2000h, 3000h.code mov si, offset wvec mov ax, [si] ; ax = 1000h mov ax, [si + 2] ; ax = 2000h mov ax, [si + 4] ; ax = 3000h 92 / 254

93 Puntatori Una variabile che contiene l indirizzo di un altra variabile detta variabile puntatore i puntatori sono essenziali quando si elaborano array e strutture dati MASM prevede l utilizzo di due tipi di puntatori near (16 bit in modalit reale, 32 bit in modalit protetta) far (32 bit in modalit reale, 48 bit in modalit protetta) 93 / 254

94 Puntatori /2 bvec byte 10h, 20h, 30h, 40h wvec word 1000h, 2000h, 3000h ptrb dword bvec ptrw dword wvec In alternativa: ptrb dword offset bvec ptrw dword offset wvec 94 / 254

95 Puntatori Definizione mediante typedef L operatore typedef permette di creare un tipo di variabile pu essere utilizzato per creare puntatori Per esempio: pbyte typedef ptr byte Per esempio: pbyte typedef ptr byte.data bvec byte 10h, 20h, 30h, 40h ptr1 pbyte? ; non inizializzato ptr2 pbyte bvec ; punta all array bvec 95 / 254

96 JMP e LOOP Un trasferimento di controllo, o branch un modo di alterare l ordine in cui le istruzioni vengono eseguite tutti i linguaggi di programmazione presentano istruzioni di branching possibile suddividere queste istruzioni in: trasferimenti incondizionati, per esempio mediante l istruzione JMP trasferimenti condizionati, in cui la ramificazione si verifica soltanto se una certa condizione vera. Per esempio, l istruzione LOOP 96 / 254

97 Istruzione jmp Provoca un trasferimento incondizionato ad una locazione interna al segmento di codice la locazione destinazione deve essere identificata mediante un etichetta la sintassi : jmp etichetta L istruzione jmp pu essere impiegata per realizzare un loop top: jmp top ; attenzione si genera un loop infinito 97 / 254

98 Istruzione loop Fornisce un modo semplice per ripetere l esecuzione di un blocco di istruzioni per un numero specificato di volte il registro cx viene automaticamente utilizzato come contatore e viene decrementato ogni volta che il ciclo si ripete la sintassi : loop destinazione Per esempio: L1: mov ax, 0 mov cx, 5 inc ax loop L1 98 / 254

99 Istruzione loop Avvertenze bisogna evitare di inizializzare il registro cx a zero prima di avviare il loop. Se questo avvenisse, l istruzione loop incrementerebbe cx a ffff e itererebbe volte la destinazione del ciclo deve trovarsi nell intervallo da -128 a +127 rispetto al contatore locale; le istruzioni macchina hanno una dimensione media di 3 byte, quindi un loop pu contenere circa 40 istruzioni una modifica del valore di cx all interno del loop può avere effetti indesiderati 99 / 254

100 .model small.stack 100h.data str1 byte "Stringa da copiare","0" str2 byte sizeof str1 dup(0).code start: mov si, 0 mov cx, sizeof str1 L1: mov al, str1[si] mov str2[si], al inc si loop L1 mov ax, 4c00h int 21h end start 100 / 254

101 Gestione della memoria Introduzione I processori IA-32 (Intel Architecture 32 bit, dal 386 in poi) presentano tre modalità fondamentali: protetta 8086 virtuale (un caso particolare di modalità protetta) real-address system management 101 / 254

102 Gestione della memoria /2 Modalità protetta Si tratta della modalità di esecuzione nativa del processore, nel quale tutte le istruzioni e le possibilità sono consentite Ai programmi vengono assegnate aree di memoria (segmenti) Il processore individua ogni tentativo di accedere ad aree di memoria esterne al segmento assegnato Il processore può accedere a 4 GB di memoria (i registri vengono considerati tutti a 32 bit) 102 / 254

103 Gestione della memoria /3 Modalità 8086 virtuale Si tratta di un caso particolare della modalità protetta Il processore si comporta come un 8086, ma in un ambiente multitasking Per esempio, un crash non influenza negativamente altri programmi e/o il sistema 103 / 254

104 Gestione della memoria /4 Modalità real-address Nota anche come modalità reale Questa modalità implementa l ambiente di programmazione del processore Intel 8086 con alcuni elementi ulteriori Tra questi la possibilità di commutare alle altre due modalità Questa modalità è stata introdotta in Windows 98 Si tratta della modalità di avvio di tutti i processori Intel In questa modalità soltanto 1 MB di memoria è accessibile ai programmi (20 bit, da a FFFFF) 104 / 254

105 Gestione della memoria /5 Modalità system management Fornisce al sistema operativo un meccanismo per implementare alcune funzionalità come il power management e la sicurezza di sistema 105 / 254

106 Operazioni sullo stack Introduzione Come si ricorderà, lo stack è una struttura LIFO (Last In First Out) cioè, l ultimo valore inserito è sempre il primo ad essere estratto il runtime stack è un array di memoria gestita direttamente dalla CPU mediante due registri: SS e SP il registro SS indica l indirizzo iniziale del segmento di memoria dedicato allo stack il registro SP contiene un offset a 16 bit relativo a qualche locazione dello stack il registro SP viene manipolato raramente, viene invece esplicitamente modificato da istruzioni come CALL, RET, PUSH e POP il registro StackPointer SP punta all ultimo intero inserito nello stack 106 / 254

107 Operazioni sullo stack Push Un operazione di push decrementa lo stack pointer di 4 (2 in modalità reale) e copia un valore nella locazione dello stack puntata dallo stack pointer 107 / 254

108 Operazioni sullo stack Pop Un operazione di pop incrementa lo stack pointer di 4 (2 in modalità reale) e rimuove un valore nella locazione dello stack puntata dallo stack pointer 108 / 254

109 Operazioni sullo stack Utilità Lo stack viene utilizzato nei programmi per: creare un area temporanea per i registri quando questi vengono utilizzati per qualche scopo salvare l indirizzo di ritorno della procedura corrente al momento dell invocazione dell istruzione call contenere gli argomenti (eventualmente) passati come parametri ad una procedura al momento della sua esecuzione memorizzare le variabili locali di una procedura 109 / 254

110 Operazioni sullo stack Istruzione push L istruzione push decrementa SP e copia un operando sorgente da 16 o 32 bit nello stack un operando a 16 bit implica un decremento di SP di 2, un operando a 32 bit un decremento di 4 Attenzione: il push di un operando immediato è stato introdotto a partire dalle architetture push r/m16 push r/m32 push imm32 (imm16 in real mode) 110 / 254

111 Operazioni sullo stack Istruzione pop L istruzione pop prima copia il contenuto dell elemento dello stack puntato da SP in un operando destinazione a 32 o 16 bit e successivamente incrementa SP se l operando è a 16 bit, SP viene incrementato di 2, se l operando è a 32 bit l incremento di 4 pop r/m16 pop r/m / 254

112 Operazioni sullo stack Istruzioni pushfd e popfd (pushf e popf) L istruzione pushfd scrive il registro a 32 bit EFLAGS sullo stack popfd scrive su EFLAGS il contenuto prelevato dallo stack modalità reale: pushf per il push del registro (a 16 bit) FLAGS sullo stack modalità reale: popf per il pop nel registro (a 16 bit) FLAGS dallo stack pushf ; pushfd in modalit\ a protetta ; ; codice... ; popf ; popfd in modalit\ a protetta 112 / 254

113 Operazioni sullo stack Istruzioni pushad e popad (pusha e popa) L istruzione pushad effettua il push sullo stack di tutti i registri a 32 bit general-purpose l ordine nel quale viene effettuato: EAX, ECX, EDX, EBX, ESP, EBP, ESI e EDI Analogamente, l istruzione popad ripristina lo stato dei registri modalità reale: l istruzione pusha effettua il push di AX, CX, DX, BX, SP, BP, SI e DI modalità reale: l istruzione popa ripristina i predetti registri Attenzione: il push di un operando immediato è stato introdotto a partire dalle architetture / 254

114 Operazioni sullo stack Esempio: inversione di una stringa (stringa.asm).model small.stack 100h.data str1 byte "ciao","$" str2 byte sizeof str1 dup(0).code start: mov mov ds, ax mov si, 0 mov cx, sizeof str1 dec cx L1: mov al, str1[si] push ax inc si loop L1 114 / 254

115 Operazioni sullo stack Esempio: inversione di una stringa (stringa.asm) / 2 mov cx, sizeof str1 dec cx mov si, 0 L2: pop ax mov str2[si], al inc si loop L2 mov al, "$" inc si mov str2[si], al mov dx, offset str2 mov ah, 9h int 21h mov ax, 4c00h int 21h end start 115 / 254

116 Elaborazione condizionata Introduzione Le condizioni che permettono di modificare il flusso delle istruzioni Assembly operano in base al valore di alcuni bit del registro FLAGS In particolare vengono settati i flag (bit): Zero: quando il risultato di un operazione è uguale a zero Carry: quando un istruzione genera un riporto Segno: copia del bit più significativo dell operando destinazione Overflow: quando un istruzione genera un risultato con overflow Parità: quando un istruzione produce un numero pari di bit 1 nel byte meno significativo dell operando destinazione 116 / 254

117 Elaborazione condizionata Istruzione AND Effettua un AND booleano (bitwise, bit a bit) tra i bit di uguale posto di due operandi il risultato viene memorizzato nell operando destinazione AND destinazione, sorgente Le combinazioni permesse di operandi sono: AND reg, reg AND reg, mem AND reg, imm AND mem, reg AND mem, imm 117 / 254

118 Elaborazione condizionata Istruzione AND / 2 I due operandi possono essere a 8, 16 o 32 bit, ma devono essere della stessa dimensione AND viene spesso utilizzato per eliminare determinati bit e salvarne altri Per esempio: AND mov al, b and al, b Flags: vengono resettati i bit di Overflow e Carry, modificati i bit di Segno, Zero e Parità 118 / 254

119 Elaborazione condizionata Istruzione AND / 3 Mediante l istruzione AND è possibile convertire facilmente una lettera minuscola in maiuscola si osservino i codici ASCII di A e a soltanto il bit 5 è differente: = 61h ( a ) = 41h ( A ) La regola vale per le altre lettere dell alfabeto ponendo in AND una lettera minuscola con , tutti i bit saranno preservati ad eccezione del bit / 254

120 Elaborazione condizionata Istruzione AND - Esempio ; prog09.asm.model small.stack 100h.code start: mov al, b and al, b mov dl, al mov ah, 2h int 21h mov ax, 4c00h int 21h end start 120 / 254

121 Elaborazione condizionata Istruzione OR L istruzione OR effettua un OR booleano tra ogni coppia di bit (di posto uguale) di due operandi il risultato viene posto nell operando destinazione OR destinazione, sorgente L istruzione OR utilizza le stesse combinazioni di operandi dell AND: OR reg, reg OR reg, mem OR reg, imm OR mem, reg OR mem, imm 121 / 254

122 Elaborazione condizionata Istruzione OR / 2 I due operandi possono essere a 8, 16 o 32 bit, ma devono essere della stessa dimensione OR viene spesso utilizzato per settare alcuni bit e preservarne altri Per esempio: OR Flags: vengono resettati i bit di Overflow e Carry, modificati i bit di Segno, Zero e Parità 122 / 254

123 Elaborazione condizionata Istruzione OR / 3 L istruzione OR viene utilizzata per convertire un byte contenente un intero compreso tra 0 e 9 nel carattere ASCII corrispondente a tale scopo necessario settare i bit 4 e 5 per esempio, 05h in OR con 30h diventa il carattere ASCII 35h h OR h h mov dl, 5 or dl, 30h 123 / 254

124 Elaborazione condizionata Istruzione OR - Esempio ; prog10.asm.model small.stack 100h.code start: mov al, b or al, b mov dl, al mov ah, 2h int 21h mov ax, 4c00h int 21h end start 124 / 254

125 Elaborazione condizionata Istruzione XOR L istruzione XOR effettua un OR booleano esclusivo tra ogni coppia di bit (di posto uguale) di due operandi il risultato viene posto nell operando destinazione XOR destinazione, sorgente L istruzione XOR utilizza le stesse combinazioni di operandi dell AND: XOR reg, reg XOR reg, mem XOR reg, imm XOR mem, reg XOR mem, imm 125 / 254

126 Elaborazione condizionata Istruzione XOR / 2 Ricordando la tabella di verità di XOR si può vedere che qualsiasi bit in XOR con 0 mantiene il suo valore, mentre in XOR con 1 viene complementato Una caratteristica di XOR è che si annulla quando viene applicato due volte allo stesso operando Infatti x y (x XOR y) (x XOR y) XOR y Questo lo rende uno strumento ideale per le operazioni di cifratura/decifratura di dati. 126 / 254

127 Elaborazione condizionata Istruzione XOR / 3 XOR viene utilizzato per controllare la parità (pari o dispari) di un numero Infatti: mov al, b xor al, 0 mov al, b xor al, 0 ; 5 bit = parita dispari ; flag di parita azzerato (PO) ; 4 bit = parita pari ; flag di parita settato (PE) Flags: l istruzione XOR resetta sempre i bit di Overflow e Carry. Modifica i bit di Segno, Zero e Parità in base al valore dell operando destinazione. 127 / 254

128 Elaborazione condizionata Istruzione XOR - Esempio ; prog11.asm.model small.stack 100h.code start: mov al, b xor al, 0 mov al, b xor al, 0 mov ax, 4c00h int 21h end start 128 / 254

129 Elaborazione condizionata Istruzione NOT L istruzione NOT complementa tutti i bit di un operando Il risultato è chiamato complemento a 1. Sono permessi i seguenti tipi di operandi: NOT reg NOT mem mov al, b not al ; al = b 129 / 254

130 Elaborazione condizionata Istruzione TEST L istruzione TEST effettua un AND implicito tra ogni coppia di bit (di uguale posto) di due operandi e setta i flag di conseguenza A differenza di AND, l operando destinazione non viene modificato Le combinazioni permesse sono uguali a quelle di AND TEST è utile quando si vuole verificare se determinati bit sono settati. test al, b ; test dello stato dei bit 0 e 3 di AL 130 / 254

131 Elaborazione condizionata Istruzione TEST / 2 Per comprendere il comportamento del flag Zero si consideri il seguente esempio: valore da verificare valore di test ZF = valore da verificare valore di test ZF = / 254

132 Elaborazione condizionata Istruzione cmp L istruzione cmp (compare) effettua una sottrazione implicita di un operando sorgente da un operando destinazione Nessuno dei due operandi viene modificato. L istruzione cmp è fondamentale perchè fornisce le basi per la maggior parte delle strutture logiche. L istruzione cmp seguita da un istruzione di salto condizionato è equivalente ad un IF. La sintassi è: cmp destinazione, sorgente 132 / 254

133 Elaborazione condizionata Istruzione cmp / 2 L istruzione cmp modifica i flag di Overflow, Segno, Zero, Carry, Auxiliary Carry e Parità in base al valore che l operando destinazione avrebbe se venisse utilizzata l istruzione sub: Risultato di cmp ZF CF dest < sorgente 0 1 dest > sorgente 0 0 dest = sorgente 1 0 Se i due operandi sono considerati con segno, i flag Segno, Zero e Overflow indicano le seguenti relazioni tra gli operandi: Risultato di cmp Flag dest < sorgente SF!= OF dest > sorgente SF = OF dest = sorgente ZF = / 254

134 Elaborazione condizionata Istruzione cmp / 3 mov ax, 5 cmp ax, 10 ; CF = 1 (10-5 richiede il "prestito") mov ax, 1000 mov cx, 1000 cmp ax, cx ; ZF = 1 mov si, 105 cmp si, 0 ; ZF = 0 e CF = / 254

135 Elaborazione condizionata Istruzione cmp - Esempio ; prog12.asm.model small.stack 100h.code start: mov ax, 5 cmp ax, 10 mov ax, 1000 mov cx, 1000 cmp ax, cx mov si, 105 cmp si, 0 mov ax, 4c00h int 21h end start 135 / 254

136 Elaborazione condizionata Operazioni sui singoli flag Le operazioni sui singoli flag sono di set e reset. Per esempio: and al, 0 ; ZF = 1 or al, 1 ; ZF = 0 or al, 80h ; SF = 1 and al, 7fh ; SF = 0 stc clc ; set carry flag ; clear carry flag mov al, 7fh ; al = +127 inc al ; al = -128 OF = 1 or ax, 0 ; OF = / 254

137 Elaborazione condizionata Operazioni sui singoli flag - Tabella di debug Set Descrizione Clear Descrizione OV Overflow NV No Overflow DN Direction Down UP Direction Up EI Interrupts Enabled DI Interrupts Disabled NG Sign Flag Negative PL Sign Flag Positive ZR Zero NZ Not Zero AC Auxiliary Carry NA Not Auxiliary Carry PO Odd Parity PE Even Parity CY Carry NC No Carry 137 / 254

138 Elaborazione condizionata Operazioni sui singoli flag - Esempio ; prog13.asm.model small.stack 100h.code start: and al, 0 or al, 1 or al, 80h and al, 7fh stc clc mov al, 7fh inc al or ax, 0 mov ax, 4c00h int 21h end start 138 / 254

139 Elaborazione condizionata Istruzione jcond Un istruzione di salto condizionato effettua una ramificazione verso un etichetta destinazione quando la condizione di un flag vera se la condizione sul flag falsa, viene eseguita l istruzione immediatamente successiva La sintassi : Jcond destinazione cond si riferisce alla condizione di un flag. Si pu avere per esempio: jc (jump if carry) jnc (jump if not carry) jz (jump if zero) jnz (jump if not zero) 139 / 254

140 Elaborazione condizionata Istruzione jcond / 2 MASM richiede che la destinazione del salto sia una label all interno della procedura corrente Ad ogni modo, questa limitazione viene superata utilizzando una label globale indicata dal simbolo :: Per esempio: Jc L1... L1:: In modalità reale, i salti possono avvenire entro un offset di 1 byte (positivo o negativo) in modalità protetta, questa limitazione stata rimossa 140 / 254

141 Elaborazione condizionata Istruzione jcond / 3 mov ax, 5 cmp ax, 5 je L1 mov ax, 5 cmp ax, 6 jl L1 mov ax, 5 cmp ax, 4 jg L1 ; jump if equal ; jump if less ; jump if greater 141 / 254

142 Elaborazione condizionata Istruzione jcond / 4 I salti condizionati possono essere raggruppati come segue: in base a specifici valori dei flag in base all uguaglianza tra operandi, oppure al valore del registro cx in base al confronto tra operandi senza segno in base al confronto tra operandi con segno 142 / 254

143 Elaborazione condizionata Istruzione jcond / 5 Salti condizionati dipendenti dai valori dei flag Simbolo jz jnz jc jnc jo jno js jns jp jnp Descrizione jump if zero jump if not zero jump if carry jump if not carry jump if overflow jump if not overflow jump if sign jump if not sign jump if parity jump if not parity Flags ZF = 1 ZF = 0 CF = 1 CF = 0 OF = 1 OF = 0 SF = 1 SF = 0 PF = 1 PF = / 254

144 Elaborazione condizionata Istruzione jcond / 6 Salti condizionati dipendenti da uguaglianze Simbolo je jne jcxz jecxz Descrizione jump if equal jump if not equal jump if cx = 0 jump if ecx = / 254

145 Elaborazione condizionata Istruzione jcond / 7 Salti condizionati da confronti senza segno Simbolo ja jnbe jae jnb jb jnae jbe jna Descrizione jump if above jump if not below or equal (uguale a ja) jump if above or equal jump if not below (uguale a jae) jump if below jump if not above or equal (uguale a jb) jump if below or equal jump if not above (uguale a jbe) 145 / 254

146 Elaborazione condizionata Istruzione jcond / 8 Salti condizionati da confronti con segno jg jump if greater jnle jump if not less or equal (uguale a jg) jge jump if greater or equal jnl jump if not less (uguale a jge) jl jump if less jnge jump if not greater or equal (uguale a jl) jle jump if less or equal jng jump if not greater (uguale a jle) 146 / 254

147 Elaborazione condizionata Istruzione jcond / 9 I salti basati sui confronti con segno vengono utilizzati quando i numeri che si confrontano possono essere interpretati come valori con segno Per esempio, quando si confronta 80h con 7Fh, l interpretazione è differente se si utilizza ja o jg mov al, 7Fh ; 7Fh = +127 cmp al, 80h ; 80h = -128 ja Lab ; non funziona jg Lgr ; funziona 147 / 254

148 Elaborazione condizionata Istruzione jcond / 10 Istruzioni come AND, OR, NOT, CMP e TEST sono utili quando seguite da istruzioni di salti condizionati che utilizzano i valori del flag di stato per modificare il flusso del programma Per esempio: mov al, status test al, b ; verifica del bit 5 jnz Label Si supponga di voler verificare lo stato dei bit 0, 1 o 4: mov al, status test al, b ; verifica dei bit 0, 1, 4 jnz Label 148 / 254

149 Elaborazione condizionata Istruzione jcond / 11 Si supponga di voler effettuare un salto se i bit 2, 3 e 7 sono tutti contemporaneamente settati: mov al, status and al, b ; preserva i bit 2, 3 e 7 cmp al, b ; verifica che siano settati je Label Si supponga di voler confrontare gli interi senza segno in AX e BX e spostare il maggiore in DX mov dx, ax cmp ax, bx jae L1 ; se ax >= bx salta a L1 mov dx, bx ; else bx maggiore L1: ; dx contiene il maggiore 149 / 254

150 Elaborazione condizionata Istruzione jcond / 12 Si supponga di voler confrontare i valori senza segno memorizzati nelle variabili V1, V2 e V3 il minore dei tre viene poi spostato in ax:.data v1 word? v2 word? v3 word?.code start: mov ax, v1 cmp ax, v2 jbe L1 mov ax, v2 L1: cmp ax, v3 jbe L2 mov ax, v3 L2: / 254

151 Elaborazione condizionata Istruzione jcond / 13 Ricerca del primo elemento non nullo in un array.data intvec sword 0, 0, 0, 0, 1, 20, 35, -12, 66, 4, 0 niente byte "Non sono stati trovati valori non nulli",0.code start: mov mov ds, ax mov bx, offset intvec mov cx, lengthof intvec L1: cmp word ptr [bx], 0 jnz trovato add bx, 2 loop L1 jmp nontrovato trovato: mov dx, word ptr[bx] add dx, 30h mov ah, 2h int 21h jmp quit nontrovato: mov dx, offset niente mov ah, 9h int 21h quit: mov ax, 4c00h int 21h end start 151 / 254

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

Assembly. Modello x86

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

Dettagli

CALCOLATORI ELETTRONICI II

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

Dettagli

Architettura degli elaboratori (A)

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

Dettagli

Il microprocessore 8086

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

Dettagli

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

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

Dettagli

Ing. Paolo Domenici PREFAZIONE

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

Dettagli

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

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

Dettagli

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

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

Dettagli

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

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

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

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

Dettagli

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

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

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

Dettagli

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico 2006 2007 pagina 1

La microarchitettura. Didattica della strumentazione digitale e sistemi a microprocessore anno accademico 2006 2007 pagina 1 La microarchitettura. anno accademico 2006 2007 pagina 1 Integer Java virtual machine Ogni microprocessore può avere una microarchitettura diversa, ma la modalità di funzionamento per certi aspetti è generale.

Dettagli

CPU. Maurizio Palesi

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

Dettagli

Architettura degli Elaboratori

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

Dettagli

Hardware di un Computer

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

Dettagli

SISTEMI DI NUMERAZIONE E CODICI

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

Dettagli

Introduzione. Architettura

Introduzione. Architettura Introduzione Questo simulatore fornisce una versione semplificata dell assemblatore sfruttato dal processore 8088 trasformando il codice inserito in input in codice eseguibile e ne simula l esecuzione

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

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

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

Dettagli

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

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

Dettagli

Testi di Esercizi e Quesiti 1

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

Dettagli

Introduzione alla programmazione in C

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

Dettagli

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

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

Dettagli

Esempio di moltiplicazione come somma e spostamento

Esempio di moltiplicazione come somma e spostamento Esempio di moltiplicazione come somma e spostamento Implementare una moltiplicazione coinvolge algoritmi di shift e somma Istruzioni di Shift:movimento di bit: ROL Rd ROR Rd LSL Rd LSR ASR Rd Rd 22 x 35

Dettagli

STRUTTURE DEI SISTEMI DI CALCOLO

STRUTTURE DEI SISTEMI DI CALCOLO STRUTTURE DEI SISTEMI DI CALCOLO 2.1 Strutture dei sistemi di calcolo Funzionamento Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione Hardware Architettura di un generico sistema

Dettagli

Funzioni in C. Violetta Lonati

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

Dettagli

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti

L unità di controllo. Il processore: unità di controllo. Le macchine a stati finiti. Struttura della macchina a stati finiti 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

PROVA INTRACORSO TRACCIA A Pagina 1 di 6

PROVA INTRACORSO TRACCIA A Pagina 1 di 6 PROVA INTRACORSO DI ELEMENTI DI INFORMATICA MATRICOLA COGNOME E NOME TRACCIA A DOMANDA 1 Calcolare il risultato delle seguenti operazioni binarie tra numeri interi con segno rappresentati in complemento

Dettagli

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi

L Assembler 80x86 Concetti Generali. M. Rebaudengo M. Sonza Reorda P. Bernardi L Assembler 80x86 Concetti Generali M. Rebaudengo M. Sonza Reorda P. Bernardi Sommario Introduzione Pseudo-Istruzioni Operatori Modi di Indirizzamento Istruzioni Sommario Introduzione Pseudo-Istruzioni

Dettagli

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

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

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli

I sistemi di numerazione

I sistemi di numerazione I sistemi di numerazione 01-INFORMAZIONE E SUA RAPPRESENTAZIONE Sia dato un insieme finito di caratteri distinti, che chiameremo alfabeto. Utilizzando anche ripetutamente caratteri di un alfabeto, si possono

Dettagli

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

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

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

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

Dettagli

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro

Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica. prof. ing. Corrado Santoro Architettura della CPU e linguaggio assembly Corso di Abilità Informatiche Laurea in Fisica prof. ing. Corrado Santoro Schema a blocchi di una CPU Arithmetic Logic Unit Control Unit Register File BUS Control

Dettagli

INFORMATICA 1 L. Mezzalira

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

Dettagli

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

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

Dettagli

Arduino: Programmazione

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

Dettagli

Informazione analogica e digitale

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

Dettagli

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4

ARCHITETTURE MICROPROGRAMMATE. 1. Necessità di un architettura microprogrammata 1. Cos è un architettura microprogrammata? 4 ARCHITETTURE MICROPROGRAMMATE. 1 Necessità di un architettura microprogrammata 1 Cos è un architettura microprogrammata? 4 Struttura di una microistruzione. 5 Esempi di microprogrammi 9 Esempio 1 9 Esempio

Dettagli

Lezione 8. La macchina universale

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

Dettagli

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

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

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

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

Dettagli

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

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

Dettagli

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

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

Dettagli

Gestione dei File in C

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

Dettagli

Sistemi Operativi. 5 Gestione della memoria

Sistemi Operativi. 5 Gestione della memoria Gestione della memoria Compiti del gestore della memoria: Tenere traccia di quali parti della memoria sono libere e quali occupate. Allocare memoria ai processi che ne hanno bisogno. Deallocare la memoria

Dettagli

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

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

Dettagli

Architettura del Set di Istruzioni (ISA)

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

Dettagli

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense

Linguaggio del calcolatore. Algebra di Boole AND, OR, NOT. Notazione. And e or. Circuiti e reti combinatorie. Appendice A + dispense Linguaggio del calcolatore Circuiti e reti combinatorie ppendice + dispense Solo assenza o presenza di tensione: o Tante componenti interconnesse che si basano su e nche per esprimere concetti complessi

Dettagli

Aritmetica dei Calcolatori 2

Aritmetica dei Calcolatori 2 Laboratorio di Architettura 13 aprile 2012 1 Operazioni bit a bit 2 Rappresentazione binaria con segno 3 Esercitazione Operazioni logiche bit a bit AND OR XOR NOT IN OUT A B A AND B 0 0 0 0 1 0 1 0 0 1

Dettagli

Richiesta pagina PHP (es: index.php)

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

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Programmazione dello Z80

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

Dettagli

Architettura del calcolatore

Architettura del calcolatore Architettura del calcolatore La prima decomposizione di un calcolatore è relativa a due macro-componenti: Hardware Software Architettura del calcolatore L architettura dell hardware di un calcolatore reale

Dettagli

Corso di Sistemi di Elaborazione delle informazioni

Corso di Sistemi di Elaborazione delle informazioni Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi Francesco Fontanella Complessità del Software Software applicativo Software di sistema Sistema Operativo Hardware 2 La struttura del

Dettagli

Introduzione. Corso di Informatica Applicata. Università degli studi di Cassino

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

Dettagli

4. Operazioni aritmetiche con i numeri binari

4. Operazioni aritmetiche con i numeri binari I Numeri Binari 4. Operazioni aritmetiche con i numeri binari Contare con i numeri binari Prima di vedere quali operazioni possiamo effettuare con i numeri binari, iniziamo ad imparare a contare in binario:

Dettagli

CALCOLATORI ELETTRONICI II

CALCOLATORI ELETTRONICI II CALCOLATORI ELETTRONICI II ARCHITETTURA DEL PROCESSORE 886 PARTE (II) Argomenti della lezione Architettura del processore 886 parte (II) Stack Stack I/O Lo stack Lo stack L'886 prevede alcune strutture

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

ARCHITETTURA DEI CALCOLATORI VOLUME I

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

Dettagli

Protezione. Protezione. Protezione. Obiettivi della protezione

Protezione. Protezione. Protezione. Obiettivi della protezione Protezione Protezione La protezione riguarda i meccanismi per il controllo dell accesso alle risorse in un sistema di calcolo da parte degli utenti e dei processi. Meccanismi di imposizione fissati in

Dettagli

Linguaggio C. Fondamenti. Struttura di un programma.

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

Dettagli

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software di sistema e software applicativo I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software soft ware soffice componente è la parte logica

Dettagli

JPD132. Microprocessore e assembly

JPD132. Microprocessore e assembly JPD132 Microprocessore e assembly Il processore JPD132 Il JPD132 è un ipotetico processore che estende le possibilità del PD32 principalmente con un linguaggio assembly comprendente nuovi metodi di indirizzamento,

Dettagli

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione Il sistema di I/O Hardware di I/O Interfacce di I/O Software di I/O Introduzione 1 Sotto-sistema di I/O Insieme di metodi per controllare i dispositivi di I/O Obiettivo: Fornire ai processi utente un interfaccia

Dettagli

Caratteri e stringhe Esercizi risolti

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

Dettagli

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

Il simulatore SPIM SPIM

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

Dettagli

Compilatore risorse display grafico LCD serie IEC-line

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

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

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

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

Dettagli

ASSEMBLER 68K parte 2

ASSEMBLER 68K parte 2 ASSEMBLER 68K parte 2 CORSO DI CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II Classi di istruzioni Un calcolatore deve avere istruzioni in grado

Dettagli

la scienza della rappresentazione e della elaborazione dell informazione

la scienza della rappresentazione e della elaborazione dell informazione Sistema binario Sommario informatica rappresentare informazioni la differenza Analogico/Digitale i sistemi di numerazione posizionali il sistema binario Informatica Definizione la scienza della rappresentazione

Dettagli

Assembler Intel 80x86: Struttura di un programma e Direttive

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

Dettagli

Rappresentazione dei numeri in un calcolatore

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

Dettagli

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno Parte II Indice Operazioni aritmetiche tra valori rappresentati in binario puro somma sottrazione Rappresentazione di numeri con segno modulo e segno complemento a 2 esercizi Operazioni aritmetiche tra

Dettagli

DMA Accesso Diretto alla Memoria

DMA Accesso Diretto alla Memoria Testo di rif.to: [Congiu] - 8.1-8.3 (pg. 241 250) 08.a DMA Accesso Diretto alla Memoria Motivazioni Organizzazione dei trasferimenti DMA Arbitraggio del bus di memoria Trasferimento di un blocco di dati

Dettagli

Alessandro Pellegrini

Alessandro Pellegrini Esercitazione sulle Rappresentazioni Numeriche Esistono 1 tipi di persone al mondo: quelli che conoscono il codice binario e quelli che non lo conoscono Alessandro Pellegrini Cosa studiare prima Conversione

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

Parte 1. Vettori di bit - AA. 2012/13 1.1

Parte 1. Vettori di bit - AA. 2012/13 1.1 1.1 Parte 1 Vettori di bit 1.2 Notazione posizionale Ogni cifra assume un significato diverso a seconda della posizione in cui si trova Rappresentazione di un numero su n cifre in base b: Posizioni a n

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

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

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

Dettagli

Powered by: Relators:

Powered by: Relators: Powered by: Hacking Group Como www.hgcomo.org Relators: Beretta Matteo, matteo@hgcomo.org Pizzagalli Diego Ulisse ulisse@hgcomo.org Atmel AVR Studio 4 integra al suo interno un ambiente di programmazione

Dettagli

GESTIONE INFORMATICA DEI DATI AZIENDALI

GESTIONE INFORMATICA DEI DATI AZIENDALI GESTIONE INFORMATICA DEI DATI AZIENDALI Alberto ZANONI Centro Vito Volterra Università Tor Vergata Via Columbia 2, 00133 Roma, Italy zanoni@volterra.uniroma2.it Rudimenti di programmazione Programming

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

AXO Architettura dei Calcolatori e Sistema Operativo. processo di assemblaggio

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

Dettagli

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12};

Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; ESERCIZI 2 LABORATORIO Problema 1 Definire all'interno del codice un vettore di interi di dimensione DIM, es. int array[] = {1, 5, 2, 4, 8, 1, 1, 9, 11, 4, 12}; Chiede all'utente un numero e, tramite ricerca

Dettagli

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza

ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza ESERCIZI DI PROBLEM SOLVING E COMPOSIZIONE DEI DIAGRAMMI DI FLUSSO per le classi terza vers.3 in lavorazione Docente SAFFI FABIO Contenuti 01.Esercizi generici sul diagramma di flusso - flow chart... 2

Dettagli

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario

Lezione 2 Principi Fondamentali di SO Interrupt e Caching. Sommario Lezione 2 Principi Fondamentali di SO Interrupt e Caching Sommario Operazioni di un SO: principi fondamentali Una visione schematica di un calcolatore Interazione tra SO, Computer e Programmi Utente 1

Dettagli

Introduzione al Linguaggio C

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

Dettagli

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

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

Dettagli

Alcune regole di base per scrivere un programma in linguaggio C

Alcune regole di base per scrivere un programma in linguaggio C Alcune regole di base per scrivere un programma in linguaggio C Un programma il linguaggio C (listato) viene scritto in formato testo ed archiviato in un file: *.c Per scrivere un listato C si utilizza

Dettagli

[http://www.di.univaq.it/muccini/labarch]

[http://www.di.univaq.it/muccini/labarch] [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 3: Introduzione a SPIM

Dettagli

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura Struttura a record 2 File ad accesso diretto Il file è organizzato in record aventi tutti la stessa struttura e quindi dimensione record 0 record 1 record 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione

Dettagli

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE

IL SISTEMA OPERATIVO IL SISTEMA OPERATIVO INTERFACCE TESTUALI INTERFACCE TESTUALI FUNZIONI DEL SISTEMA OPERATIVO INTERFACCE GRAFICHE IL SISTEMA OPERATIVO Insieme di programmi che opera al di sopra della macchina fisica, mascherandone le caratteristiche e fornendo agli utenti funzionalità di alto livello. PROGRAMMI UTENTE INTERPRETE

Dettagli