2010-03-28 7 views

Respuesta

6

El número anterior al paréntesis es un desplazamiento de bytes (que hace que se produzca una referencia de memoria), y no puede tener dos de ellos con movl. Primero debe mover el valor temporalmente a un registro.

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

No es una instrucción legal. Para la mayoría de las instrucciones que hacen referencia a la memoria, debe moverla a/desde un registro.

2

movl no se mueve a la memoria de memoria, tiene que pasar por un registro (por lo tanto, con dos instrucciones movl).

+1

gracias, pero ¿por qué esto? ¿Es la arquitectura de la CPU que limita esto o algo más? – freenight

+2

Sí, es una limitación en la CPU. MOVS es la única instrucción de memoria a memoria. –

+2

Sí, la memoria a la memoria simplemente no se puede implementar de manera eficiente (las CPU que no son x86 tienden a tener todas las instrucciones solo para registrarse, con load/store como las únicas de registro en la memoria). –