Oppure

Loading
29/09/14 16:57
Roby94
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
return x - (y - z);

return x - y + z;

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
aaa
29/09/14 17:30
D@vide
Ok immaginiamo un linguaggio a basso livello "fittizio" e poniamo
MOV EAX, x
MOV EBX, y
MOV ECX, z


Come puoi vedere sia
SUB EBX, ECX
SUB EAX, EBX


che
SUB EAX, EBX
ADD EAX, ECX


sono praticamente equivalenti
aaa
29/09/14 18:56
Roby94
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
aaa
29/09/14 19:17
TheDarkJuster
Guarda che puoi misurare i cicli di clock impiegati dalla CPU. Se in futuro dovessi avere ancora di questi dubbi.
aaa
29/09/14 19:50
Roby94
mhh ok devo andare a cercare il registro che conta i cicli allora. Grazie.
aaa
29/09/14 20:20
pierotofy
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.
Il mio blog: piero.dev
29/09/14 20:23
TheDarkJuster
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.
aaa
29/09/14 20:32
nessuno
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à.