[MIPS] confronto con whitespace

di il
3 risposte

[MIPS] confronto con whitespace

Come confronto un byte con lo spazio bianco affinchè termini la mia procedura??


lb $t1, vettore($t0)

beq $t1, WHITESPACE, exit

3 Risposte

  • Re: [MIPS] confronto con whitespace

    Per chi possa essere interessato l'ho risolto così:
    
    spazio: .ascii " "
    
    lb $t0, spazio
    
    lb $t1, vettore($t2)
    
    beq $t1, $t0, exit
    
    Funziona bene. Se avete altre soluzioni postatele comunque
  • Re: [MIPS] confronto con whitespace

    Posto la soluzione completa. L'esercizio dice di inserire una stringa in input e di stampare a video solo le parole in posizioni dispari. Qualsiasi giudizio in merito è gradito.
    
    .globl main
    
    .data
    
    vettore: .space 500 
    	 .asciiz
    
    vettore2: .space 500
    	  .asciiz
    	
    spazio: .ascii " "
    
    .text
    	
    main:
    
            addi $t0, $zero, 0
    	addi $t1, $zero, 0
    	lb $s0, spazio
    	
    	li $v0, 8
    	la $a0, vettore
    	la $a1, vettore
    	move $t3, $a0
    	syscall
    
    lettura:
    	
    	lb $s1, vettore($t0)
    	addi $t0, $t0, 1
    	beq $s1, $zero, exit
    	beq $s1, $s0, lettura2
    
    	j lettura
    	
    lettura2: 
    	
    	lb $s1, vettore($t0)
    	sb $s1, vettore2($t1)
    	addi $t1, $t1, 1
    	addi $t0, $t0, 1
    	beq $s1, $s0, lettura
    	beq $s1, $zero, exit
    	
    	j lettura2
    		
    exit:	
    	li $v0, 4
    	la $a0, vettore2
    	syscall
    	
    	li $v0, 10
    	syscall
    
    
  • Re: [MIPS] confronto con whitespace

    Ciao
    allora non puoi utilizzare contemporaneamente .ascii e .space
    o usi l'uno o l'altro
    poi la procedura cosa dovrebbe dare in output?
    per confrontare un carattere con lo spazio basta che fai :
    beq $t1,32,strovato
    dove in $t1 c'è il carattere da verificare
    32 è il codice ascii dello spazio
    strovato va alla label dove stampa un messaggio che ha trovato il carattere voluto
    mentre l'istruzione sottostante
    lb $t1,vettore2($t0)
    serve per caricare il carattere
    se ho capito bene la traccia
    quello che dovresti fare è la seguente cosa
    immetti una stringa
    poi dovresti stampare le parole di ordine pari.
    se ho capito bene dovresti agire nel seguente modo:
    accetti una stringa
    scorri la stringa fino alla fine,quindi verifica del invio, per trovare tutti gli spazi.
    ad ogni spazio che trovi lunghezza parola trovata = contatore-1
    puntatore parola successiva = posizione spazio + 1
    ti servono
    1 contatore da azzerare ogni volta che trovi uno spazio
    2 vettori numerici
    primo vettore offset parole cioè la posizione di inizio della parola.
    secondo vettore lunghezza della parola
    1 stringa di comodo servirà per stampare le parole.

    poi a seconda delle parole che devi stampare ti vai a caricare una stringa di comodo dove andresti a copiare la parola da stampare.
    per far ciò basta che esegui un ciclo a partire dall'offset per la lunghezza della stringa e poi la stampi.
    per evitare sovrapposizioni dopo aver stampato la parola cancelli la stringa di appoggio e vai alla prossima parola.
    esempio pratico:
    stringa inserita = "la vita e' bella "
    vettore posizioni = 0,3,8,11
    vettore lunghezze = 2,4,2,5
    un consiglio pratico
    fai una cosa alla volta in moduli separati e quando tutto funziona unisci i vari moduli.
    spero di esserti stato d' aiuto
    saluti smalldragon
    p.s. se ben ricordo il codice ascii per l'invio è 13
Devi accedere o registrarti per scrivere nel forum
3 risposte