.text .globl main # main e dati di prova non richiesti nel compito # forniti solo per testare le soluzioni main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal reorderTest li $v0,4 la $a0,prompt2 syscall jal volteTest li $v0,4 la $a0,prompt3 syscall jal trimTest li $v0,4 la $a0,prompt4 syscall jal commonPrefixTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\nreorderTest: " prompt2:.asciiz "\nvolteTest: " prompt3:.asciiz "\ntrimTest: " prompt4:.asciiz "\ncommonPrefixTest: " .text # esercizio 1 # $a0 puntatore ad un array di 4 interi a 16 bit senza segno reorder: lhu $t0,0($a0) lhu $t1,2($a0) lhu $t2,4($a0) lhu $t3,6($a0) sh $t2,0($a0) sh $t3,2($a0) sh $t0,4($a0) sh $t1,6($a0) jr $ra # esercizio 2 # $a0 puntatore ad un array di interi a 16 bit senza segno reorderAll: subu $sp,$sp,8 sw $ra,4($sp) loop1: sw $a0,0($sp) lhu $t0,($a0) beqz $t0,end1 jal reorder lw $a0,0($sp) addu $a0,$a0,8 j loop1 end1: lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 reorderTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,reorderArray jal reorderAll la $a1,reorderArray loop2: lhu $a0,($a1) beqz $a0,end2 li $v0,1 syscall addu $a1,$a1,2 j loop2 end2: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data reorderArray: .half 1,2,3,4,5,6,7,8,0 .text # esercizio 1 # $a0 puntatore ad un array di interi a 16 bit senza segno contaUguali: li $v0,0 lhu $t0,($a0) beqz $t0,end3 loop3: addu $v0,$v0,1 addu $a0,$a0,2 lhu $t1,($a0) beq $t0,$t1,loop3 end3: jr $ra # esercizio 2 # $a0 puntatore ad un array di interi a 16 bit senza segno # $a1 puntatore ad un array di interi a 8 bit arrayVolte: subu $sp,$sp,16 sw $ra,12($sp) loop4: sw $a0,8($sp) sw $a1,4($sp) jal contaUguali lw $a0,8($sp) lw $a1,4($sp) sb $v0,($a1) sll $v0,$v0,1 addu $a0,$a0,$v0 addu $a1,$a1,1 bnez $v0,loop4 lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 3 volteTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,contaArray la $a1,volteArray jal arrayVolte la $a1,volteArray loop5: lbu $a0,($a1) beqz $a0,end5 li $v0,1 syscall addu $a1,$a1,1 j loop5 end5: lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data contaArray: .half 25,25,25,13,81,81,4,0 volteArray: .space 8 .text # esercizio 1 # $a0 puntatore ad una stringa loop6: addu $a0,$a0,1 trimStart: lbu $t0,($a0) beq $t0,' ',loop6 move $v0,$a0 end6: jr $ra # esercizio 2 # $a0 puntatore ad una stringa trim: subu $sp,$sp,8 sw $ra,4($sp) jal trimStart move $a0,$v0 sw $a0,0($sp) lbu $t0,($a0) beqz $t0,end7 loop7: addu $a0,$a0,1 lbu $t0,($a0) bnez $t0,loop7 loop7a: subu $a0,$a0,1 lbu $t0,($a0) beq $t0,' ',loop7a sb $0,1($a0) end7: lw $v0,0($sp) lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 trimTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,trimString jal trim move $a0,$v0 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data trimString: .asciiz " esempio di stringa " .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 puntatore ad una stringa commonPrefixSize: li $v0,-1 loop8: addu $v0,$v0,1 lbu $t0,($a0) lbu $t1,($a1) addu $a0,$a0,1 addu $a1,$a1,1 beqz $t0,end8 beq $t0,$t1,loop8 end8: jr $ra # esercizio 2 # $a0 puntatore ad una stringa # $a1 puntatore ad una stringa commonPrefix: subu $sp,$sp,8 sw $ra,4($sp) sw $a0,0($sp) jal commonPrefixSize lw $a0,0($sp) addu $a0,$a0,$v0 sb $0,($a0) lw $v0,0($sp) lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 3 commonPrefixTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,prefixString1 la $a1,prefixString2 jal commonPrefix move $a0,$v0 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prefixString1: .asciiz "prefisso uno" prefixString2: .asciiz "prefisso due"