Hola mi duda vino por un exámen que vi, aca pongo la letra:
(18 de febrero de 2009)
Problema 1
Sea G(n,s) la cantidad de formas distintas en que puede escribirse a n como suma de
enteros positivos menores o iguales a s. De esta manera G(n,1) = 1 ya que n =
1+1+...+1 (n veces), y esta es la única manera de expresar a n como suma de 1.
La cantidad de formas de sumar n con sumandos no mayores a s que no contienen ningún
sumando s, es G(n,s-1).
La cantidad de formas de sumar n dado que existe algún sumando s, y el resto de los
sumandos no son mayores a s y suman n-s, es G(n-s,s).
Por lo tanto G(n,s)=G(n,s-1)+G(n-s,s), sujeto a que G(n,1) = 1.
Se pide:
a) Compile la función G en 8086, pasando parámetros y resultado en el stack. Deben conservarse los valores de todos los registros.
b) Calcule el consumo de stack del código de la parte a) para la llamada G(5,5).
Y en la solución utiliza un salto con signo:
proc g
push bp ; guardo bp para conservar su valor
mov bp, sp ; apunto bp al tope del stack para acceder a los parámetros
push ax
push bx
cmp word ptr [bp+6], 0 ; comparo n con cero
jge elseN ; salto considerando el signo
mov ax, 0 ; si n<0 ajusto el retorno en ax
jmp fin
Cómo se da cuenta que acá tiene que considerar un salto con signo?
Porque esta preguntando si [bp+6] es menor que cero, entonces asume que [bp+6] y 0 tienen que estar en una representación con signo?
Fui a las notas del curso de microprocesador 8086 y no encontré este tipo de salto el que había era JNG, y saltaba si al hacer cmp a,b , si a<=b.
Agradezco si alguien me puede contestar la duda.
Saludos y gracias.