2010-12-29 13 views
9

¿Cómo se usa el jump family de las instrucciones?Montaje JLE Ejemplo de instrucción jmp

Esto es lo que tienen:

etiqueta JL
"Es" salta si es menor o si no es mayor que o igual a.

Mi pregunta es ¿cuál es que en esta frase? Supongamos que tengo una variable en ebx y quiero pasar a la etiqueta there: si ebx es <= 10.

Específicamente estoy interesado en utilizar la familia x86 salto de instrucciones

Respuesta

12

El salto en sí comprueba las banderas en el Registro EFL. Estos generalmente se establecen con TEST o CMP (o como un efecto secundario de muchas otras instrucciones).

CMP ebx,10 
JLE there 
  • CMP corresponde al cálculo de la diferencia de los operandos, la actualización de las banderas y descartar el resultado. Normalmente se utiliza para comprobaciones mayores/menores
  • PRUEBA corresponde al cálculo del AND binario de los operandos, actualizando los indicadores y descartando el resultado. Normalmente se usa para verificaciones de igualdad.

Consulte también: The art of assembly language on CMP

Como nota al margen: Usted debe obtener la Intel reference manuals. En particular, las dos partes "Manual de desarrollo de software Intel® 64 e IA-32 Architectures Software Volume 2: Instruction Set Reference" que describe todas las instrucciones x86.

+1

En este ejemplo, ¿JLE salto cuando 10 es menor o igual a EBX o salta cuando ebx es menor o igual a 10? –

+1

@AndersonGreen Salta cuando los contenidos del ebx son <= 10. – d0rmLife

3

El ensamblaje x86 usa un sistema de indicadores de bits que representan el resultado de las comparaciones. Las instrucciones de salto condicional utilizan estos indicadores al decidir si realizar el salto o no.

En su caso tendrá que utilizar las dos siguientes instrucciones:

cmp ebx, 10  ; compare EBX and 10 
jle label  ; jump if the previous comparison is "less than or equal" 
… 
label: 
… 
5

JLE instrucción realidad prueba dos banderas a la vez:

  • bandera Cero (ZF)
  • Carry bandera (CF)

Si las marcas Carry y Zero son 1, se ejecutará el salto relativo corto.

Tal vez solo una palabra cómo funciona CMP. CMP instrucción es como SUB (resta), pero el registro de destino no se actualizará después de la ejecución. Por lo tanto, el siguiente código realizará el mismo resultado, como CMP ebx, 10.Las instrucciones CMP y SUB afectan a los indicadores: Indicadores de carga, paridad, auxiliar, cero, signo y desbordamiento.

push ebx   //store ebx value to stack 
sub ebx, 10 
pop ebx   //restore ebx value from stack 
1

JB - trabajar con números sin signo (Ir abajo) <

JL - trabajar con números con signo

mov bx,0  // BX := 0 
cmp bx,FF // 0 < -1 or 0 < 255 (Jump Flag and Sign Flag will change) 
jl butter // if you use JL jump will not occurs, cus 0 > -1 
jb butter // if you use JB jump will occurs, cus 0 < 255