y mi mayor problema es como esto se basa en las banderas CF y ZF?
Como dije en mi anterior mensaje, esto ya es un poco mas tecnico, de como funciona el lenguaje maquina o ensamblador, todo este tema es demasiado extenso como para explicartelo en unas cuantas lineas, tratare de resumirte lo importante respecto a las banderas CF y ZF.
Para empezar respecto a las banderas, el 0 se considera como falso, y el 1 coimo verdadero.
CF = Carry Flag, Bandera de acarreo, esta bandera cambia a 1 si hay acarreo (verdadero), 0 si no hay acarreo (falso).
ZF = Zero Flag, Bandera de cero, esta bandera cambia a 1 si el resultado de la operacion da cero (verdadero) o un valor diferente de cero (Falso).
Ahora cuando comparas dos valores, es como si hicieras una resta, entonces dependiendo del resultado de esa resta, las banderas cambiaran.
Regresando al ejemplo anterior, si por ejemplo comparas el 3 con el 2 y haces la resta (en binario):
11-10=01.
Como puedes ver, el resultado no produjo un acarreo (porque estamos restando un valor mayor a uno menor), por lo tanto el CF = 0
El resutado de la resta tampoco fue cero como puedes ver el resultado fue uno, por lo tanto ZF = 0
Esi significa que entonces el resultado es mayor que, y como puedes ver quedo perfectamente comprobado por las banderas CF = 0 Y ZF = 0.
Si comparas 2 y 2 obtienes:
10 - 10 = 00
En este caso, el reslutado no produjo un acarreo tampoco (porque estamos restando valores iguales), por lo tanto el CF = 0
Pero, el resutado de la resta en este caso fue cero, por lo tanto ZF = 1
Entonces como puedes ver se determina que los numero son iguales cuando CF = 0 y ZF = 1, entonces el JA no funciona en este caso.
Bueno, es lo mejor que te puedo explicar sin extenderme demasiado, pero el resto de saltos (JAE, JE, etc) funciona de manera parecida.
Saludos