PDA

View Full Version : [Assembler]E' più efficiente LEA o MOV offset?


demonbl@ck
03-06-2010, 20:09
Ciao a tutti, sto iniziando a programmare qualcosina in assembler per portarmi avanti col programma di sistemi, e già che ci sono vorrei scriverlo il più ottimizzato possibile, poi lo avvio sul 486 e osservo l'esplosione :O

Ho letto che LEA dx,stringa è meno efficiente di MOV dx,OFFSET stringa, perchè quest'ultimo usa una costante mentre il LEA il valore se lo deve calcolare.

E' vero?

cdimauro
03-06-2010, 21:36
Entrambe le istruzioni dovrebbero richiedere 1 ciclo di clock sul 486, per cui la risposta è negativa.

La LEA sulla carta dovrebbe eseguire il calcolo dell'indirizzo, ma in realtà questo è deputato a un ben preciso stadio della pipeline, per cui puoi considerarlo "gratuito".

rеpne scasb
03-06-2010, 23:14

demonbl@ck
04-06-2010, 00:52
Entrambe le istruzioni dovrebbero richiedere 1 ciclo di clock sul 486, per cui la risposta è negativa.

La LEA sulla carta dovrebbe eseguire il calcolo dell'indirizzo, ma in realtà questo è deputato a un ben preciso stadio della pipeline, per cui puoi considerarlo "gratuito".

MOV utilizza un byte in meno rispetto a LEA (5 contro 6), e' quindi un'istruzione piu' compatta rispetto a LEA (miglior utilizzo della cache). Usa quindi MOV (tranne per addizioni e shift).

Ok, se ho capito bene a livello di cicli di clock su cpu 486+ non cambia niente, però mov usa un byte in meno in memoria.

Corretto?

cdimauro
04-06-2010, 08:14
Sì.