Programma assembly

di il
9 risposte

Programma assembly

Salve, devo fare un elaborato per un esame di settembre. Questo elaborato consiste nell'incorporare al linguaggio C la parte in assembly che deve eseguire determinate istruzioni. Sono al primo anno di università e non ho mai fatto queste cose in vita mia quindi ci capisco poco e sono mesi che io e i miei amici proviamo a farlo partire ma niente.
C'è qualcuno che può aiutarmi a farlo?

9 Risposte

  • Re: Programma assembly

    In mesi (!) di prove (di una cosa che non hai mai fatto nella tua vita) non sei riuscito neanche a farlo partire? La vedo male con l'esame ...

    Cosa hai fatto? Che difficoltà hai avuto? Errori?

    Qui se ne può parlare tutti insieme, in base al tuo codice (anche sbagliato) ma, ovviamente, non farlo completamente al posto tuo.

    E settembre è qui ...
  • Re: Programma assembly

    Eh no non sono riuscita nemmeno a farlo partire e non sono solo io a farlo ma siamo in 3 e nessuno dei 3 ci è riuscito.
    Comunque si credo che ce ne siano parecchi di errori nel mio codice visto che non riesco nemmeno a farlo partire solo che non capisco dove siano questi errori
  • Re: Programma assembly

    Spiega cosa dovresti fare, mostra il codice utilizzato e gli errori. Descrivi ambiente e strumenti utilizzati e si vede di darti delle indicazioni per farti comprendere cosa correggere.
  • Re: Programma assembly

    Questo è il testo dell'elaborato:

    "Si ottimizzi un codice in linguaggio C che effettua il monitoraggio di un impianto chimico industriale mediante l’uso di Assembly inline. Ricevendo come input il pH di una soluzione contenuta in un serbatoio e, una volta impostate le soglie minima e massima per il funzionamento ottimale, il programma fornisce in uscita lo stato della soluzione in termini di acido (A), basico (B) e neutro (N). Il sistema deve portare sempre la soluzione allo stato neutro, accettando un transitorio di 5 cicli di clock; pertanto si richiede che al sesto ciclo di clock in cui il sistema sia allo stato A, venga aperta una valvola con soluzione basica (BS), e analogamente se allo stato B si apra la valvola con soluzione acida (AS). Il sistema deve inoltre fornire in uscita il numero di cicli di clock da cui si trova nello stato attuale.
    Il programma deve essere lanciato da riga di comando con due stringhe come parametri, la prima stringa identifica il nome del file .txt da usare come input, la seconda quello da usare come output:
    $ ./controller testin.txt testout.txt"

    Mentre questo è la parte di codice asm che ho scritto io:

    _asm_(
    "CHECK: leab init, %%ah\n" //passo valori di init
    " cmp $1, %%ah\n" //controllo se la macchina è accesa
    " je RESET\n" //passo al controllo sul reset se la macchina è accesa
    " movb $48, %%dh\n" //azzero contatore cicli se la macchina è spenta

    "RESET: leab reset, %%al\n" //passo valori di reset
    " cmp $0, %%al\n" //controllo se reset vale 0
    " je ON\n" //se reset è 0 passo a ON
    " movb $48, %%dh\n" //azzero contatore dei cicli se reset vale 1
    " jmp CHECK\n" //passo al prossimo valore

    "ON: leab ph, %%ah\n" //passo il valore del ph
    " cmp $60, %%ah\n" //confronto il valore con 60
    " jl ACIDO\n" //se è minore passo all'etichetta ACIDO
    " cmp $80, %%ah\n" //confronto il valore con 80
    " jg BASICO\n" //se è maggiore passo all'etichetta BASICO
    " jmp NEUTRO\n" //passo all'etichetta NEUTRO

    "ACIDO: movb $65, %%bl\n" //metto il carattere 'A' nel registro
    " leab oldst, %%bh\n" //passo il valore dello stato precedente
    " cmp %%bh, %%bl\n" //lo confronto con quello dello st. attuale
    " je PLUS_A\n" //se sono uguali passo all'etichetta PLUS_A
    " movb $48, %%dh\n" //altrimenti azzero i cicli di clock
    " jmp CHECK\n" //passo al prossimo valore

    "BASICO:movb $66, %%bl\n" //metto il carattere 'B' nel registro
    " leab oldst, %%bh\n" //passo il valore dello stato precedente
    " cmp %%bh, %%bl\n" //lo confronto con quello dello st. attuale
    " je PLUS_B\n" //se sono uguali passo all'etichetta PLUS_A
    " movb $48, %%dh\n" //altrimenti azzero i cicli di clock
    " jmp CHECK\n" //passo al prossimo valore

    "NEUTRO:movb $78, %%bl\n" //metto il carattere 'N' nel registro
    " jmp PLUS_N\n" //passo all'etichetta PLUS_N

    "NCK: leab oldst, %%bh\n" //passo il valore dello stato precedente
    " cmp %%bh, %%bl\n" //confronto il valore dello st. prec. con quello dello st. att.
    " je PLUS\n" //se sono uguali passo all'etichetta PLUS
    " movb $48, %%dh\n" //se sono diversi azzero il numero di cicli di clock
    " jmp CHECK\n" //e passo al prossimo valore

    "PLUS_A:incb %%dh\n" //incremento di uno il numero di cicli di clock
    " cmp $4, %%dh\n" //confronto il NCK con 4
    " jg VLV_BS\n" //se NCK > 4 passo all'etichetta relativa alla valvola BS
    " jmp CHECK\n" //altrimenti passo al prossimo valore

    "PLUS_B:incb %%ch\n" //incremento di uno il numero di cicli di clock
    " cmp $4, %%dh\n" //confronto il NCK con 4
    " jg VLV_AS\n" //se NCK > 4 passo all'etichetta relativa alla valvola AS
    " jmp CHECK\n" //altrimenti passo al prossimo valore

    "PLUS_N:incb %%dh\n" //incremento di uno il numero di cicli di clock
    " jmp CHECK\n" //passo al prossimo valore

    "VLV_BS:leab $66$83, %%dl\n" //metto 'BS' nel registro
    " jmp CHECK\n" //passo al prossimo valore

    "VLV_AS:leab $65$83, %%dl\n" //metto 'AS' nel registro
    " jmp CHECK\n" //passo al prossimo valore

    :"=m" (bufferout_asm)
    :"r" (bufferin), "r" (init), "r" (reset), "r" (st), "r" (nck), "r" (oldst)
    :"%%eax", "%%ebx", "%%ecx", "%%edx"

    );
  • Re: Programma assembly

    E quindi? Non dici nulla sugli errori, malfunzionamenti...? Hai scritto quel codice perché? Commenti ? Nulla ?
  • Re: Programma assembly

    Non funziona proprio che è diverso. Non mi da errori perché parte ma nel file di output dovrebbe scrivermi delle cose da confrontare con quelle del professore ma il file rimane bianco, non viene scritto nulla
  • Re: Programma assembly

    Uhm quindi potete aiutarmi a capire dove sto sbagliando oppure no?!
  • Re: Programma assembly

    Scusa se mi permetto ma state facendo un gran casino.
    Visto che non sapete proprio nulla, comincia così.

    Scrivi il programma C che fa quello che vuoi.
    POI sostituirai le porzioni da ottimizzare mediante l'inline.

    Primo passo: posta il programmello C
  • Re: Programma assembly

    Ma il programma C ce l'ho già, mi è stato dato dal professore. Io devo solamente scrivere la parte in assemlby
Devi accedere o registrarti per scrivere nel forum
9 risposte