Compilazione C->assembler illogica

10 Anni 11 Mesi fa #1 da Hector
Compilazione C->assembler illogica è stato creato da Hector
Ciao, come detto nel benvenuto sono nuovo di qui e spero di non aprire topics troppo stupidi.

Sto leggendo l'ottimo tutorial sul C18; arrivo alla pag. 91, dove c'è l'esempio di compilazione per inizializzare e sommare 2 char, e stupore!...non capisco il codice generato (io normalmente programmo in Assembler).
Va bene che il compilatore avrà anche suoi motivi per metterci qualcosa in più (tipo il NOP), ma perchè usare 12 istruzioni quando ne bastano 7?
E che senso hanno le istruzioni 'MOVLW 0xnn' prima di un'altra assegnazione di valore a W?

E il caso di somma di 2 INT è ancora molto peggio.

Questo significa che verificare il risultato della compilazione diventa veramente un'impresa.
Se qualcuno me lo può spiegare, grazie1000

00101010

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Hector
  • Avatar di Hector
  • New Member
  • New Member
Di più
10 Anni 11 Mesi fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Compilazione C->assembler illogica
Ciao Hector,

vedo che in un solo giorno hai letto 91 pagine e mi sembra di vedere che lo stai facendo anche con cura.

Relativamente ai NOP sono generalmente inseriti come workaround a bug della CPU in cui viene richiesto un ciclo di clock per garantire che tutto funzioni correttamente.
Questo come regola generale. Si trovano spesso dopo movimenti su registri speciali.
Lo scorso anno trovai un bug sugli MSP430 e venne risolto appunto inserendo un NOP.

Frequentemente quando si programma non si tiene conto che la CPU ha in realta' una decine di bugs.
Molti bugs sono direttamente corretti dal compilatore e non ci si accorge di nulla a meno di non avere dei messaggi di info dopo la compilazione o vedere il codice assembly.

Relativamente al secondo punto, non sembrerebbe avere senso caricare una costante in W prima di caricarci un registro.
Non credo che questo rifletta un'esigenza di non aver W = 0 ma piuttosto che nel caso in cui non ci siano ottimizzazioni, la traduzione del compilatore rifletta dei template generici e di uso generale.
Questo potrebbe portare all'uso di istruzioni "non necessarie". Se questo fosse vero dovrebbero pero' sparire con livelli di ottimizzazioni.
Se cosi non fosse bisognerebbe leggere bene l'errata del microcontrollore.

Saluti,

Mauro
Ringraziano per il messaggio: Hector

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
10 Anni 11 Mesi fa #3 da Hector
Risposta da Hector al topic Compilazione C->assembler illogica
Ciao Mauro, immagino che la versione Free del C18 sia appositamente non ottimizzata, altrimenti nessuno comprerebbe quella commerciale :-)
Non ho letto 91 pagine perchè sono troppo pigro...scorro veloce e quando trovo qualcosa di interessante mi addentro.
A questo proposito, un grande grazie perchè finalmente ho capito il senso della dichiarazione 'volatile' delle variabili...non svolazzano da un ramo all'altro e non sono come la grappa!

Nel frattempo studio e posto appena possibile il risultato di un'esperienza diretta di mancata compilazione per colpa di accidenti esterni (antivirus, nel caso); potrebbe servire a qualcuno.

Giacomo

P.S. complimenti per la tua carriera e tanta invidia; T.I. è la mia azienda preferita nella componentistica, anche prima di Microchip.
Ho fatto qualche conto e ritengo che tu sia tra i 34 e i 40 anni; sbaglio di molto? tanto per non farmi gli affari miei :-)

00101010

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Hector
  • Avatar di Hector
  • New Member
  • New Member
Di più
10 Anni 11 Mesi fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Compilazione C->assembler illogica
Ciao Giacomo,

...vuol dire che prima delle 91 pagine non hai trovato nulla di interessante! :)

la mia eta' dipende da quando ho terminato l'universita'...
sbagliando ad indovinare quando ho finito, entrambi i margini potrebbero andare bene o meglio essere troppo limitanti.

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiStefA

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login