Compilazione C->assembler illogica
- Hector
-
Autore della discussione
- Nuovo Utente
-
Less
Di più
11 Anni 3 Mesi fa #1
da Hector
00101010
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
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 Accesso o Crea un account a partecipare alla conversazione.
11 Anni 3 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
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
I seguenti utenti hanno detto grazie : Hector
Si prega Accesso o Crea un account a partecipare alla conversazione.
11 Anni 3 Mesi fa #3
da Hector
00101010
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

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 Accesso o Crea un account a partecipare alla conversazione.
11 Anni 3 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
...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 Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Strana anomalia LT lib module_EEPROM
- da marcoilgrande
-
- Nuova versione Kicad 9
- da Mauro Laurenti
-
- MODULO GSM SIM900A
- da embedded
-
- Freedom III e compilazioni fallite
- da Black
-
- LTerminal - nuove funzioni
- da Mauro Laurenti