UNIVERSITÀ DEGLI STUDI DICAGLIARI Facoltà di Scienze Corso di Laurea in Informatica CORSO DI ARCHITETTURA DEGLI ELABORATORI Introduzione Sistemi di Numerazione Danilo Dessì danilo_dessi@unica.it
Tutor Tutor: Danilo Dessì Email: danilo_dessi@unica.it Skype: danilo_dessi Homepage: http://people.unica.it/danilodessi/ Ufficio: di fianco al Lab T (fronte Simaz) Intro
Obiettivi Obiettivi delle esercitazioni: Approfondire alcuni argomenti delle lezioni Saper programmare il processore didattico MIC1 linguaggio IJVM Saper programmare il processore 8088 assembly 8088 Prerequisiti: Saper programmare in un qualsiasi altro linguaggio di programmazione Materiale didattico: Le slides delle esercitazioni saranno caricate sia sulla pagina di Prof. Reforgiato sia sulla mia pagina personale. Intro
Organizzazione delle esercitazioni Orario: Mercoledì dalle 12.40 alle 13.30 Venerdì dalle 12.40 alle 13.30 Svolgimento: 15 20 minuti: esposizione argomento (architettura o istruzioni) Restante: esercizi da svolgere in aula (su carta o sul vostro pc) + soluzioni commentate IJVM nella prima parte del corso 8088 nella seconda Intro
Organizzazione delle esercitazioni (2) Perché seguire le esercitazioni: All esame vi verrà chiesto di risolvere esercizi di programmazione (sia con IJVM sia 8088) In aula vi posso aiutare subito Potete fare domande e siete invitati a farlo se non capite Nel caso di dubbi scrivetemi anche per email Se avete bisogno di ulteriori spiegazioni possiamo fissare degli appuntamenti Importante: Le esercitazioni NON sono obbligatorie Intro
Sistema di numerazione Un sistema di numerazione è composto da: Un insieme di cifre Un codice formato da un insieme di regole che permette di interpretare un gruppo di cifre Operazioni che permettono di ottenere nuovi codici partendo da altri codici Nei sistemi di numerazione che utilizzeremmo le cifre sono ordinate e assumono un valore posizionale Il sistema di numerazione più utilizzato nella vita di tutti i giorni è quello in base 10. In informatica si utilizzano quelli in base 2 (binario), 8 (ottale) e 16 (esadecimale) Posizione delle centinaia Posizione delle decine Posizione delle unità 1 5 7, 2 8 Posizione dei decimi Posizione dei centesimi
Sistema Binario. Conversione Decimale - Binario Il sistema binario è cosi caratterizzato: Insieme delle cifre = { 0, 1 } È un sistema posizionale Per convertire un numero da decimale a binario: 1. Il numero viene diviso per 2 e si calcolano il quoziente e il resto 1. Il resto può essere solo 0 o 1; le cifre del resto formano il numero binario 2. Il procedimento è ripetuto con i quozienti fino a quando non si arriva al valore 0 Il numero binario è dato dai resti «letti al contrario» Quozienti 17 1 8 0 4 0 2 0 1 1 0 Resti ( 17 )10 = (10001)2
Sistema Binario. Conversione Decimale - Binario Ogni posizione rappresenta 2 n In posizione 0 avrò 2 0 In posizione 1 avrò 2 1 Per convertire un numero da binario a decimale si moltiplica ogni cifra per il corrispondente 2 n e si fa la somma dei valori 1 0 0 0 1 2 4 2 3 2 2 2 1 2 0 1 * 2 4 + 0 * 2 3 + 0 * 2 2 + 0 * 2 1 + 1 * 2 0 = 16 + 1 = 17 (10001) 2 = (17) 10
Sistema Ottale Nel sistema ottale le cifre utilizzate sono = {0, 1, 2, 3, 4, 5, 6, 7} Per convertire un numero da decimale a ottale si procede come abbiamo fatto prima per il codice binario, ma questa volta dividiamo per 8 Per la conversione ottale-decimale valgono le stesse regole: andremmo questa volta a moltiplicare per 8 n 17 1 2 2 0 (21) 8 = (17) 10 2 * 8 1 + 1 * 8 0 = 16 + 1 = 17
Sistema Esadecimale Nel sistema esadecimale le cifre utilizzate sono = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} Per convertire un numero da decimale a esadecimale si procede allo stesso modo dividendo per 16 Per la conversione esadecimale-decimale valgono le stesse regole: andremmo questa volta a moltiplicare per 16 n 34 2 2 2 0 (22) 16 = (34) 10 2 * 16 1 + 2 * 16 0 = 32 + 2 = 34
Binario-Ottale & Binario-Esadecimale È possibile convertire direttamente un numero dalla sua rappresentazione binaria a una rappresentazione in base 8 o in base 16 Per convertire da binario in base 8 raggruppo i bit a gruppi di 3 da destra a sinistra (nel caso non sia possibile formare l ultimo gruppo si aggiungono 0) e ogni gruppo si converte nella cifra ottale corrispondente: (10111010001101) 2 = (27215) 8 010 111 010 001 101 2 7 2 1 5 Per convertirlo da binario in base 16 le cifre sono prese a gruppi di 4: (10111010001101) 2 = (2E8D) 16 0010 1110 1000 1101 2 E 8 D
Ottale-Binario & Esadecimale-Binario Per convertire un numero dalla sua rappresentazione ottale a quella binaria si prende ogni cifra e la si converte nella corrispettiva binaria utilizzando 3 bit: (37541) 8 = (011111101100001) 2 3 7 5 4 1 011 111 101 100 001 Per convertire un numero dalla sua rappresentazione esadecimale a quella binaria si prende ogni cifra e la si converte nella corrispettiva binaria utilizzando 4 bit: (5FA8C) 16 = (0101111110101000110) 2 = (101111110101000110) 2 5 F A 8 C 0101 1111 1010 1000 1100
Binario: numeri negativi Esistono quattro sistemi per rappresentare un numero negativo: Modulo e segno Complemento a 1 Complemento a 2 Notazione in eccesso 2 m-1 Nella rappresentazione modulo e segno il bit più significativo è utilizzato come bit di segno: vale 0 se il numero è positivo, 1 se il numero è negativo. Esempi usando 1 byte: +10 = 0 0001010-50 = 1 0110010 +15 = 0 0001111-15 = 1 0001111
Complementi Anche nella rappresentazione in complemento a 1 il bit più significativo è il bit di segno. Vale 0 se il numero è positivo, 1 se il numero è negativo. Il negativo di un numero si ottiene invertendo tutti gli 1 con 0 e viceversa. Esempi: -10 -> 00001010 -> 11110101-50 -> 00110010 -> 11001101 +15 -> 00001111-15 -> 00001111 -> 11110000 Anche nella rappresentazione in complemento a 2 il bit più significativo è il bit di segno. Vale 0 se il numero è positivo, 1 se il numero è negativo. Il negativo di un numero si ottiene calcolando il complemento a 1 e aggiungendo 1. -10 -> 00001010 -> 11110101 -> 11110110-50 -> 00110010 -> 11001101 -> 11001110 +15 -> 00001111-15 -> 00001111 -> 11110000 ->11110001 Il complemento a 2 si può ottenere anche complementando tutti i bit dopo il primo a 1 partendo da quelli meno significativi
Notazione in eccesso Nella rappresentazione in eccesso m, utilizzando m bit, ogni numero N è memorizzato come N + 2 m-1. Per esempio usando 8 bit ogni numero dovrà essere sommato con il valore 2 7 = 128. Esempi: -10 -> 118 -> 01110110-50 -> 78 -> 01001110 +15 -> 143 -> 10001111-15 -> 113 -> 01110001
La somma in binario La somma di due addendi binari inizia dai bit meno significativi e procede sommando i bit nelle posizioni corrispondenti. In caso di riporto si aggiunge alla colonna a sinistra come nell aritmetica in base 10 Se l operazione è eseguita in complemento a 1, l eventuale riporto sui bit più significativi viene sommato al bit meno significativo Se l operazione è in complemento a 2 l eventuale riporto viene scartato 15 + (-5) = ------- + 10 Complemento a 1 00001111 + 11111010 = ----------------- 1 00001001 + 1 ----------------- 00001010 Complemento a 2 00001111 + 11111011 = ----------------- 1 00001010
Esercizi Convertire in binario 84, 77, 103, 2016 Convertire in decimale (1000101) 2, (10110110) 2 Convertire in decimale e binario (41) 8, (135) 8 Convertire in decimale e binario (3D) 16, (A5B) 16 Convertire in ottale e esadecimale (111100001000) 2, (101100111001010) 2 Rappresentare utilizzando 8 bit in modulo e segno, complemento a 1, complemento a 2 e rappresentazione in eccesso 8: 27, -27, 127, -127 Sommare utilizzando 8 bit in modulo e segno, complemento a 1 e complemento a 2: 15 + 20-15 + 20 15 20-15 -20
Soluzioni Convertire in binario 84, 77, 103, 2016 84 0 77 1 42 0 38 0 21 1 19 1 10 0 9 1 5 1 4 0 2 0 2 0 1 1 1 1 0 0 Leggere i resti dal basso all alto 103 1 51 1 25 1 12 0 6 0 3 1 1 1 0 2016 0 1008 0 504 0 252 0 126 0 63 1 31 1 15 1 7 1 3 1 1 1 0
Soluzioni Convertire in decimale (1000101) 2, (10110110) 2 (1000101) 2 = 1 * 2 6 + 0 * 2 5 + 0 * 2 4 + 0 * 2 3 + 1 * 2 2 + 0 * 2 1 + 1 * 2 0 = 64 + 4 + 1 = 69 (10110110) 2 = 1 * 2 7 + 0 * 2 6 + 1 * 2 5 + 1 * 2 4 + 0 * 2 3 + 1 * 2 2 + 1 * 2 1 + 0 * 2 0 = 128 + 32 + 16 + 4 + 2 = 182
Soluzioni Convertire in decimale e binario (41) 8, (135) 8 (41) 8 = (100 001) 2 (41) 8 = 4 * 8 1 + 1 *8 0 = 32 + 1= (33) 10 (135) 8 = (001 011 101) 2 (135) 8 = 1 * 8 2 + 3 * 8 1 + 5 *8 0 = 64 + 24 + 5 = (93) 10 Convertire in decimale e binario (3D) 16, (A5B) 16 (3D) 16 = (0011 1101) 2 (3D) 16 = 3 * 16 1 + 13 * 16 0 = 48 + 13= (61) 10 (A5B) 16 = (1010 0101 1011) 2 (A5B) 16 = 10 * 16 2 + 5 * 16 1 + 11 * 16 0 = 2560 + 80 + 11 = (2651) 10
Soluzioni Convertire in ottale e esadecimale (111100001000) 2, (101100111001010) 2 (111100001000) 2 = 111 100 001 000 = (7410) 8 (111100001000) 2 = 1111 0000 1000 = (F08) 16 (101100111001010) 2 = 101 100 111 001 010 = (54712) 8 (101100111001010) 2 = 0101 1001 1100 1010 = (59CA) 16
Soluzioni Rappresentare utilizzando 8 bit in modulo e segno, complemento a 1, complemento a 2 e rappresentazione in eccesso 8: 27, -27, 127, -127 N binario Modulo e segno Compl 1 Compl 2 Eccesso 8 27 00011011 0 0011011 0 0011011 0 0011011 10011011-27 1 0011011 1 1100100 1 1100101 01100101 127 01111111 0 1111111 0 1111111 0 1111111 11111111-127 1 1111111 1 0000000 1 0000001 00000001
Soluzioni 15 + 20 = ---- 35 Tutti e tre i casi 0 0001111 + 0 0010100 = -------------- 0 0100011-15 + 20 = ---- 5 Modulo e segno 0 0010100-1 0001111 = -------------- 0 0000101 Complemento a 1 1 1110000 + 0 0010100 = -------------- 1 0 0000100 + 1 --------------------- 0 0000101 Complemento a 1 1 1110001 + 0 0010100 = -------------- 1 0 0000101