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 siCF = 0
yZF = 0
(sin signo arriba: sin acarreo y no igual) -
jg
salta siSF = OF
yZF = 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.