.text .globl main main: subu $sp,$sp,8 sw $ra,4($sp) li $v0,4 la $a0,prompt1 syscall jal subCopyTest li $v0,4 la $a0,prompt2 syscall jal copyDStrTest li $v0,4 la $a0,prompt3 syscall jal noDupTest li $v0,4 la $a0,prompt4 syscall jal dupFilterTest lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data prompt1:.asciiz "\nsubCopyTest: " prompt2:.asciiz "\ncopyDStrTest: " prompt3:.asciiz "\nnoDupTest: " prompt4:.asciiz "\ndupFilterTest: " .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 indice 1 # $a2 indice 2 # $a3 puntatore ad un buffer subCopy: bge $a1,$a2,end1 addu $a1,$a0,$a1 addu $a2,$a0,$a2 loop1: lbu $t1,($a1) sb $t1,($a3) addu $a1,$a1,1 addu $a3,$a3,1 blt $a1,$a2,loop1 end1: sb $0,($a3) jr $ra # esercizio 2 subCopyTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str1 li $a1,5 li $a2,8 la $a3,buf1 jal subCopy la $a0,buf1 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str1: .asciiz "abcd*str*efghi" buf1: .space 256 .text # esercizio 3 # $a0 puntatore ad una stringa # $a1 delimitatore # $a2 puntatore ad un buffer copyDStr: subu $sp,$sp,8 sw $ra,4($sp) move $t0,$a0 loop2: lbu $t2,($t0) addu $t0,$t0,1 bne $t2,$a1,loop2 subu $t1,$t0,1 loop3: addu $t1,$t1,1 lbu $t2,($t1) bne $t2,$a1,loop3 move $a3,$a2 subu $a1,$t0,$a0 subu $a2,$t1,$a0 jal subCopy lw $ra,4($sp) addu $sp,$sp,8 jr $ra # esercizio 4 copyDStrTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str3 li $a1,'*' la $a2,buf3 jal copyDStr la $a0,buf3 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str3: .asciiz "abcd*star*efghi" buf3: .space 256 .text # esercizio 1 # $a0 puntatore ad una stringa # $a1 carattere c noDup: loop4: lbu $t0,($a0) addu $a0,$a0,1 beqz $t0,end5 bne $t0,$a1,loop4 move $a2,$a0 loop5: lbu $t0,($a0) beq $t0,$a1,skip5 sb $t0,($a2) addu $a2,$a2,1 skip5: addu $a0,$a0,1 bnez $t0,loop5 end5: jr $ra # esercizio 2 noDupTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str5 li $a1,'t' jal noDup la $a0,str5 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str5: .asciiz "trentatre" .text # esercizio 3 # $a0 puntatore ad una stringa dupFilter: subu $sp,$sp,16 sw $ra,12($sp) sw $s0,8($sp) sw $s1,4($sp) move $s0,$a0 move $s1,$a0 loop6: lbu $a1,($s0) beqz $a1,end6 jal noDup addu $s0,$s0,1 move $a0,$s0 j loop6 end6: move $v0,$s1 sw $s1,4($sp) sw $s0,8($sp) lw $ra,12($sp) addu $sp,$sp,16 jr $ra # esercizio 4 dupFilterTest: subu $sp,$sp,8 sw $ra,4($sp) la $a0,str6 jal dupFilter move $a0,$v0 li $v0,4 syscall lw $ra,4($sp) addu $sp,$sp,8 jr $ra .data str6: .asciiz "trentatre"