• Jueves 28 de Marzo de 2024, 23:42

Autor Tema:  SObre INstruccion JA  (Leído 4045 veces)

RHL

  • Nuevo Miembro
  • *
  • Mensajes: 23
  • Nacionalidad: 00
  • In the Inside...
    • Ver Perfil
SObre INstruccion JA
« en: Martes 10 de Enero de 2012, 05:59 »
0
Buenas :)
Pues tengo problemas con entender como funciona la instruccion JA
Hay! informacion sobre JA pero no la entiendo muy bien :P

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:SObre INstruccion JA
« Respuesta #1 en: Martes 10 de Enero de 2012, 18:15 »
0
Es simple JA es el nemonico de Jump if Above, que seria el equivalente a mayor que.

Se ocupa despues de hacer una comparacion, es decir, tu comparas dos valores (CMP) y si el valor del primer operando es mayor al segundo operando hace el salto a la etiqueta (direccion) indicada.

Ejemplo:
Código: [Seleccionar]
;Compara AX y BX
CMP AX, BX
;Si AX es mayor, salta a etiqueta1, si no sigue la ejecucion sin saltar
JA Etiqueta1
;Esto se ejecuta si no salta
ADD AX, 1
Etiqueta1:
ADD BX, 1

Es Facil ves? Ahora si necesitas ser mas tecnico te dire que cada ves que comparas, el registro de banderas (flag) cambia el valor de sus bits, dependiendo del resultado de la comparacion, entonces cuando haces JA lo que hace es comparar si el registro CF y el ZF son igual a cero para determinar si el numero es mayor.

Espero que con eso te quede mas claro como funciona.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

RHL

  • Nuevo Miembro
  • *
  • Mensajes: 23
  • Nacionalidad: 00
  • In the Inside...
    • Ver Perfil
Re:SObre INstruccion JA
« Respuesta #2 en: Martes 10 de Enero de 2012, 18:41 »
0
Gracias ProfesorX e buscado informacion y me muestra esto:

Citar
Después de una comparación este comando salta si está arriba o salta si no está abajo o si no es igual.

Esto significa que el salto se realiza solo si la bandera CF esta desactivada o si la bandera ZF esta desactivada (que alguna de las dos sea igual a cero).

y mi mayor problema es como esto se basa en las banderas CF y ZF? :/ pero creo que ya voy entendiendo con lo que me escribiste gracias amigo :)

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:SObre INstruccion JA
« Respuesta #3 en: Martes 10 de Enero de 2012, 20:15 »
0

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 :)


NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

RHL

  • Nuevo Miembro
  • *
  • Mensajes: 23
  • Nacionalidad: 00
  • In the Inside...
    • Ver Perfil
Re:SObre INstruccion JA
« Respuesta #4 en: Martes 10 de Enero de 2012, 20:23 »
0
 :kicking: Gracias man! tema resuelto!  :smartass: