2012-02-18 25 views
9

tengo la siguiente instrucción:Asamblea - instrucción JZ después CMP

cmp al, 1 
jz mub 

Cuando es al 2 (10 en binario). ¿Qué haría esta instrucción? Como sé, puedo usar JE, JNE, JA, etc., pero ¿qué significa jz after cmp instruction?

Gracias

+0

jz = je, es la misma instrucción. –

Respuesta

16

jz es "saltar si es cero". cmp resta sus dos operandos, y establece indicadores en consecuencia. (Consulte here para referencia.)

Si los dos operandos son iguales, la resta dará como resultado cero y se establecerá el indicador ZF.

Por lo tanto, en su muestra, el salto se tomará si al fuera 1, no tomado de otra manera.

3

jz significa salto si es cero. En este contexto, solo saltará si al fue 1.

Eso es porque cmp es generalmente equivalente a sub (resta) pero sin cambiar realmente el valor.

cmp al, 1 establecerá los indicadores del procesador (incluido el indicador de cero) en función de lo que hubiera sucedido si hubiera restado 1 de al.

Si al es 2, no se tomará el salto (porque no se ha establecido el indicador de cero) y el código continuará ejecutándose en las instrucciones siguientes al jz.

Como acotación al margen, jz es a menudo la misma código de operación como je ya que en la práctica significaría lo mismo. Véase por ejemplo el Wikipedia page on x86 control flow:

Saltar sobre cero
jz loc
Cargas EIP con la dirección especificada, si el bit cero se establece a partir de una expresión aritmética anterior. jz es idéntico a je.

1

'Jump Zero' - salta a la etiqueta 'mub' si se establece el indicador de cero. 'cmp' es un resta que solo establece flags & así que, si al es 2, (2-1) <> 0 entonces el indicador de cero es claro y el salto no se realizará.