Problema 4 - MIPS: programació en assemblador, ru… · Estructura i tecnologia de computadors II UDG Juny
Tema: MIPS: programació en assemblador, rutines i pila · Del examen Juny
Enunciado
Problema 4.- Comptador d'arbres en MIPS
Es vol desenvolupar una aplicació per a l'emulador SPIM de MIPS per comptabilitzar el nombre de píxels que corresponen a vegetació/arbres en una imatge de satèl·lit.
Es disposa prèviament d'una subrutina auxiliar amb la capçalera següent:
# bool segmentaPixel (pixel: int)
# Adreça de la rutina: segmentaPixel
# Paràmetres: $a0: valor del píxel que volem segmentar (paraula de 32 bits)
# Retorn: $v0: 1 si és arbre, 0 si no és arbre.
b)
Desenvolupeu el programa principal (funció main) en assemblador MIPS que recorri tota la imatge, invoqui la subrutina segmentaPixel per a cada píxel, comptabilitzi quants en són arbres i imprimeixi per consola el missatge acompanyat del valor total. Respecteu escrupolosament el conveni de registres MIPS (preservació de registres callee-save a la pila).

Solución
Según los criterios oficiales de corrección
b. Desenvolupeu el programa principal (funció main ) en assemblador MIPS que recorri tota la imatge
Solución: ```python .globl main main: # Reserva d'espai a la pila per preservar registres (20 bytes) subu sp, 20 sw sp) # Adreça de retorn sw sp) # $s0: nombre total de píxels sw sp) # $s1: índex / comptador de bucle (i) sw sp) # $s2: acumulador de píxels d'arbre sw sp) # $s3: adreça base de la imatge la $s3, Image # Carrega l'adreça de la imatge lhu \t0, Width # \t0 = 192 lhu \t1, Height # \t1 = 144 mul t0, \t1 # \s0 = total_pixels = 192 * 144 li $s1, 0 # i = 0 li $s2, 0 # num_arbres = 0 for: beq s0, fi # Si i == total_pixels, sortir del bucle sll s1, 2 # Desplaçament en bytes: offset = i * 4 add s3, $t0 # Adreça del píxel actual: &Image[i] lw t0) # Carrega el píxel a $a0 com a argument jal segmentaPixel # Crida a la rutina de segmentació add s2, $v0 # num_arbres += resultat (v0) addi s1, 1 # i++ j for fi: # Impressió del text de resultat li $v0, 4 # Syscall print_string la $a0, Resultat syscall # Impressió del valor enter acumulat li $v0, 1 # Syscall print_int move s2 syscall # Restauració dels registres des de la pila lw sp) lw sp) lw sp) lw sp) lw sp) addu sp, 20 jr $ra # Retorn al sistema operatiu ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Pregunta 21 · Exemples · Pregunta 21 · Juny ›