.text .globl main # esercizio 1 # $a0 puntatore array di interi a 16 bit con segno # $a1 intero a 16 bit con segno sommaMinori: li $v0,0 loop: lh $t0,($a0) beqz $t0,end addu $a0,$a0,2 bge $t0,$a1,loop add $v0,$v0,$t0 j loop end: jr $ra # esercizio 2 # $a0 puntatore array di interi a 16 bit con segno # $a1 intero a 16 bit con segno mostraSommaMinori: subu $sp,$sp,8 sw $ra,4($sp) move $t0,$a0 move $t1,$a0 loop2: lh $a0,($t0) beqz $a0,end2 li $v0,1 syscall addu $t0,$t0,2 j loop2 end2: move $a0,$t1 jal sommaMinori move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 # la mostraSommaMinori chiama la funzione sommaMinori # pertanto deve salvare sullo stack l'indirizzo di ritorno # per il resto usa solo registri temporanei e quelli per i parametri # quindi basta uno stack di 8 byte. # esercizio 4 # $a0 puntatore stringa # $a1 puntatore array di interi 16 bit senza segno # $a2 puntatore buffer trasformaStringa: loop3: lbu $t0,($a0) beqz $t0,end3 lhu $t1,($a1) addu $t1,$a2,$t1 sb $t0,($t1) addu $a0,$a0,1 addu $a1,$a1,2 j loop3 end3: jr $ra # main e dati di prova non richiesti nel compito # forniti solo per testare le soluzioni main: subu $sp,$sp,8 sw $ra,4($sp) la $a0,valori li $a1,200 jal mostraSommaMinori la $a0,str la $a1,pos la $a2,res jal trasformaStringa la $a0,res li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data valori: .half 168,231,11,9,2393,-8,0 str: .asciiz "ioca" pos: .half 1,3,0,2 res: .space 4 .byte 0