.text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal contaOccorrenzeTest li $v0,4 la $a0,prompt2 syscall jal maxOccorrenzeTest li $v0,4 la $a0,prompt3 syscall jal decrementaOccorrenzeTest li $v0,4 la $a0,prompt4 syscall jal azzeraFinoTest li $v0,4 la $a0,prompt5 syscall jal copiaOccorrenzeTest li $v0,4 la $a0,prompt6 syscall jal graficoOccorrenzeTest li $v0,4 la $a0,prompt7 syscall jal filtraOccorrenzeTest li $v0,4 la $a0,prompt8 syscall jal mostraConFiltriTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\ncontaOccorrenzeTest: " prompt2:.asciiz "\nmaxOccorrenzeTest: " prompt3:.asciiz "\ndecrementaOccorrenzeTest: " prompt4:.asciiz "\nazzeraFinoTest: " prompt5:.asciiz "\ncopiaOccorrenzeTest: " prompt6:.asciiz "\ngraficoOccorrenzeTest: " prompt7:.asciiz "\nfiltraOccorrenzeTest: " prompt8:.asciiz "\nmostraConFiltriTest: " .text # esercizio 1 # $a0 puntatore ad un array di interi 16 bit senza segno # $a1 lunghezza array 8 bit senza segno # $a2 intero 16 bit senza segno contaOccorrenze: li $v0,0 beqz $a1,end1 loop1: lhu $t0,($a0) bne $t0,$a2,skip1 addu $v0,$v0,1 skip1: addu $a0,$a0,2 subu $a1,$a1,1 bnez $a1,loop1 end1: jr $ra # esercizio 2 contaOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array1 lbu $a1,size1 lhu $a2,int1 jal contaOccorrenze move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array1: .half 2,4,4,3,2,3,4 int1: .half 4 size1: .byte 7 .text # esercizio 3 # $a0 puntatore ad un array di interi 16 bit senza segno # $a1 lunghezza array 8 bit senza segno maxOccorrenze: subu $sp,$sp,24 sw $ra,20($sp) sw $s0,16($sp) sw $s1,12($sp) sw $s2,8($sp) # max parziale sw $s3,4($sp) # puntatore intero move $s0,$a0 move $s1,$a1 li $s2,0 sll $s3,$s1,1 addu $s3,$s0,$s3 loop2: subu $s3,$s3,2 blt $s3,$s0,end2 move $a0,$s0 move $a1,$s1 lhu $a2,($s3) jal contaOccorrenze ble $v0,$s2,loop2 move $s2,$v0 j loop2 end2: move $v0,$s2 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 4 maxOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array1 lbu $a1,size1 jal maxOccorrenze move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 1 # $a0 puntatore ad un array di interi 8 bit senza segno # $a1 lunghezza array 8 bit senza segno # $a2 intero 8 bit senza segno decrementaOccorrenze: beqz $a1,end3 loop3: lbu $t0,($a0) bne $t0,$a2,skip3 subu $t0,$t0,1 sb $t0,($a0) skip3: addu $a0,$a0,1 subu $a1,$a1,1 bnez $a1,loop3 end3: jr $ra # esercizio 2 decrementaOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array4 lbu $a1,size4 lbu $a2,int4 jal decrementaOccorrenze la $t0,array4 lbu $a1,size4 beqz $a1,end4 loop4: lbu $a0,($t0) li $v0,1 syscall addu $t0,$t0,1 subu $a1,$a1,1 bnez $a1,loop4 end4: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array4: .byte 2,4,4,3,2,3,4 int4: .byte 4 size4: .byte 7 .text # esercizio 3 # $a0 puntatore ad un array di interi 8 bit senza segno # $a1 lunghezza array 8 bit senza segno # $a2 intero 8 bit senza segno azzeraFino: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) sw $s2,0($sp) move $s0,$a0 move $s1,$a1 move $s2,$a2 beqz $s2,end5 loop5: move $a0,$s0 move $a1,$s1 move $a2,$s2 jal decrementaOccorrenze subu $s2,$s2,1 bnez $s2,loop5 end5: lw $s2,0($sp) lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 azzeraFinoTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array6 lbu $a1,size6 lbu $a2,int6 jal azzeraFino la $t0,array6 lbu $a1,size6 beqz $a1,end6 loop6: lbu $a0,($t0) li $v0,1 syscall addu $t0,$t0,1 subu $a1,$a1,1 bnez $a1,loop6 end6: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array6: .byte 2,4,4,3,2,3,4 int6: .byte 3 size6: .byte 7 .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 puntatore ad un buffer # $a2 carattere copiaOccorrenze: loop7: lbu $t0,($a0) beqz $t0,end7 bne $t0,$a2,skip7 sb $a2,($a1) addu $a1,$a1,1 skip7: addu $a0,$a0,1 j loop7 end7: sb $0,($a1) jr $ra # esercizio 2 copiaOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str8 la $a1,buffer8 lbu $a2,char8 jal copiaOccorrenze la $a0,buffer8 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str8: .asciiz "trattore" char8: .byte 't' buffer8:.space 128 .text # esercizio 3 # $a0 puntatore ad una stringa testo # $a1 puntatore ad una stringa pattern graficoOccorrenze: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a1 loop9: lbu $a2,($s1) beqz $a2,end9 move $a0,$s0 la $a1,buffer8 jal copiaOccorrenze la $a0,buffer8 li $v0,4 syscall addu $s1,$s1,1 j loop9 end9: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 graficoOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str9 la $a1,pat9 jal graficoOccorrenze lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str9: .asciiz "trattore" pat9: .asciiz "tar" .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 puntatore ad un buffer # $a2 carattere filtraOccorrenze: loop10: lbu $t0,($a0) beq $t0,$a2,skip10 sb $t0,($a1) addu $a1,$a1,1 skip10: addu $a0,$a0,1 bnez $t0,loop10 end10: jr $ra # esercizio 2 filtraOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str10 la $a1,buffer10 lbu $a2,char10 jal filtraOccorrenze la $a0,buffer10 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str10: .asciiz "aratro" char10: .byte 'r' buffer10:.space 128 .text # esercizio 3 # $a0 puntatore ad una stringa testo # $a1 puntatore ad una stringa filtri mostraConFiltri: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a1 loop11: lbu $a2,($s1) beqz $a2,end11 move $a0,$s0 la $a1,buffer10 jal filtraOccorrenze la $a0,buffer10 li $v0,4 syscall addu $s1,$s1,1 j loop11 end11: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 mostraConFiltriTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str11 la $a1,fil11 jal mostraConFiltri lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str11: .asciiz "aratro" fil11: .asciiz "tar"