Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    2

    Problema Programma assembly

    Ciao a tutti! Devo creare un programma che inserisca una stringa di caratteri e come output mi da una stringa con le seguenti regole:
    se nella stringa iniziale sono presenti le parole "uno" mi scrive 1 , "due" mi scrive due, "nove" mi
    scrive 9... per tutti gli altri caratteri mi scrive "?"
    ad esempio >> input: etr 55 ciao yui uno qeu due
    output: ? ? ? ? 1 ? 2
    Non riesco a trovare l' errore , mi potete dare una mano? Grazie in anticipo

    codice:
    .data
    stringa: .asciiz "n\n Inserire una stringa:\n "
    errore: .asciiz "\n\n La stringa deve essere inferiore a 100 caratteri. \n"
    sottostringa1: .asciiz "uno"
    sottostringa2: .asciiz "due"
    sottostringa3: .asciiz "nove"
    sottostringa4: .asciiz "?"
    buffer: .space 100
    nuovastringa: .space 100
    
    
    .text
    .globl main
    main:
        li $v0, 4 
        la $a0, stringa
        syscall
        li $t0, 0    #indice della stringa
        li $t1, 0    #indice della sottostringa1
        li $t2, 0    #indice della sottostringa2
        li $t3, 0    #indice della sottostringa3
        li $t4, 0    #indice della sottostringa4
        li $t5, 0    #indice in cui si sono trovate le sottostringhe
    
    
    #cerchiamo le sottostringhe
    cerca:
        lb $s1, sottostringa1($t1)    #carattere corrente della sottostringa1
        lb $s2, sottostringa2($t2)    #carattere corrente della sottostringa2
        lb $s3, sottostringa3($t3)    #carattere corrente della sottostringa3
        lb $s4, sottostringa3($t4)    #carattere corrente della sottostringa4
        beqz $s1, trovata        #abbiamo trovato la sottostringa1 (beq=salta se sono uguali)
        beqz $s2, trovata        #abbiamo trovato la sottostringa2 
        beqz $s3, trovata        #abbiamo trovato la sottostringa3
        lb $s0, stringa($t0)        #carattere corrente della stringa
        beqz $s0, fine            #termina se la stringa è finita
        bne $s0, $s1, diversa        #se i due caratteri sono diversi dobbiamo ricominciare la ricerca
        bne $s0, $s2, diversa        
        bne $s0, $s3, diversa        
        addi $t0, 1            #se i due caratteri sono uguali passiamo al prossimo carattere
        addi $t1, 1            
        addi $t2, 1            
        addi $t3, 1            
        b cerca
        syscall
        
    
    
    diversa:
        addi $t5, 1            #proviamo a cercare la stringa un carattere più avanti
        move $t5, $t0
        li $t1, 0    
        li $t2, 0
        li $t3, 0
        syscall
        
    
    
    #in $t5 abbiamo la posizione del primo carattere della sottostringa
    #in $t0 abbiamo la posizione del primo carattere che la segue
    
    
    trovata:
        li $t6, 0            #ci serve un indice nella stringa
        li $t7, 0            #indice da cambiare
        syscall
        
    rimpiazza:
        lb $s0, stringa ($t5)        #in $t5 ho l’indice del primo carattere che segue la stringa trovata
        loop:
            bne $t0, $t1, else         #if($t0(i)==$t1) continua 
            li $t0,1
            bne $t0, $t2, else         #if($t0(i)==$t2) continua 
            li $t0, 2        
            bne $t0, $t3, else         #if($t0(i)==$t3) continua 
            li $t0, 9
            add $t0, $t0, 1
            j loop
        else:    
            add $t0, $zero, $t4    
        beqz $s0, fine             #se la stringa è finita esco
        sb $s0, nuovastringa ($s5)    #altrimenti copio il carattere
        addi $s5, 1            #avanzo di 1
        addi $t5, 1
        syscall
        
    fine:
        li $v0, 10
        syscall
    Ultima modifica di LeleFT; 11-05-2017 a 12:23 Motivo: Aggiunti tag CODE

  2. #2
    Dovresti specificare di che assembly si tratta...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2017
    Messaggi
    2
    Utilizzando QtSpim

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.