Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94

    [Assembler] Funzione ricorsiva

    Salve ragazzi...
    Scrivo qui per chiedervi un aiutino..

    Sto provando a scrivere un programma in assembly mip e devo fare una funzione ricorsiva..ma non ci riesco...potreste darmi una mano?

    int funzione (int n)
    {
    if (n == 0) return 1;
    if (n == 1) return 2;
    if (n == 2) return 4;
    return funzione(n-1) + funzione(n-2) + funzione(n-3);
    }

    Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E il codice assembler qual e'?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    MIPS

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Intendevo il tuo codice, quello che proponi tu ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    Io in realtà non avevo mai avuto a che fare con la ricorsione in assembler prima d'ora..quindi ho fatto un paio di prove ma il codice non lo riesco proprio a fare..

    se hai da propormi un esempio dove viene spiegato il funzionamento della ricorsione o qualche guida potrei continuare a provare..oppure se per te non è una seccatura potresti scrivermi il codice equivalente a quello in C++ che ho messo sopra..anche perchè ho poco tempo per finire questo codice

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da lilfo
    potresti scrivermi il codice equivalente a quello in C++ che ho messo sopra..anche perchè ho poco tempo per finire questo codice
    No ... non va bene cosi' ...

    Il fatto che tu non proponga un tuo codice da completare e correggere insieme, non va bene ... non e' bene richiedere codice completo, ma poi, dire che non hai tempo ... insomma ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    vabeh ma mi adeguo..non voglio mettere fretta..se non riesco a finirlo per tempo sono problemi miei..almeno però imparo questa cosa che ora non so fare..

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    Ho provato un pò a smanettare..

    ho scritto questo codice:

    ricorsione_n1:
    #CASO BASE 1
    bne $t0, $s0, ricorsione_n2
    addi $s6,$s6, 1
    j read

    ricorsione_n2:
    #CASO BASE 2
    bne $t0, $s1, ricorsione_n3
    addi $s6,$s6, 2
    j read

    ricorsione_n3:
    #CASO BASE 3
    bne $t0, $s2, check
    addi $s6,$s6, 4
    j read

    check:
    #VARIABILI PASSO INDUTTIVO
    sub $t1, $t0, $s1
    sw $t1, 1000($t3)
    addi $t3,$t3, 4

    sub $t1, $t0, $s2
    sw $t1, 1000($t3)
    addi $t3,$t3, 4

    sub $t1, $t0, $s3
    sw $t1, 1000($t3)
    addi $t3,$t3, 4

    read:
    beq $t3, $s0, stampa
    sub $t3, $t3, $s4
    lw $t0, 1000($t3)
    j ricorsione_n1

    dove $t0 è n, $s1 è 1, $s2 è 2, $s3 è 3, $s4 è 4, $s6 è il risultato

    Questo codice mi da un errore: Exception 7 dab address in data/stack read

    Non sono riuscito a trovare una guida sullo stack..solo qualche esempio in giro..e non ho capito bene come funziona..

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    Ho letto qualche altra cosa in giro per il web ed ho provato a rifare il codice..ora è questo:

    ricorsione_n1:
    bne $t0, $s0, ricorsione_n2
    addi $s6,$s6, 1
    j read

    ricorsione_n2:

    bne $t0, $s1, ricorsione_n3
    addi $s6,$s6, 2
    j read

    ricorsione_n3:

    bne $t0, $s2, check
    addi $s6,$s6, 4
    j read

    check:

    subu $sp, $sp, 4
    subu $t1, $t0, 1
    sw $t1, ($sp)

    subu $sp, $sp, 4
    subu $t1, $t0, 2
    sw $t1, ($sp)

    subu $sp, $sp, 4
    subu $t1, $t0, 3
    sw $t1, ($sp)

    read:

    beq $sp, $s0, stampa
    lw $t0, ($sp)
    addi $sp, $sp, 4
    j ricorsione_n1

    L'errore questa volta è: Can't expand stack segment by 8 bytes to 524288 bytes

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2004
    Messaggi
    94
    Nessuno che riesce a darmi una mano?

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.