Esercizi (virgola fissa, virgola mobile IEEE 754, Assembly MIPS) Francesca Voltolini e Luca Abeni Virgola fissa Convertire in binario i seguenti numeri utilizzando la notazione in virgola fissa: ● ● ● 23.625 → 10111.101 15.375 → 01111.011 121.125 → 1111001.001 Convertire in decimale i seguenti numeri in virgola fissa: ● 1010.101 → 10.625 ● 101.110 → 5.75 ● 11001.001 → 25.25 Virgola mobile IEEE 754 Esprimere i seguenti numeri decimali in codifica binaria secondo lo standard IEEE 754: ● -4.5 ● 0.5 ● -30.375 Standard IEEE 754: ● 1 bit di segno ● 8 bit per l'esponente (rappresentato in complemento a 2 eccesso 127) ● 23 bit per la mantissa Virgola mobile IEEE 754 - soluzione -4.5 ➢ Segno: 1 ➢ Mantissa: ➢ ➢ 4.510 = 100.12 ➢ Normalizzazione: 100.12 → 1.0012 * 22 Esponente ➢ ➢ (2+127)10 = 100000012 IEEE 754: 1 10000001 00100000000000000000000 Virgola mobile IEEE 754 - soluzione 0.5 ➢ Segno: 0 ➢ Mantissa: ➢ ➢ 0.510 = 0.12 ➢ Normalizzazione: 0.12 → 1.02 * 2-1 Esponente ➢ ➢ (-1+127)10 = 011111102 IEEE 754: 0 01111110 00000000000000000000000 Virgola mobile IEEE 754 - soluzione -30.375 ➢ Segno: 1 ➢ Mantissa: ➢ ➢ -30.37510 = 11110.0112 ➢ Normalizzazione: 11110.0112 → 1.11100112 * 24 Esponente ➢ ➢ (4+127)10 = 100000112 IEEE 754: 1 10000011 11100110000000000000000 Assembly MIPS Tradurre la seguente funzione C in Assembly MIPS. NB: la funzione calcola la potenza di 2 in modo ricorsivo int PotenzaDiDue(int n) { if(n<1) return 1; else return (2*PotenzaDiDue(n-1)); } Soluzione: potenza2-rec.s Assembly MIPS Tradurre la seguente funzione C in Assembly MIPS int PotenzaDiDue(int n) { NB: la funzione calcola la potenza di if(n==0) 2 in modo iterativo return 1; else { int ret = 1; Soluzione: potenza2-iter.s for (int i=0; i<n; i++) ret=ret*2; return ret; } } Assembly MIPS Tradurre la seguente funzione C in Assembly MIPS int MioFib(int n) { if(n<2) return (1); else return (3*MioFib(n-1)-MioFib(n-2)); } Soluzione: fibo.s