.text .globl main # esercizio 1 # $a0 puntatore ad una stringa # $a1 carattere contaOccorrenze: li $v0,0 loop: lbu $t0,($a0) beqz $t0,end addu $a0,$a0,1 bne $t0,$a1,loop addu $v0,$v0,1 j loop end: jr $ra # esercizio 2 # $a0 puntatore ad una stringa # $s0 puntatore alla posizione della stringa da esaminare # $s1 carattere da contare # $s2 max numero di occorrenze trovato (inizializzato a 0) # $s3 carattere che occorre $s2 volte (inizializzato a 0) maxOccorrenza: subu $sp,$sp,24 sw $ra,20($sp) sw $s0,16($sp) sw $s1,12($sp) sw $s2,8($sp) sw $s3,4($sp) move $s0,$a0 li $s2,0 li $s3,0 loop2: lbu $s1,($s0) beqz $s1,end2 move $a0,$s0 move $a1,$s1 addu $s0,$s0,1 jal contaOccorrenze ble $v0,$s2,loop2 move $s2,$v0 move $s3,$s1 j loop end2: move $v0,$s3 lw $s3,4($sp) lw $s2,8($sp) lw $s1,12($sp) lw $s0,16($sp) lw $ra,20($sp) addu $sp,$sp,24 jr $ra # esercizio 3 # $a0 puntatore ad una stringa # $a1 puntatore array di interi 8 bit senza segno # $a2 puntatore ad un buffer # $t0 carattere letto # $t1 numero di volte da copiare il carattere nel buffer costruisciStringa: loop3: lbu $t0,($a0) beqz $t0,end3 lbu $t1,($a1) addu $a0,$a0,1 addu $a1,$a1,1 beqz $t1,loop3 loop4: sb $t0,($a2) addu $a2,$a2,1 subu $t1,$t1,1 bgtz $t1,loop4 j loop3 end3: sb $0,($a2) 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,str1 jal maxOccorrenza sb $v0,buffer sb $0,buffer+1 la $a0,buffer li $v0,4 syscall la $a0,str2 la $a1,volte la $a2,buffer jal costruisciStringa la $a0,buffer li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str1: .asciiz "occorrenze" str2: .asciiz "smac" volte: .byte 1,2,4,1 buffer: .space 128