Salve a tutti, sto svolgendo un esercizio in assembly mips nel quale mi chiede di inserire il input due stringhe e verificare se la seconda è contenuta nella prima. Io l'ho implementato in questo modo, ma non funziona in particolare, quando arriva a "exit2", invece di tornare al main, torna a "contenuta" e non capisco il perchè, qualcuno potrebbe darmi una mano? grazie in anticipo
# Programma che ricerca sottostringa in stringa inserita
.data
str1: .asciiz "Inserisci la stringa: "
str2: .asciiz "Inserisci sottostringa da ricercare: "
str3: .asciiz "La sottostringa è presente"
str4: .asciiz "La sottostringa non è presente"
.text
.globl main
main:
addi $sp,$sp,-60 #alloco spazio su stack per stringhe
la $a0,str1
li $v0,4
syscall
# prima stringa -> 0($sp)
move $a0,$sp
li $a1,24
li $v0,8
syscall
la $a0,str2
li $v0,4
syscall
# seconda stringa (sottostringa) -> 25($sp)
addi $a0,$sp,25
li $a1,24
li $v0,8
syscall
jal contenuta
beq $v0,0,nocontenuta
la $a0,str3
li $v0,4
syscall
li $v0,10
syscall
nocontenuta:
la $a0,str4
li $v0,4
syscall
li $v0,10
syscall
# PROCEDURA CONTENUTA
contenuta:
move $s0,$sp # s0 = puntatore a primo carattere prima stringa
addi $s1,$sp,25 # s1 = puntatore a primo carattere seconda stringa
li $v0,0 # valore di ritorno: se 1 contenuta, se 0 no (inizializzato a 0)
loop:
lb $t0,($s0) # t0 = valore puntato da s0
lb $t1,($s1) # t1 = valore puntato da s1
beqz $t1,exit2
beqz $t0,exit
beq $t0,$t1,uguali
beq $v0,1,modifica
addi $s0,$s0,1
addi $s1,$sp,25
j loop
exit:
li $v0,0
jr $ra
exit2:
li $v0,1
jr $ra
uguali:
li $v0,1
addi $s0,$s0,1
addi $s1,$s1,1
j loop
modifica:
li $v0,0
addi $s1,$sp,25
j loop