assembly x86 conditional-statements

assembly - Diferencia entre JA y JG en montaje.



x86 conditional-statements (2)

Como lo explica el manual de Intel , JG interpreta los indicadores como si la comparación estuviera firmada, y JA interpreta los indicadores como si la comparación no estuviera firmada (por supuesto, si la operación que estableció los indicadores no fue una comparación o una resta, eso puede no tener sentido) . Así que sí, son diferentes. Para ser preciso,

  • ja salta si CF = 0 y ZF = 0 (sin signo arriba: sin acarreo y no igual)
  • jg salta si SF = OF y ZF = 0 (firmado Mayor, excluyendo igual)

Por ejemplo,

cmp eax, edx ja somewhere ; will go "somewhere" if eax >u edx ; where >u is "unsigned greater than" cmp eax, edx jg somewhere ; will go "somewhere" if eax >s edx ; where >s is "signed greater than"

>u y >s están de acuerdo con los valores con el bit superior cero, pero los valores con el bit superior establecido se tratan como negativos por >s como grandes por >u (por supuesto, si ambos operandos tienen el bit superior establecido, >u y >s acuerdo otra vez).

¿Podría decirme la diferencia entre SALTAR SI ARRIBA Y SALTAR SI ES MAYOR en lenguaje ensamblador? ¿Cuándo uso cada uno de ellos? ¿Me dan resultados diferentes?


JA se usa para saltar si la última instrucción de "cambio de bandera" estaba en números sin firmar. pero, por otro lado, JG se usa para saltar si la última instrucción de "cambio de bandera" estaba en números firmados.