Codice: Seleziona tutto
int a, b;
void verificaesecuzione(void)
{
a = b + 1;
b = 0;
}Codice: Seleziona tutto
gcc -S -masm=intel testverifica.c -O2vedrai questo codice assemblycat testverifica.s
Codice: Seleziona tutto
mov eax, DWORD PTR b[rip]
mov DWORD PTR b[rip], 0
add eax, 1
mov DWORD PTR a[rip], eax
Codice: Seleziona tutto
mov eax, DWORD PTR b[rip] # leggi la variabile b nel registro eax
mov DWORD PTR b[rip], 0 #b = 0
add eax, 1 [b] # aggiunge 1 al registro eax
mov DWORD PTR a[rip], eax # a = b + 1b=0;
dovesse avere precedenza rispetto a
a = b + 1;
nonostante noi gli avessimo detto di fare il contrario.!
Questo è un piccolissimo esempio di come il compilatore cambia l'esecuzione delle istruzioni di un codice..
Bada bene, io non stò dicendo che hai torto, sto semplicemente dicendo che nessuno ci dà la certezza di come il compilatore stà codificando il codice! !!
P.S Yrag scusa per L'OT