2010-03-28 10 views

risposta

6

Il numero prima della parentesi è uno scostamento di byte (che causa un riferimento di memoria) e non è possibile averne due con movl. È necessario spostare temporaneamente il valore su un registro.

movl 4(%ebp), %ecx 
movl %ecx, 8(%ebp) 
2

Non è un'istruzione legale. Per la maggior parte delle istruzioni che fanno riferimento alla memoria, è necessario spostarlo su/da un registro.

2

movl non si sposta in memoria, è necessario passare attraverso un registro (quindi con due istruzioni movl).

+1

grazie, ma perché questo? è l'architettura della CPU che limita questo o qualcos'altro? – freenight

+2

Sì, è una limitazione nella CPU. MOVS è l'unica istruzione da memoria a memoria. –

+2

Sì, memoria-a-memoria non può essere implementata in modo efficiente (le CPU non x86 tendono ad avere tutte le istruzioni solo registrarsi per registrarsi, con carico/archivio come unici da registro a memoria). –