Problemi procedura Assembly Mips

di il
1 risposte

Problemi procedura Assembly Mips

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   

1 Risposte

  • Re: Problemi procedura Assembly Mips

    Alla fine ho risolto, se qualcuno fosse interessato a capire quale fosse il problema, era nella riga
    [CODE]beqz $t1,exit2 della procedura "contenuta".
    Infatti, $t1 non assumeva mai il valore 0 perchè non era quest'ultimo il terminatore della stringa.
    La riga corretta è la seguente
    [CODE]beq $t1,10,exit2 dove infatti "10" nella tabella ascii è il line feed
Devi accedere o registrarti per scrivere nel forum
1 risposte