¿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)?
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 deja 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.