.text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal removeDupTest li $v0,4 la $a0,prompt2 syscall jal bag2SetTest li $v0,4 la $a0,prompt3 syscall jal lastIndexOfTest li $v0,4 la $a0,prompt4 syscall jal setAddTest li $v0,4 la $a0,prompt5 syscall jal axnTest li $v0,4 la $a0,prompt6 syscall jal polyEvalTest li $v0,4 la $a0,prompt7 syscall jal matchingParenTest li $v0,4 la $a0,prompt8 syscall jal toSquareTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\nremoveDupTest: " prompt2:.asciiz "\nbag2SetTest: " prompt3:.asciiz "\nlastIndexOfTest: " prompt4:.asciiz "\nsetAddTest: " prompt5:.asciiz "\naxnTest: " prompt6:.asciiz "\npolyEvalTest: " prompt7:.asciiz "\nmatchingParenTest: " prompt8:.asciiz "\ntoSquareTest: " .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 carattere c removeDup: loop1: lbu $t0,($a0) addu $a0,$a0,1 beqz $t0,end1 bne $t0,$a1,loop1 move $a2,$a0 loop2: lbu $t0,($a0) beq $t0,$a1,skip1 sb $t0,($a2) addu $a2,$a2,1 skip1: addu $a0,$a0,1 bnez $t0,loop2 end1: jr $ra # esercizio 2 removeDupTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str1 lbu $a1,ch1 jal removeDup la $a0,str1 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str1: .asciiz "barabba" ch1: .ascii "a" .text # esercizio 3 # $a0 puntatore ad una stringa bag2Set:subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a0 loop3: lbu $a1,($s0) beqz $a1,end3 jal removeDup addu $s0,$s0,1 move $a0,$s0 j loop3 end3: move $v0,$s1 sw $s1,4($sp) sw $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,str2 jal bag2Set move $a0,$v0 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str2: .asciiz "scintille" .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 carattere c lastIndexOf: li $v0,-1 move $a2,$a0 loop4: lbu $t0,($a0) bne $t0,$a1,skip4 subu $v0,$a0,$a2 skip4: addu $a0,$a0,1 bnez $t0,loop4 jr $ra # esercizio 2 lastIndexOfTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str3 lbu $a1,ch3 jal lastIndexOf move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str3: .asciiz "caramello" ch3: .ascii "a" .text # esercizio 3 # $a0 puntatore ad un buffer stringa # $a1 stringa setAdd: 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 subu $s2,$a0,1 loop5: addu $s2,$s2,1 lbu $t0,($s2) bnez $t0,loop5 loop6: move $a0,$s0 lbu $a1,($s1) beqz $a1,end5 addu $s1,$s1,1 jal lastIndexOf bne $v0,-1,loop6 lbu $t0,-1($s1) sb $t0,($s2) addu $s2,$s2,1 sb $0,($s2) j loop6 end5: sw $s2,0($sp) sw $s1,4($sp) sw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 setAddTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,strbuf4 la $a1,str4 jal setAdd la $a0,strbuf4 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data strbuf4:.asciiz "caramello" .space 16 str4: .asciiz "dolcetto" .text # esercizio 1 # $a0 intero a 8 bit senza segno # $a1 intero a 8 bit senza segno # $a2 intero a 8 bit senza segno axn: move $v0,$a0 beqz $a2,end6 loop7: mul $v0,$v0,$a1 subu $a2,$a2,1 bnez $a2,loop7 end6: jr $ra # esercizio 2 axnTest: subu $sp,$sp,8 sw $ra,4($sp) lbu $a0,int1 lbu $a1,int1+1 lbu $a2,int1+2 jal axn move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data int1: .byte 3,5,2 .text # esercizio 3 # $a0 array di 4 interi a 8 bit senza segno # $a1 intero a 8 bit senza segno polyEval: 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 move $s1,$a1 li $s2,0 #indice li $s3,0 #somma parziale loop8: lbu $a0,($s0) move $a1,$s1 move $a2,$s2 jal axn addu $s3,$s3,$v0 addu $s0,$s0,1 addu $s2,$s2,1 blt $s2,4,loop8 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 4 polyEvalTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array lbu $a1,int2 jal polyEval move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array: .byte 4,3,2,1 int2: .byte 2 .text # esercizio 1 # $a0 puntatore ad una stringa matchingParen: move $a1,$a0 li $t0,0 # parentesi aperte loop9: addu $t0,$t0,1 loop9a: addu $a0,$a0,1 lbu $t1,($a0) beq $t1,'(',loop9 subu $t0,$t0,1 bnez $t0,loop9a subu $v0,$a0,$a1 jr $ra # esercizio 2 matchingParenTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str5 jal matchingParen move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str5: .asciiz "(()(())())(())" .text # esercizio 3 # $a0 puntatore ad una stringa toSquare: subu $sp,$sp,8 sw $ra,4($sp) sw $s0,0($sp) loop10: move $s0,$a0 jal matchingParen li $t0,'[' sb $t0,0($s0) addu $s0,$s0,$v0 li $t0,']' sb $t0,0($s0) addu $a0,$s0,1 lbu $t0,($a0) bnez $t0,loop10 lw $s0,0($sp) lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 toSquareTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str6 jal toSquare la $a0,str6 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str6: .asciiz "(()(())())(())"