BP + n

BP + n

de Leonardo Alfredo Levy Garrido -
Número de respuestas: 5

Hola, una pregunta, que es la n cuando se hace mov AX, [BP + n]? por ejemplo.

He visto mov AX, [BP +4] y no estoy seguro de que es lo que hace. Es que se esta moviendo 4 lugares desde donde esta BP hacia atraz?

Muchas gracias!

En respuesta a Leonardo Alfredo Levy Garrido

Re: BP + n

de Anthony Martin Cabrera Gonzalez -

Normalmente en los ejercicios de recursión que los parametros vienen en stack , el resultado debe ir en el stack y hay que conservar los registros se usa BP para acceder a los elementos del Stack (como memoria), en vez de push y pop.

Por ej:

Suponete esta pila:

*    IP         *   <-- SP

*    param2 *

*    param1 *

*    ////////// *

*    ////////// *

* * * * * * **

Si te fijas siempre se hace lo siguiente:

Push Bp

mov Bp, Sp

teniendo el resultado:

*    BP        *   <-- BP

*    IP         *

*    param2 *

*    param1 *

*    ////////// *

*    ////////// *

* * * * * * **

Si te fijas como cada elemento del stack ocupa 2 bytes, hay que avanzar de a 2. (se suma porque el stack crece al reves)

BP <- [BP]

Ip <- [BP + 2]

param2 <- [BP + 4]

param1 <- [BP + 6]

 

Entonces suponete que tenes que comparar el param1 con 1 (por poner un ejemplo).

podes o pasarlo a un registro

mov AX, [BP + 6]

cmp AX, 1

o compararar directamente

cmp word ptr [BP + 6] , 1      (el word ptr, es porque el parametro sabes que ocupa 2 bytes en el stack)

En respuesta a Anthony Martin Cabrera Gonzalez

Re: BP + n

de Leonardo Alfredo Levy Garrido -
En respuesta a Leonardo Alfredo Levy Garrido

Re: BP + n

de Leonardo Alfredo Levy Garrido -

Una pregunta más, como me doy cuenta cuando un elemento en el stack ocupa un byte o cuando ocupa dos bytes?

 

Gracias de nuevo!

En respuesta a Leonardo Alfredo Levy Garrido

Re: BP + n

de Anthony Martin Cabrera Gonzalez -

Push y Pop solo permiten registros de 16 bits (2 bytes) o Palabras de memoria (2 bytes), por tanto todo lo que haya en el stack, va a ocupar 2 bytes.