al compilar la instrucciónde gas: Referencia demasiados memoria
movl 4(%ebp), 8(%ebp)
Tengo 'demasiados referene memoria', lo que está mal con ella ??
al compilar la instrucciónde gas: Referencia demasiados memoria
movl 4(%ebp), 8(%ebp)
Tengo 'demasiados referene memoria', lo que está mal con ella ??
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)
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.
movl
no se mueve a la memoria de memoria, tiene que pasar por un registro (por lo tanto, con dos instrucciones movl
).
gracias, pero ¿por qué esto? ¿Es la arquitectura de la CPU que limita esto o algo más? – freenight
Sí, es una limitación en la CPU. MOVS es la única instrucción de memoria a memoria. –
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). –