IIC2343 / Syllabus-2024-1

22 stars 0 forks source link

Error con LW/SW #47

Closed nicolaspoli closed 1 month ago

nicolaspoli commented 1 month ago

Hola!

Constantemente estoy teniendo el error "Runtime exception at 0x004005d0: Load address not aligned to word boundary 0xfffffffd" con el uso de lw, y el equivalente en sw. Por que podría ser? He buscado info pero las respuestas que encuentro no veo que se puedan aplicar a este caso

Gracias de antemano

Geeermy commented 1 month ago

¡Hola!

Algunas de las funciones externas (por ejemplo, las que imprimen texto), hacen uso de los registros caller-saved a0 y a1. Dado que son los que poseen los punteros a tus Pokémon, si no cuidas respaldar su valor antes y recuperarlo posterior al llamado, podrías terminar haciendo operaciones de lectura con un valor que tiene una dirección no habilitada.

En resumen: respalda a0 y a1 antes de cada llamado de subrutina. Luego, recupéralos y vuelve a hacer las lecturas y escrituras. Ahí debería funcionar.

¡Saludos!

nicolaspoli commented 1 month ago

Hola, gracias por responder!

Si los respaldo :c por ejemplo si hago el respaldo

[censurado]

y luego de la llamada intento hacer

[censurado]

la linea "lw t5, 0(a0)" da el error que comento arriba

Geeermy commented 1 month ago

Si te fijas bien en lo que compartiste, primero usas a0 como dirección y luego lo recuperas. Debe ser al revés:

lw a0, 4(sp) lw t5, 0(a0)

Ahí sí estás usando el valor original de a0 como dirección.

Avísame si con eso se arregla.

nicolaspoli commented 1 month ago

pero eso no haría que perdiera el valor de a0 que se guarda de la subrutina primero? (esto es attack)

sufigueroa commented 1 month ago

Hola! En general todas las subrutinas que deben llamar cambian varios registros, entre ellos el registro a0 y a1. Si luego de una subrutina quieres usar estos registros dado que contenían un valor relevante para tu subrutina, debes respaldarlos antes en el stack y luego, al terminar la subrutina que fue llamada, puedes recuperarlos (buscandolos en el stack). Y porfavor no incluir código en las issues :)

nicolaspoli commented 1 month ago

nunca le respondí al final ups, ahora que por fin terminé, les doy las gracias por la ayuda :)