Ejercicio 3 Práctico 8

Ejercicio 3 Práctico 8

de Rafael Carlos Cordano Ottati -
Número de respuestas: 1

Buenas tardes.

Estoy trabajando en la parte b del Ejercicio 3, Práctico 8 y tengo el problema que el stack me queda desbalanceado, me darían una mano? Gracias

.data  ; Segmento de datos

.code  ; Segmento de código

;datos prueba

MOV AX, 0x1331 ;entero a buscar

MOV BX, 0x0000 ;puntero al árbol

MOV CL, 0x00


MOV DX, 0x300

MOV ES, DX


;elemento1, root


MOV word ptr ES:[BX], 0xCAFE ;short dato, 2B

MOV byte ptr ES:[BX+2], 1 ; unsigned char hijoIzq

MOV byte ptr ES:[BX+3], 2 ; unsigned char hijoDer


;elemento2


MOV word ptr ES:[BX+4], 0x1234 ;short dato, 2B

MOV byte ptr ES:[BX+6], -1 ; unsigned char hijoIzq

MOV byte ptr ES:[BX+7], -1 ; unsigned char hijoDer


;elemento3


MOV word ptr ES:[BX+8], 0x1331 ;short dato, 2B

MOV byte ptr ES:[BX+10], 0xff ; unsigned char hijoIzq

MOV byte ptr ES:[BX+11], 0xff ; unsigned char hijoDer


MOV word ptr ES:[BX+12], 0x00 ; bug de arquisim?, si no hago esto no se escribe 0xffff en 10 y 11


;resultado se guarda en CL. 1 true, 0 false

;el árbol se encuentra cargado a memoria a partir de ES:0x0000


CALL buscarElementoArbol

JMP end


buscarElementoArbol proc

CMP BL, -1 ; puntero a null

JNE casoRecursivo

RET


casoRecursivo:

POP DX ; respaldo IP


PUSH DI

MOV DI, BX

ADD DI, DI

ADD DI, DI


CMP ES:[DI], AX ; arbol_aux.dato == elemento


JE casoIgual


MOV BX, 0x00

MOV BL, ES:[DI+2] ; actualizo puntero para ir a hijoIzq (BX y BX+1 lo ocupa dato)


CALL buscarElementoArbol


POP DI


MOV BL, ES:[DI+3] ; actualizo puntero para ir a hijoDer (BX y BX+1 lo ocupa dato)

CALL buscarElementoArbol


PUSH DX


RET


casoIgual:

POP DI ; cuidado

OR CL, 0x01

RET


RET


buscarElementoArbol endp


end:


.ports ; Definición de puertos

; 200: 1,2,3  ; Ejemplo puerto simple

; 201:(100h,10),(200h,3),(?,4)  ; Ejemplo puerto PDDV


.interrupts ; Manejadores de interrupciones

; Ejemplo interrupcion del timer

;!INT 8 1

;  iret

;!ENDINT