Diferencias entre JA y JG, JB Y JS

Diferencias entre JA y JG, JB Y JS

de Maria Valentina Da Silva De Souza -
Número de respuestas: 3

JA no considera signo y JG considera singo.
En que me cambia esto cuando estoy compilando un codigo en assembler 8086, y utilizo estos saltos? Se comportan de manera diferente?

JB dice que no considera signo, JS hace lo mismo pero no dice si considera signo o no.
Todo esto lo saque de las notas del curso sobre 8086.

Agradezco si alguien me puede aclarar la duda.

Saludos.
En respuesta a Maria Valentina Da Silva De Souza

Re: Diferencias entre JA y JG, JB Y JS

de Gonzalo Tejera -
Hola. La idea de estos saltos condicionales es que a partir de una comparación (CMP) el nombre de la instrucción sea coherente con los que queres hacer.

O sea, tenes una expresión y querés saber si es verdadera o falsa, por ejemplo A<B? Vos como programador sabes A y B qué son, son enteros sin signo o con signo? Claramente para saber si es menor tenes que conocer el tipo de enteros que estas manipulando. 

Ahí es donde aparecen los saltos con y sin signo, dependiendo del tipo de las cosas que vos como programador estás manipulando.

Saludos, Gonzalo
En respuesta a Gonzalo Tejera

Re: Diferencias entre JA y JG, JB Y JS

de Maria Valentina Da Silva De Souza -
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.