EJERCICIO 1 - PRACTICO 10

EJERCICIO 1 - PRACTICO 10

de Usuario eliminado -
Número de respuestas: 2

Hola, 

yo resolvi el problema de esta forma y creo que funciona. 

Me queda la duda si es la mejor forma de resolverlo. 

A alguien le quedo muy diferente?? 

Espero la respuesta.

Saludos. 

-------------------------------------------------------------------

XOR BX, BX

FIB PROC

CMP AX, 0x0
JE FIN_CERO

CMP AX, 0x01
JE FIN_UNO

DEC AX
PUSH AX
DEC AX

CALL FIB

POP AX

CALL FIB

RET

FIN_CERO:
ADD BX, 0
RET

FIN_UNO:
ADD BX, 1
RET

En respuesta a Usuario eliminado

Re: EJERCICIO 1 - PRACTICO 10

de Usuario eliminado -

Ejercicio 1 (Básico)
Dada la secuencia de naturales S(0), S(1), ..., S(N), ... definida por la relación:
S(N) = S(N-1) + S(N-2). Siendo S(0)=0 y S(1)=1.
Se pide:
(a) Escribir en un lenguaje de alto nivel una función recursiva F(N) tal que
F(N)=S(N).
(b) Compilar la rutina en assembler 8086. El argumento se pasa en el registro AX y
el valor de la función se devuelve en el registro BX.
(c) Calcular la cantidad de bytes mínima que debe tener el stack para que sea
posible la ejecución de la función en el caso N=5.

En respuesta a Usuario eliminado

Re: EJERCICIO 1 - PRACTICO 10

de Anthony Martin Cabrera Gonzalez -

XOR BX, BX

FIB PROC

CMP AX, 0x0
JE FIN_CERO

CMP AX, 0x01
JE FIN_UNO

DEC AX
PUSH AX
DEC AX

CALL FIB

; En este momento BX tiene el resultado de S(n - 2)

; el tema es que en el proximo CALL FIB, estas pisando BX, con el nuevo valor es decir el de S(n - 1), tendrías que guardar S(n - 2) antes de la llamada

; ej: guardando S(n - 2) en CX

mov CX, BX

POP AX

CALL FIB

; En este momento BX tiene el valor de S(n-1)

; Está faltando sumar BX:= S(n - 1) + S(n - 2) ?

; es decir, BX:= BX + CX

ADD BX, CX

RET

FIN_CERO:
ADD BX, 0
RET

FIN_UNO:
ADD BX, 1
RET