Deseamos darte la mejor respuesta que encontramos en línea. Nosotros esperamos que te resulte de utilidad y si quieres aportar algo que nos pueda ayudar a mejorar siente la libertad de hacerlo..
Solución:
LEA (dirección efectiva de carga) solo calcula la Dirección del operando, en realidad no lo desreferencia. La mayoría de las veces, solo se trata de hacer un cálculo como una combinación de multiplicar y sumar para, digamos, array indexación.
En este caso, está haciendo una simple resta numérica: leal -4(%ebp), %eax
solo asigna a la %eax
registrar el valor de %ebp - 4
. Es equivalente a un solo sub
instrucción, excepto una sub
requiere que el destino sea el mismo que uno de los orígenes.
los movl
instrucción, por el contrario, accede a la ubicación de la memoria en %ebp - 4
y almacena ese valor en %eax
.
Si desea ver esto en términos de un lenguaje de programación diferente, entonces:
int var;
[ ... ]
func (var, &var);
se evalúa como el siguiente código ensamblador (Linux x86_64):
[ ... ] 4: 8b 7c 24 0c mov 0xc(%rsp),%edi 8: 48 8d 74 24 0c lea 0xc(%rsp),%rsi d: e8 xx xx xx xx callq ...[ ... ]
Ya que %rdi
/ %rsi
son los 1S t / 2Dakota del Norte argumentos, puedes ver que lea ...
recupera el Dirección&var
de una variable, mientras que mov ...
carga/almacena el valorvar
de lo mismo.
Es decir, en el montaje, el uso de lea
en vez de mov
es similar a usar la dirección de &
operador en C/C++, no el (valor de) una variable en sí.
lea
tiene muchos más usos que eso, pero usted preguntó explícitamente sobre la diferencia entre los dos.
Por ilustracion: mov
con un operando de memoria siempre realiza un acceso a la memoria (cargar o almacenar), mientras que el operando de memoria para lea
se trata simplemente como aritmética de punteros – es decir, la dirección se calcula y resuelve, pero no se accede a la memoria en la instrucción misma. Estos dos:
lea 1234(%eax, %ebx, 8), %ecx
movl (%ecx), ecx
resulta lo mismo que:
movl 1234(%eax, %ebx, 8), %ecx
mientras que lo siguiente:
leal (%eax, %eax, 4), %eax
multiplica el valor de %eax
con cinco
Si posees algún reparo y capacidad de regenerar nuestro crónica puedes dejar una explicación y con deseo lo observaremos.