[2017][Diciembre][Problema 2]

[2017][Diciembre][Problema 2]

de Alexis Alfonso -
Número de respuestas: 4

En la solución al problema de assembler me genera duda la linea 

MOV BX, [BP + 6]

Entiendo que el fin es obtener el dato del nodo, pero no me queda claro por qué es +6 ya que la pila en ese momento la veo asi:

________

BP resp <<-- BP, IP

IP ret

Dato

Der

Izq

_______

Tiene que ver con qué los punteros se representan dentro del segmento ES como dice la letra?


gracias



En respuesta a Alexis Alfonso

Re: exam dic 2017 assembler

de Gustavo Brown -

Alexis,

  Creo que estás confundiendo lo que son parámetros de la función con el árbol que se debe recorrer. 

Los parámetros se encuentran en el stack. En particular en la solución el desplazamiento respecto de ES del nodo actual se encuentra en SS:[BP+6] puesto que:

 - BP apunta a BP

 - BP+2 a la dirección de retorno

 - BP+4 al chirimbolo 

Luego para acceder a los datos del nodo es cuando debes direccionar respecto a ES.

Saludos,

  Gustavo

En respuesta a Gustavo Brown

Re: exam dic 2017 assembler

de Alexis Alfonso -

Gracias Gustavo, creo que voy entendiendo. Pero no habrás querido decir que el chirimbolo pasado por parámetro se encuentra en SS:[BP + 4] en vez de +6 ?

porque cuando se llama a la función veo que primero hace push del árbol y luego push del chirimbolo. Es decir...

 - BP apunta a BP

 - BP+2 a la dirección de retorno

 - BP+4 al chirimbolo

 - BP + 6 al desplazamiento respecto de ES del nodo actual

Y por eso hace cmp BX, 0 para saber si "el nodo es NULL"

?


En respuesta a Alexis Alfonso

Re: exam dic 2017 assembler

de Gustavo Brown -

Si, Te puedo haber respondido considerando mal el orden de los parámetros porque no tengo la letra a mano y pensé que ese era el orden. 

Luego corrijo la respuesta de acuerdo al orden de los mismos  pero si el PUSH del árbol está primero y luego el del chirimbolo entonces es como decís. Lo importante de mi respuesta es que tengas presente que los parámetros de la función van al stack( que está en memoria en el segmento SS ) y el árbol en si también va a memoria pero no en el stack sino en otro segmento (en este caso en ES)

Saludos,

   Gustavo

Actualizacion: Quedó corregido el orden en la respuesta original