---+++ Homework 1: conversione da numeri romani a interi Scrivete il programma ASM MIPS che: * legge una stringa lunga al massimo 30 caratteri (da console con la syscall 8) * calcola il corrispondente numero intero * stampa il valore calcolato * termina l'esecuzione __ATTENZIONE: NON STAMPATE ALCUN MESSAGGIO O ALTRO TESTO A PARTE IL VALORE CALCOLATO__ Vi ricordo che i [[https://it.wikipedia.org/wiki/Sistema_di_numerazione_romano][numeri romani]] sono composti dalle lettere *maiuscole* | *lettera* | *valore* | | I | 1 | | V | 5 | | X | 10 | | L | 50 | | C | 100 | | D | 500 | | M | 1000 | Le lettere *I, X, C, M* possono ripetersi consecutivamente fino a 3 volte, mentre *V, L, D* solo una volta, i valori si sommano tranne quando un valore più piccolo (solo se *I, X, C*) precede uno maggiore, in tal caso il valore più piccolo si sottrae, per cui per realizzare i numeri 4, 9, 40, 49, 90, 99 eccetera si usano le combinazioni: | *lettera* | *valore* | | IV | 4 | | IX | 9 | | XL | 40 | | XLIV | 44 | | XLIX | 49 | | XC | 90 | | XCIV | 94 | | XCIX | 99 | Eccetera Ovvero nella conversione da romano a intero il valore corrispondente ad un carattere: * ha peso positivo (va sommato) se è seguito da caratteri di peso minore o uguale o è finita la stringa * ha peso negativo (va sottratto) se è seguito da un carattere di peso maggiore __NOTE:__ * i codici ascii dei caratteri li potete trovare facilmente (http://www.asciitable.com/) * per leggere un testo si usa la syscall 8, che vuole come argomenti: * *$a0* l'indirizzo di un blocco di memoria in cui copiare i caratteri inseriti in tastiera * *$a1* la dimensione in bytes del blocco * la stringa letta finisce con un byte che ha valore 0 (zero) oppure '\n' (newline = 10) ---++++ Esempi | *Input* | *Output* | *Calcolo* | | CDXCIX | 499 | -100 +500 -10 +100 -1 +10 | | CM | 900 | -100 +1000 | | CMXCIX | 999 | -100 +1000 -10 +100 -1 +10 | | MMMCMXCIX | 3999 | +1000 +1000 +1000 -100 +1000 -10 +100 -1 +10 | | MMMDCCCLXXXVIII | 3888 | +1000 +1000 +1000 +500 +100 +100 +100 +50 +10 +10 +10 +5 +1 +1 +1 | __ASSUMETE CHE I VALORI USATI PER I TEST SARANNO SEMPRE CORRETTI__ (non c'è bisogno di controllare la validità dell'input) ---++++ Consegna del programma Per consegnare il programma: * dovete essere [[TWiki.TWikiRegistration][iscritti a twiki]] * usare la [[/~andrea/consegna-HW-2016.html][pagina di consegna]] oppure se non funziona mandatemeli per email * Non copiate o il compito verrà annullato ad entrambi * Scadenza della consegna: *mercoledì 16 marzo ore 24* Trovate una serie di esempi di input ed i risultati dei test eseguiti finora sulla [[%ATTACHURL%][pagina dei test]] -- Users.AndreaSterbini - 05 Mar 2016 <!-- * Set ALLOWTOPICCHANGE = Users.AndreaSterbini -->
This topic: Architetture2/MZ/AA15_16
>
HomeWork1
Topic revision: r6 - 2016-03-16 - AndreaSterbini
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback