.text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal sommaOccorrenzeTest li $v0,4 la $a0,prompt2 syscall jal maxSommaTest li $v0,4 la $a0,prompt3 syscall jal sostituisciOccorrenzeTest li $v0,4 la $a0,prompt4 syscall jal mostraSostituzioniTest li $v0,4 la $a0,prompt5 syscall jal orderedPrefixTest li $v0,4 la $a0,prompt6 syscall jal isOrderedTest li $v0,4 la $a0,prompt7 syscall jal checkLimitTest li $v0,4 la $a0,prompt8 syscall jal checkRangeTest li $v0,4 la $a0,prompt9 syscall jal replaceTest li $v0,4 la $a0,prompt10 syscall jal wordsTest li $v0,4 la $a0,prompt11 syscall jal mergeTest li $v0,4 la $a0,prompt12 syscall jal isBeforeTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\nsommaOccorrenzeTest: " prompt2:.asciiz "\nmaxSommaTest: " prompt3:.asciiz "\nsostituisciOccorrenzeTestt: " prompt4:.asciiz "\nmostraSostituzioniTest: " prompt5:.asciiz "\norderedPrefixTest: " prompt6:.asciiz "\nisOrderedTest: " prompt7:.asciiz "\ncheckLimitTest: " prompt8:.asciiz "\ncheckRangeTest: " prompt9:.asciiz "\nreplaceTest: " prompt10:.asciiz "\nwordsTest: " prompt11:.asciiz "\nmergeTest: " prompt12:.asciiz "\nisBeforeTest: " .text # esercizio 1 # $a0 puntatore ad un array di interi 16 bit senza segno # $a1 intero 16 bit senza segno sommaOccorrenze: li $v0,0 loop1: lhu $t0,($a0) bne $t0,$a1,skip1 addu $v0,$v0,$t0 skip1: addu $a0,$a0,2 bnez $t0,loop1 end1: jr $ra # esercizio 2 sommaOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array1 lhu $a1,int1 jal sommaOccorrenze 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,0 int1: .half 4 .text # esercizio 3 # $a0 puntatore ad un array di interi 16 bit senza segno maxSomma: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) # puntatore intero sw $s2,0($sp) # max parziale move $s0,$a0 move $s1,$a0 li $s2,0 loop2: move $a0,$s0 lhu $a1,($s1) beqz $a1,end2 jal sommaOccorrenze addu $s1,$s1,2 ble $v0,$s2,loop2 move $s2,$v0 j loop2 end2: move $v0,$s2 lw $s2,0($sp) lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 maxSommaTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array1 jal maxSomma move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 1 # $a0 puntatore ad una stringa # $a1 puntatore ad un buffer # $a2 carattere sostituisciOccorrenze: loop3: lbu $t0,($a0) beqz $t0,end3 bne $t0,$a2,skip3 addu $t0,$t0,1 skip3: sb $t0,($a1) addu $a1,$a1,1 addu $a0,$a0,1 j loop3 end3: sb $0,($a1) jr $ra # esercizio 2 sostituisciOccorrenzeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str3 la $a1,buffer3 lbu $a2,char3 jal sostituisciOccorrenze la $a0,buffer3 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str3: .asciiz "rastrello" char3: .byte 'l' buffer3:.space 128 .text # esercizio 3 # $a0 puntatore ad una stringa testo # $a1 puntatore ad una stringa sostituti mostraSostituzioni: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a1 loop4: lbu $a2,($s1) beqz $a2,end4 move $a0,$s0 la $a1,buffer4 jal sostituisciOccorrenze la $a0,buffer4 li $v0,4 syscall addu $s1,$s1,1 j loop4 end4: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 mostraSostituzioniTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str4 la $a1,pat4 jal mostraSostituzioni lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str4: .asciiz "rastrello" pat4: .asciiz "lsr" buffer4:.space 128 .text # esercizio 1 # $a0 puntatore ad una stringa orderedPrefix: li $v0,0 lbu $t1,($a0) beqz $t1,end5 loop5: addu $v0,$v0,1 addu $a0,$a0,1 move $t0,$t1 lbu $t1,($a0) bltu $t0,$t1,loop5 end5: jr $ra # esercizio 2 orderedPrefixTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str5 jal orderedPrefix move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str5: .asciiz "astro" .text # esercizio 3 # $a0 puntatore ad una stringa isOrdered: subu $sp,$sp,8 sw $ra,4($sp) sw $a0,0($sp) jal orderedPrefix lw $a0,0($sp) addu $a0,$a0,$v0 lbu $t0,($a0) li $v0,1 beqz $t0,end6 li $v0,0 end6: lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 isOrderedTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str6 jal isOrdered beqz $v0,end6a la $a0,str6 li $v0,4 syscall end6a: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str6: .asciiz "abdefinz" .text # esercizio 1 # $a0 puntatore ad un array di interi 16 bit senza segno # $a1 intero 16 bit senza segno # $a2 0 o 1 checkLimit: li $v0,1 bnez $a2,loop8 loop7: lhu $t0,($a0) beqz $t0,end7 addu $a0,$a0,2 bgeu $t0,$a1,loop7 li $v0,0 end7: jr $ra loop8: lhu $t0,($a0) beqz $t0,end8 addu $a0,$a0,2 bleu $t0,$a1,loop8 li $v0,0 end8: jr $ra # esercizio 2 checkLimitTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array8 li $a1,15 li $a2,1 jal checkLimit move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array8: .half 3,6,2,14,31,2,0 .text # esercizio 3 # $a0 puntatore ad un array di interi 16 bit senza segno # $a1 intero 16 bit senza segno # $a2 intero 16 bit senza segno checkRange: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a2 li $a2,0 jal checkLimit beqz $v0,end9 move $a0,$s0 move $a1,$s1 li $a2,1 jal checkLimit end9: lw $s1,4($sp) lw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 checkRangeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array8 li $a1,2 li $a2,32 jal checkRange 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 intero 8 bit senza segno # $a2 intero 8 bit senza segno loop10: addu $a0,$a0,1 replace:lbu $t0,($a0) beqz $t0,end10 bne $t0,$a1,loop10 sb $a2,($a0) j loop10 end10: jr $ra # esercizio 2 replaceTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array11 li $a1,12 li $a2,33 jal replace la $t0,array11 li $v0,1 loop11: lbu $a0,($t0) beqz $a0,end11 syscall addu $t0,$t0,1 j loop11 end11: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array11:.byte 12,3,78,34,12,5,0 .text # esercizio 3 # $a0 puntatore ad un array di interi 16 bit senza segno words: subu $sp,$sp,8 sw $ra,4($sp) move $t0,$a0 loop12: lbu $t1,($t0) beqz $t1,skip12 addu $t0,$t0,1 bne $t1,32,loop12 skip12: sw $t0,0($sp) li $a1,32 li $a2,0 jal replace lw $v0,0($sp) lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 wordsTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,array13 jal words move $t0,$v0 li $v0,1 loop13: lbu $a0,($t0) beqz $a0,end13 syscall addu $t0,$t0,1 j loop13 end13: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data array13:.byte 12,7,4,32,45,2,32,7,0 .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 puntatore ad una stringa # $a2 puntatore ad un buffer merge: lbu $t0,($a0) lbu $t1,($a1) beqz $t0,end14 beqz $t1,end15 bgtu $t0,$t1,second first: sb $t0,($a2) addu $a2,$a2,1 addu $a0,$a0,1 lbu $t0,($a0) beqz $t0,end14 bleu $t0,$t1,first second: sb $t1,($a2) addu $a2,$a2,1 addu $a1,$a1,1 lbu $t1,($a1) beqz $t1,end15 bleu $t1,$t0,second j first loop14: addu $a2,$a2,1 addu $a1,$a1,1 lbu $t1,($a1) end14: sb $t1,($a2) bnez $t1,loop14 jr $ra loop15: addu $a2,$a2,1 addu $a0,$a0,1 lbu $t0,($a0) end15: sb $t0,($a2) bnez $t0,loop15 jr $ra # esercizio 2 mergeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str15 la $a1,str16 la $a2,buffer16 jal merge la $a0,buffer16 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str15: .asciiz "bdef" str16: .asciiz "acfg" buffer16:.space 128 .text # esercizio 3 # $a0 puntatore ad una stringa # $a1 puntatore ad una stringa isBefore: subu $sp,$sp,8 sw $ra,4($sp) sw $a0,0($sp) la $a2,buffer16 jal merge lw $a0,0($sp) la $a1,buffer16 li $v0,1 loop17: lbu $t0,($a0) beqz $t0,end17 lbu $t1,($a1) addu $a0,$a0,1 addu $a1,$a1,1 beq $t0,$t1,loop17 li $v0,0 end17: lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 isBeforeTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str17 la $a1,str18 jal isBefore move $a0,$v0 li $v0,1 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str17: .asciiz "abc" str18: .asciiz "def"