Ubicación de memoria de Ensamblador Básico
¿Son las siguientes lo mismo?
add eax, 2
mov [eax+2], ebx
vs
mov [eax+4], ebx
¿Es correcto decir que:
Suponiendo que el valor inicial almacenado en eax
sea 0x40000050, ambos resultados escribirán el valor almacenado en ebx
en la dirección de memoria 0x40000054? ¿O [eax+2]
y [eax+4]
se refieren a ubicaciones diferentes?
davy.ai
No, no son exactamente iguales.
La primera instrucción
add eax, 2
sumará el valor 2 al valor almacenado actualmente en el registroeax
. Así que suponiendo queeax
inicialmente tenga el valor0x40000050
, después de esta instruccióneax
tendrá el valor0x40000052
.La segunda instrucción
mov [eax+2], ebx
moverá el valor del registroebx
a la dirección de memoria señalada por la expresión[eax+2]
. Dado queeax
ahora tiene el valor de0x40000052
, esta instrucción moverá el valor enebx
a la dirección de memoria0x40000054
.Por otro lado, la instrucción
mov [eax+4], ebx
moverá el valor del registroebx
a la dirección de memoria señalada por la expresión[eax+4]
. Dado queeax
todavía tiene el valor original de0x40000050
, esta instrucción moverá el valor enebx
a la dirección de memoria0x40000054
en su lugar.Por lo tanto, las dos instrucciones tienen efectos diferentes, ya que escriben en direcciones de memoria distintas.