es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo funciona el salto por encima en el formato de ensamblador de AT&T?

Si se trata de la versión AT&T de x86-64 (no Intel), supongo que solo cambia la dirección de origen y destino, pero de todos modos si escribo:

cmp %bx,%ax
ja label

Suponiendo que todos los números son sin signo, ¿qué significa exactamente “ja”? ¿Saltar si a>b o b>a? Porque todo se trata de CF y ZF (lo que significa sin acarreo o préstamo, y diferente de cero)?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    En la versión AT&T de x86-64, la sintaxis para comparar dos valores utilizando la instrucción cmp sigue el formato:

    cmp source, destination
    La comparación se realiza restando el origen del destino y configurando los indicadores según el resultado.

    La instrucción ja significa “jump if above” y se utiliza para realizar una comparación sin signo de dos valores y comprobar si el primer operando es mayor que el segundo. Si se cumple la condición, el control del programa se transfiere a la etiqueta especificada.

    En el ejemplo de código proporcionado, la instrucción cmp %bx,%ax compara los valores de los registros %bx y %ax. La instrucción ja se activa si el valor en %ax es mayor que el valor en %bx.

    Por lo tanto, en el contexto del código dado, la secuencia de instrucciones cmp %bx,%ax, seguida de ja label, realiza una comparación sin signo de los valores en %ax y %bx y salta a la etiqueta si %ax > %bx. Esto corresponde a la condición “a > b” como sugeriste correctamente.

Comments are closed.