Taller 10 [Duda]

Taller 10 [Duda]

de Juan Sebastian Korenko Crisera -
Número de respuestas: 2
No me quedo del todo claro si cuando el arbol no tenia dato, lo podemos considerar como que es un NULL. Tampoco me queda del todo claro que es lo que hay qye devolver en AX. Supongo que 0 o 1 dependiendo si es true or false no?

Otra duda que me genera es si puedo usar libremente los Registros que precise sin necesidad de salvar los datos que tenian previamente de invocar la funcion.

Asi es mas o menos como lo pense yo:

PUSH arbol
PUSH 0 (indice)
PUSH valor
CALL buscarABB
POP AX -> resultado


buscarABB proc
POP DX; saco dir retorno
POP AX; saco valor buscado
POP DI; saco el indice
POP BX; saco el arbol
PUSH DX; restauro dir retorno
CMP byte ptr ES[BX+DI], -1
JE noEncontrado
CMP byte ptr ES[BX+DI], byte ptr AX
JE encontrado
ADD DI,DI
INC DI
JA menor
PUSH BX; es mayor: Coloco arbol
INC DI
PUSH DI; Coloco nuevo indice
PUSH AX; Coloco Valor
CALL buscarABB
POP CX; guardo el resultado en CX
JMP fin

menor:
PUSH BX
PUSH DI
PUSH AX
CALL buscarABB
POP CX
JMP fin

encontrado:
MOV CX 1; bool = 1
JMP fin

noEncontrado:
MOV CX 0; bool = 0
JMP fin

fin:
POP DX
PUSH CX
PUSH DX
ret
buscarABB endp

Esta bien asi o hay algun error que no me doy cuenta.

El consumo del error me queda bastante bajo porque en el stack me van quedando las IP recursivamente y los datos que esta utlizando en ese momento

Gracias

En respuesta a Juan Sebastian Korenko Crisera

Re: Taller 10 [Duda]

de Gonzalo Tejera -
Hola.

En AX no hay que devolver nada, el resultado (boolean) se devuelve en el stack, en el ejemplo solo para ilustrar el uso de la función se extrae del stack y se coloca en AX.

Errores importantes:
- no estas multiplicando el índice por el tamaño del nodo antes de acceder a la estructura.


Comentarios:
- ptr sólo se usa para operandos en modo directo o indirecto.
- no entiendo "No me quedo del todo claro si cuando el arbol no tenia dato, lo podemos considerar como que es un NULL", se usar -1 como centinela para marcar que no tiene hijos por esa rama.
- si bien en este caso funciona, el dato del nodo es un entero con signo por lo que deberías usar los saltos condicionales con signo.

Saludos, Gonzalo