Funzione per il massimo comune divisore

di il
5 risposte

Funzione per il massimo comune divisore

Ciao, dovrei realizzare una funzione per il massimo comune divisore in assembly mips, ho provato a realizzare qualcosa ma non ho molta pratica con questo linguaggio qualcuno mi riesce a dare una mano? inserisco la funzione che ho realizzato in c ...
unsigned int MCD(unsigned int a,unsigned int b)
unsigned int r,tmp;
if(a<b)
{
tmp=a;
a=b;
b=tmp;
}
while(b!=0) //ripetere finché non riduciamo a zero
{
r=a%b;
a=b;
b=r; //scambiamo il ruolo di a e b
}
return a; //... e quando b è (o è diventato) 0, il risultato è a
}

5 Risposte

  • Re: Funzione per il massimo comune divisore

    Questo è un ottimo algoritmo in pseudocodice
    
    while(a!=b)
       if(a>b)
          then assegna ad 'a' il valore di 'a-b'
          else assegna a 'b' il valore di 'b-a'
          endif
    
    assegna a 'mcd' il valore di a
    end_while
    
  • Re: Funzione per il massimo comune divisore

    Devo usare obbligatoriamente l'algoritmo di Euclide e mi richiede il linguaggio assembly mips
  • Re: Funzione per il massimo comune divisore

    In realtà non è che inserisci la funzione in C ma penso che dovresti tradurlo in assembly MIPS partendo dal C. Sai come è possibile fare un loop, un salto condizionato o incondizionato, chiamate a procedure, funzioni ricorsive, allocare memoria in MiPs?
  • Re: Funzione per il massimo comune divisore

    Paolovox ha scritto:


    In realtà non è che inserisci la funzione in C ma penso che dovresti tradurlo in assembly MIPS partendo dal C. Sai come è possibile fare un loop, un salto condizionato o incondizionato, chiamate a procedure, funzioni ricorsive, allocare memoria in MiPs?
    Si questo lo so!!! Non ho ben chiaro l'uso dei registri!!!
  • Re: Funzione per il massimo comune divisore

    Un registro può contenere un valore o un indirizzo di memoria.
    Qui stanno riassunte le convenzioni sui registri nel MiPs
Devi accedere o registrarti per scrivere nel forum
5 risposte