Risultati da 1 a 5 di 5
  1. #1

    Predefinito Assembly mips, quadrato di un numero perchè non funziona?

    .data
    domanda: .asciiz "Inserisci un numero N: "
    risposta: .asciiz "Il quadrato di N è: "
    .text
    .globl main
    main:
    li $v0, 4
    la $a0, domanda
    syscall
    li $v0, 5
    move $t0, $v0
    syscall
    mul $t1, $t0, $t0

    syscall
    li $v0, 4
    la $a0, risposta
    syscall
    move $a0, $t1
    li $v0, 1
    syscall
    li $v0, 10
    syscall


    la compilazione avivene senza errori, ma mi dà come risultato sempre 25!!! aiuto!

  2. #2
    Mursey
    ospite

    Predefinito Re: Assembly mips, quadrato di un numero perchè non funziona?

    Se nessuno ha risposto alla precedente richiesta sull'assemlber direi che qui non c'e' trippa per gatti.

  3. #3
    blue_tech
    ospite

    Predefinito Re: Assembly mips, quadrato di un numero perchè non funziona?

    Citazione Originariamente Scritto da pulcina87 Visualizza Messaggio
    .data
    domanda: .asciiz "Inserisci un numero N: "
    risposta: .asciiz "Il quadrato di N è: "
    .text
    .globl main
    main:
    li $v0, 4
    la $a0, domanda
    syscall
    li $v0, 5
    move $t0, $v0
    syscall
    mul $t1, $t0, $t0

    syscall
    li $v0, 4
    la $a0, risposta
    syscall
    move $a0, $t1
    li $v0, 1
    syscall
    li $v0, 10
    syscall


    la compilazione avivene senza errori, ma mi dà come risultato sempre 25!!! aiuto!
    guarda uso tutta la mia memoria per riprendere il corso di architetture

    Nella riga che ho evidenziato assegni 5 al registro $v0, lo sposti in t0 e solo dopo chiami la syscall. A questo punto il valore dell'utente viene inserito in v0 ma tu non lo usi perchè hai già spostato il dato da v0 a t0 (il 5 di preparazione alla syscall) infine moltiplichi t0 per sè stesso e assegni tutto a t1... infine più sotto prepari la stampa dell'output, copi t1 in a0 e poi lo stampi...

    come avrai notato in tutti questi passaggi usi il 5 che assegni tu a v0 e non prendi l'input dell'utente; per quello stampi sempre 25

    provo a vedere se trovo il mio progetto che magari mi rinfresco come si fa l'input su mips

    EDIT: ho corretto la spiegazione e ho sottolineato la syscall inutile che ti ho segnalato nel post sotto questo... come puoi vedere quella non serve a nulla, anzi obbliga l'utente a premere ancora invio (perchè aspetta ancora un input).
    Ultima modifica di blue_tech; 07-09-12 alle 18:05:45

  4. #4
    blue_tech
    ospite

    Predefinito Re: Assembly mips, quadrato di un numero perchè non funziona?

    Ok problema risolto:

    l'input lo fai così li $v0,5 e poi chiami la syscall tu invece prima fai uno spostamento da v0 a t0... quando chiami le syscall devi fare tutto in blocchi che è meglio perchè nel mentre non sai bene cos'è successo ai registri (diciamo che è buona abitudine). già sistemando quella funziona. Infine abituati a scrivere il codice in modo un filo più pulito ti aiuterà a notare queste cose:

    Codice:
    .data
        domanda: .asciiz "Inserisci un numero N: "
        risposta: .asciiz "Il quadrato di N è: "
    
    .text
    .globl main
    
        main:
            li $v0, 4
            la $a0, domanda
            syscall
    
            li $v0, 5 #prepari l'input
            syscall #chiami l'input
    
            move $t0, $v0
            mul $t1, $t0, $t0
    
            li $v0, 4
            la $a0, risposta
            syscall
    
            move $a0, $t1
            
            li $v0, 1
            syscall
            
            li $v0, 10
            syscall
    Mi pare che così vada

    EDIT: dopo il mul avevi anche messo una syscall inutile che faceva un secondo input senza che ce ne fosse bisogno

    EDIT2: ho verificato sia con spim che con MARS (simulatore/editor che consiglio) e funziona correttamente
    Ultima modifica di blue_tech; 09-09-12 alle 19:35:38 Motivo: corretto un piccolo errore nel testo

  5. #5

    Predefinito Re: Assembly mips, quadrato di un numero perchè non funziona?

    ok ora provo grazie mille!

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice HTML è Disattivato