Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Salve, oggi scrivendo un operazione all'interno di una funzione destinata a risiedere su un AVR mi sono posto il problema se l'operatore di prorità sia un peso aggiunto all'esecuzione del calcolo, vi posto subito un esempio
Codice sorgente - presumibilmente C/C++ |
Codice sorgente - presumibilmente C/C++ |
Il risultato non varia, ma questa piccola modifica che ripercussioni ha a livello di assembly, le parentesi necessitano di cicli in piu oppure la conversione da C ad assembly rende le due operazioni identiche? Dipende dal assembler?
Grazie |
|
D@vide (Member)
Expert
Messaggi: 450
Iscritto: 30/06/2010
|
Ok immaginiamo un linguaggio a basso livello "fittizio" e poniamo
Codice sorgente - presumibilmente Plain Text |
MOV EAX, x
MOV EBX, y
MOV ECX, z
|
Come puoi vedere sia
Codice sorgente - presumibilmente C/C++ |
SUB EBX, ECX
SUB EAX, EBX
|
che
Codice sorgente - presumibilmente C/C++ |
SUB EAX, EBX
ADD EAX, ECX
|
sono praticamente equivalenti |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Ottimo, grazie mille, assembly non mi è mai piaciuto, è l'argomento che ho piu evitato in assoluto a lezione e non me ne pento in alcun modo XD
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Guarda che puoi misurare i cicli di clock impiegati dalla CPU. Se in futuro dovessi avere ancora di questi dubbi.
|
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
mhh ok devo andare a cercare il registro che conta i cicli allora. Grazie.
|
|
pierotofy (Admin)
Guru^2
Messaggi: 6230
Iscritto: 04/12/2003
|
La risposta breve è che dipende dal compilatore e da quanto intelligenti e aggressive sono le ottimizzazioni.
L'unico modo per poter essere sicuri è di disassemblare l'eseguibile risultante e vedere cosa è venuto fuori.
|
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Beh disassemblare è la cosa migliore, ma non la cosa più veloce per risolvere il tuo problema se è solo questione di ottimizzazione e di tempo impiegato.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6403
Iscritto: 03/01/2010
|
e non me ne pento in alcun modo XD |
e fai male ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Postato originariamente da nessuno:
e non me ne pento in alcun modo XD |
e fai male ... |
Ero sicuro che o tu o Piero sareste saltati su con qualcosa di simile XD Le mie basi di Assembly ci sono, diciamo solo che non ci ho dedicato tutto il tempo che ho dedicato ad un C, un C++ o un C#.
Si tratta di ottimizzazione, in questo periodo come detto in diversi post mi sto occupando di scrivere le librerie fondamentali per la gestione degli AVR quindi un ottimizzazione seria fatta a questo punto è d'obbligo, mi sono solo trovato davanti a questo dubbio, dora in poi opterò per il conteggio dei cicli, mi sembra un sistema semplice ed efficace almeno che non mi diciate che il disassembly sia una scelta nettamente superiore. |
|