.text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal removeFirstTest li $v0,4 la $a0,prompt2 syscall jal removeWhile1Test li $v0,4 la $a0,prompt3 syscall jal zeroDupTest li $v0,4 la $a0,prompt4 syscall jal bag2setTest li $v0,4 la $a0,prompt5 syscall jal findSharpTest li $v0,4 la $a0,prompt6 syscall jal fillFormTest li $v0,4 la $a0,prompt7 syscall jal contaInScalaTest li $v0,4 la $a0,prompt8 syscall jal arrayScaleTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\nremoveFirstTest: " prompt2:.asciiz "\nremoveWhile1Test: " prompt3:.asciiz "\nzeroDupTest: " prompt4:.asciiz "\nbag2setTest: " prompt5:.asciiz "\nfindSharpTest: " prompt6:.asciiz "\nfillFormTest: " prompt7:.asciiz "\ncontaInScalaTest: " prompt8:.asciiz "\narrayScaleTest: " .text # esercizio 1 # $a0 puntatore a stringa # $a1 carattere c removeFirst: li $v0,0 loop1: lbu $t0,($a0) beqz,$t0,end1 addu $a0,$a0,1 bne $t0,$a1,loop1 li $v0,1 loop2: lbu $t1,($a0) sb $t1,-1($a0) addu $a0,$a0,1 bnez $t1,loop2 end1: jr $ra # esercizio 2 removeFirstTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str lbu $a1,char jal removeFirst la $a0,str li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 # $a0 puntatore a stringa # $a1 puntatore a stringa removeWhile1: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a1 loop3: move $a0,$s0 lbu $a1,($s1) beqz $a1,end3 jal removeFirst addu $s1,$s1,1 beq $v0,1,loop3 end3: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 removeWhile1Test: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str1 la $a1,str2 jal removeWhile1 la $a0,str1 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str: .asciiz "barba" char: .byte 'a' str1: .asciiz "carnevale" str2: .asciiz "aeiae" .text # esercizio 1 # $a0 puntatore array 10 interi 32bit # $a1 intero i a 32bit zeroDup: li $t0,10 loop4: lw $t1,($a0) subu $t0,$t0,1 beqz $t0,end4 addu $a0,$a0,4 bne $t1,$a1,loop4 end4: lw $t1,($a0) bne $t1,$a1,skip4 sw $0,($a0) skip4: addu $a0,$a0,4 subu $t0,$t0,1 bnez $t0,end4 jr $ra # esercizio 2 zeroDupTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array4 lbu $a1,int4 jal zeroDup la $t0,array4 addu $t1,$t0,40 li $v0,1 loop5: lw $a0,($t0) syscall addu $t0,$t0,4 bne $t0,$t1,loop5 lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 # $a0 puntatore array 10 interi 32bit # $a1 puntatore array 10 interi 32bit bag2set: 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 addu $s2,$s1,40 loop6: move $a0,$s0 lw $a1,($s1) jal zeroDup addu $s1,$s1,4 bne $s1,$s2,loop6 lw $s2,0($sp) lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 bag2setTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array4 la $a1,array5 jal bag2set la $t0,array4 addu $t1,$t0,40 li $v0,1 loop7: lw $a0,($t0) syscall addu $t0,$t0,4 bne $t0,$t1,loop7 lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data int4: .word 4 array4: .word 1,2,3,4,5,6,4,4,3,2 array5: .word 3,1,4,5,0,0,0,0,0,0 .text # esercizio 1 # $a0 puntatore a stringa # $a1 puntatore a funzione findSharp: move $v0,$a0 loop8: lbu $t0,($v0) beq $t0,'#',end8 addu $v0,$v0,1 bnez $t0,loop8 jr $a1 end8: jr $ra # esercizio 2 findSharpTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str9 la $a1,fail9 jal findSharp move $a0,$v0 j skip9 fail9: la $a0,err9 skip9: li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 # $a0 puntatore a stringa # $a1 puntatore a stringa fillForm: subu $sp,$sp,8 sw $ra,4($sp) sw $s0,0($sp) move $s0,$a1 loop10: la $a1,end10 jal findSharp lbu $t0,($s0) sb $t0,($v0) addu $s0,$s0,1 addu $a0,$v0,1 j loop10 end10: lw $s0,0($sp) lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 fillFormTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str9 la $a1,str10 jal fillForm la $a0,str9 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str9: .asciiz "a##o#a" err9: .asciiz "assente" str10: .asciiz "ncr" .text # esercizio 1 # $a0 puntatore array di interi 16bit senza segno contaInScala: lhu $t0,($a0) beqz $t0,end11 move $v0,$t0 loop11: addu $t0,$t0,1 addu $a0,$a0,2 lhu $t1,($a0) beq $t0,$t1,loop11 subu $v0,$t0,$v0 jr $ra end11: li $v0,0 jr $ra # esercizio 2 contaInScalaTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array12 jal contaInScala move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 # $a0 puntatore array di interi 16bit senza segno # $a1 puntatore array buffer arrayScale: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a1 loop12: move $a0,$s0 jal contaInScala sb $v0,($s1) sll $v0,$v0,1 addu $s0,$s0,$v0 addu $s1,$s1,1 bnez $v0,loop12 end12: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 arrayScaleTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array13 la $a1,buffer13 jal arrayScale la $t0,buffer13 loop13: lbu $a0,($t0) beqz $a0,end13 li $v0,1 syscall addu $t0,$t0,1 j loop13 end13: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array12:.half 3,4,5,6,4,4,3,2,0 array13:.half 2,4,5,6,4,4,2,3,0 buffer13:.space 16