Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Problema con load address (la) (in realtà con la sw)

V
Valerio.Pescatori (1940 points)
11 25 38
in Programmazione in Assembly by (1.9k points)
recategorized by

Salve, stavo provando a realizzare il caricamento e la stampa di una matrice tramite funzioni.

Ovviamente alla funzione che permette di inserire valori nella matrice non passo " l'etichetta " matrice definita in .data, ma carico il suo indirizzo ( con load address ) in un registro $a, poi, dopo aver letto il valore, lo salvo con sw all'indirizzo in $a(offset), cioè $a+offset, il compilatore però riporta un problema, allego degli screen così che sia più chiaro.

Qui è la definizione dei dati:

Qui chiamo la funzione che legge la matrice:

Qui salvo il valore letto:

E questo è l'errore:

La linea 115 è proprio quella dello sw returned, param3(offset),  ovviamente param3 è $a3.
Non capisco quale sia il problema.. credo sia legato all'utilizzo sbagliato di load addres, ma perché? 
Alla fine è come se ' copiassi ' l'indirizzo della matrice in un registro, no?

Grazie.

521 views
closed with the note: answered

1 Answer

andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
edited by

Non avendo i numeri di linea mi è difficile capire su che riga viene segnalato l'errore, credo che il problema sia che la sintassi del sw è

  • sw $registro_destinazione, costante($registro_base)

tu hai scritto

  • sw $registro_destinazione, $registro($registro)

Infatti l'istruzione sw returned, offset(param3)

corisponde a sw $v1, $s5($a3) che usa $s5 al posto della costante

Se vuoi sommare $s5 al contenuto di $a3 devi usare una istruzione add aggiuntiva

NOTA: per evitare questi sbagli conviene sempre usare la .eqv per definire nomi di registri che contengono il $, ad esempio

  • .eqv $param1 $a1

così è facile ricordarsi che quel nome è un registro e non una etichetta