smart - Ejemplo de instrucción Assembly JLE jmp
smart contracts ethereum (4)
El ensamblado x86 usa un sistema de indicadores de bits que representan el resultado de las comparaciones. Las instrucciones de salto condicional usan estos indicadores al decidir si realizar el salto o no.
En tu caso, usarías las siguientes dos instrucciones:
cmp ebx, 10 ; compare EBX and 10
jle label ; jump if the previous comparison is "less than or equal"
…
label:
…
¿Cómo se usa la familia de instrucciones de salto ?
Esto es lo que tienen:
Etiqueta JL
"It" salta si es menor o si no es mayor o igual a.
Mi pregunta es ¿qué es esto en esta oración? Digamos que tengo una variable en ebx
y quiero saltar a la etiqueta there:
si ebx
es <= 10
.
Específicamente, estoy interesado en usar la familia de instrucciones de salto x86
El salto mismo verifica 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 los indicadores y el descarte del resultado. Normalmente se usa para cheques más grandes / más pequeños
- TEST corresponde al cálculo del AND binario de los operandos, actualizando las banderas y descartando el resultado. Normalmente se usa para verificaciones de igualdad.
Ver también: El arte del lenguaje ensamblador en CMP
Como nota al margen: Debería obtener los manuales de referencia de Intel . 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.
JB: trabaje con números sin signo (Saltar a continuación) <
JL: trabaja con números firmados
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
JLE
instrucción JLE
realmente prueba dos banderas a la vez:
- Bandera cero (
ZF
) - Llevar la bandera (
CF
)
Si las banderas de acarreo y cero son 1, entonces se ejecutará el salto relativo corto .
Tal vez solo una palabra sobre cómo funciona la instrucción CMP
. CMP
instrucción CMP
es como SUB
(restar), pero el registro de destino no se actualizará después de la ejecución. Entonces 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