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
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
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.
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.
'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á.
jz = je, es la misma instrucción. –