---+++ Homework 2 Realizzate il programma assembly MIPS che: 1 legge una matrice di Cx<nop>R elementi interi (word) e la mette in memoria 1 parte dalla casella a coordinate 0,0 1 legge una successione di "mosse" che indicano ciascuna di quante colonne e quante righe ci si deve spostare rispetto alla casella corrente 1 somma UNA SOLA VOLTA tutte le caselle toccate dalle mosse (anche se si dovesse passare più volte sulla stessa casella) * NOTA: la casella a coordinate 0, 0 va sommata solo se il percorso ci passa sopra 1 termina la successione di mosse quando legge la coppia di spostamenti 0, 0 1 stampa il risultato NOTA: nel calcolare la prossima casella di una mossa si deve considerare la matrice come toroidale, ovvero: * se si supera l'ultima colonna/riga si continua con la prima colonna/riga * viceversa se si torna indietro prima della prima riga/colonna, si continua con l'ultima riga/colonna * suggerimento: usate la funzione modulo ---++++ Input del programma Il programma riceve in input: * *C:* numero di colonne della matrice, numero intero compreso tra 1 e 100 inclusi * *R:* numero di righe della matrice, numero intero compreso tra 1 e 100 inclusi * Rx<nop>C interi in ordine di riga e colonna * prima la prima riga di C elementi (dalla colonna 0 alla colonna C-1) * poi la seconda riga di C elementi * ... * infine l'ultima riga di C elementi * una successione, di lunghezza non conosciuta a priori, di coppie di interi relativi terminata dalla coppia 0 0 * *DC:* variazione dell'indice di colonna * *DR:* variazione dell'indice di riga ---++++ Output del programma * la somma di tutti gli elementi toccati dal cammino descritto dagli spostamenti, presi una sola volta *NOTA:* non scrivete altro (prompt o messaggi) ---+++ Esempio Se la matrice 7x5 fosse | 00 | 01 | 02 | 03 | 04 | 05 | 06 | | 10 | 11 | 12 | 13 | 14 | 15 | 16 | | 20 | 21 | 22 | 23 | 24 | 25 | 26 | | 30 | 31 | 32 | 33 | 34 | 35 | 36 | | 40 | 41 | 42 | 43 | 44 | 45 | 46 | E la sequenza di mosse fosse: * +2, +5 * -5, +3 * +11, -6 * -2, +2 * +8, -9 * +1, +2 * 0, 0 Le caselle toccate sarebbero, nell'ordine, alle coordinate (colonna, riga) * 2, 0 * 4, 3 * 1, 2 * 6, 4 * 0, 0 * 1, 2 Ovvero le caselle evidenziate | *00* | 01 | *02* | 03 | 04 | 05 | 06 | | 10 | 11 | 12 | 13 | 14 | 15 | 16 | | 20 | *21* | 22 | 23 | 24 | 25 | 26 | | 30 | 31 | 32 | 33 | *34* | 35 | 36 | | 40 | 41 | 42 | 43 | 44 | 45 | *46* | Quindi la somma da stampare è 00 + 02 + 21 + 34 + 46 = *103* Notate che la casella a coordinate 1,2 è stata toccata più volte ma va sommata solo una volta ---+++ Input per l'esempio di cui sopra <verbatim> 7 5 0 1 2 3 4 5 6 10 11 12 13 14 15 16 20 21 22 23 24 25 26 30 31 32 33 34 35 36 40 41 42 43 44 45 46 +2 +5 -5 +3 +11 -6 -2 +2 +8 -9 +1 +2 0 0 </verbatim> ---++++ Output atteso <verbatim> 103 </verbatim> ---+++ Esempio di input-output in forma di file * per testare il programma potete usare la riga di comando * __java -jar Mars4_5.jar me nc sm file.asm < 1.in__ * tutti i file di test sono disponibili in cima a [[%ATTACHURL%/]] ---+++ Consegna Consegnate l'esercizio entro il 10 aprile alle ore 24 sulla [[/~andrea/consegna-HW-2015.html][pagina di consegna]] ---+++ Risultati (definitivi) Trovate i risultati dei test su [[%ATTACHURL%/]] -- Users.AndreaSterbini - 26 Mar 2015 <!-- * Set ALLOWTOPICCHANGE = Users.AndreaSterbini -->
This topic: Architetture2/MZ/AA14_15
>
HomeWork2
Topic revision: r7 - 2015-04-11 - 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