quando si compila l'istruzionegas: troppi memoria di riferimento
movl 4(%ebp), 8(%ebp)
ho ottenuto 'troppi memoria referene', cosa c'è che non va ??
quando si compila l'istruzionegas: troppi memoria di riferimento
movl 4(%ebp), 8(%ebp)
ho ottenuto 'troppi memoria referene', cosa c'è che non va ??
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)
Non è un'istruzione legale. Per la maggior parte delle istruzioni che fanno riferimento alla memoria, è necessario spostarlo su/da un registro.
movl
non si sposta in memoria, è necessario passare attraverso un registro (quindi con due istruzioni movl
).
grazie, ma perché questo? è l'architettura della CPU che limita questo o qualcos'altro? – freenight
Sì, è una limitazione nella CPU. MOVS è l'unica istruzione da memoria a memoria. –
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). –