Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8

    Convertitore da MIPS a X86

    Scusatemi per il disturbo, ma avrei un dusperato bisogno di aiuto dovrei fare un programma in linguaggio C che mi legga un programma in MIPS e che me lo converta in linguaggio x86.
    Io dovrei fare questo solo per la funzione di Fibonacci.
    Ho gia scritto la funzione sia in Mips che in x86 ed entrambe sono funzionanti.Io ho gia fatto un programma che riesce a fare tutto cio e il funzionamento base è questo:
    faccio leggere il programma MIPS riga per riga e attraverso vari IF a seconda di quello che legge io gli faccio scrivere il corrispettivo in x86.
    Ad esempio se legge
    --beq $t1 $0 end
    io gli faccio scrivere --CMP CX 0h
    --JE end
    attraverso
    if ((d[0]>='a')&&(d[0]<='z')||(d[0]>='A')&&(d[0]<='Z'))
    {
    fputs("CMP ",fp2);
    if (strcmp(b,t1)==0)
    {
    fputs("CX ",fp2);
    if(strcmp(c,zero)==0)
    {
    fputs("0h\n",fp2);
    fprintf(fp2,"JE %s\n",d);
    }
    }
    }
    Purtoppo al professore tutto questo non va bene perchè dice che è troppo poco generale e che tutto il mio programma puo essere riassunto cosi:
    se leggi questo programma scrivi questo.
    VI PREGO AIUTATEMI DATEMI QUALCHE DRITTA.
    Grazie in anticipo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Moderazione

    Ho corretto il titolo aggiungendo il linguaggio di programmazione, come da Regolamento.

    Leggilo quando hai un attimo di tempo...

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3

    Re: Convertitore da MIPS a X86

    Originariamente inviato da tirif4
    Scusatemi per il disturbo, ma avrei un dusperato bisogno di aiuto dovrei fare un programma in linguaggio C che mi legga un programma in MIPS e che me lo converta in linguaggio x86.
    Io dovrei fare questo solo per la funzione di Fibonacci.
    Ho gia scritto la funzione sia in Mips che in x86 ed entrambe sono funzionanti.Io ho gia fatto un programma che riesce a fare tutto cio e il funzionamento base è questo:
    faccio leggere il programma MIPS riga per riga e attraverso vari IF a seconda di quello che legge io gli faccio scrivere il corrispettivo in x86.
    Ad esempio se legge
    --beq $t1 $0 end
    io gli faccio scrivere --CMP CX 0h
    --JE end
    attraverso
    if ((d[0]>='a')&&(d[0]<='z')||(d[0]>='A')&&(d[0]<='Z'))
    {
    fputs("CMP ",fp2);
    if (strcmp(b,t1)==0)
    {
    fputs("CX ",fp2);
    if(strcmp(c,zero)==0)
    {
    fputs("0h\n",fp2);
    fprintf(fp2,"JE %s\n",d);
    }
    }
    }
    Purtoppo al professore tutto questo non va bene perchè dice che è troppo poco generale e che tutto il mio programma puo essere riassunto cosi:
    se leggi questo programma scrivi questo.
    VI PREGO AIUTATEMI DATEMI QUALCHE DRITTA.
    Grazie in anticipo
    Ti ha detto che è poco generale perchè il tuo programma funziona SOLO per quel particolare caso mentre lui vuole che il tuo programma preso come input un qualsiasi programma MIPS restituisca un listato corrispondente x86.Un caso semplificato potrebbe essere quello in cui il tuo programma generalizzato comprenda solo il tipo di istruzioni che ci sono nella funzione fibonacci, in altre parole se gli passi come listato una funzione MIPS che fa un'altra cosa ma usa lo stesso set di istruzioni presente nella funzione fibonacci allora il prog deve essere in gardo di produrre l'equivalente x86.Questo secondo caso penso sia quello che intende il tuo prof.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Penso che il professore voglia proprio questo ed infatti ho iniziato a fare un programma che riconosce solo quelle istruzioni che sono presenti in Fibonacci.in questo m
    Io ho impostato il programma in questo modo:
    1)leggo il file originale
    2)elimino i vari commenti e gli spazi
    3)leggo riga per riga il programma riscritto
    4)a seconda di quello che legge gli faccio riscrivere le istruzioni in x86.

    Adesso il mio problema sta nel fatto che per leggere riga per riga ho usato la funzione:

    p=fgets(buf,100,fp1);
    sscanf(buf,"%s %s %s %s %s ",e1,e2,e3,e4,e5);

    in pratica io ho impostato 5 campi perche al max potrò avere:
    Etichetta--Oerazione--reg1--reg2--reg3

    Però con una istruzione come: sw $ra, 8($sp)
    ho e1=sw e2=$ra e3=8($sp) e adesso come faccio a tirarmi fuori il numero 8 e il registro $sp??
    Mi servono perchè l'implementazione dello stack tra MIPS e x86 è diversa.
    Fatemi sapere

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il mio consiglio e' di leggere un carattere per volta ed esaminarlo, costruendo una sorta di "analizzatore sintattico" ...

    Non e' per nulla semplice ...

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Potrei fare cosi:
    1)gli faccio leggere fino al primo spazio
    2)se mi riconosce l'operazione SW gli faccio leggere carattere per carattere i seguenti campi e cosi mi ricavo quello che mi serve.

    Prima uso STRLEN per vedere la lunghezza del campo e poi li leggo uno ad uno.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Nessuno ha altri suggerimenti?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.