Este artículo está íntimamente relacionado con "Referencias de programación"
Aquí os dejo las instrucciones de ensamblador más usuales en procesadores x86.
Movimiento de Datos:
mov: Movimiento de datos: Funciona entre dos registros o entre memoria y registro (y viceversa). Mueve un dato del tamaño del registro implicado de un lugar a otro. En C sería equivalente a la "instrucción" =. (a = b)
Ejemplos:
mov al,[esi] mov ecx,num mov eax, -1
bswap: Binary swap Invierte los bytes de un int. El primer byte lo intercambia con el cuarto y el segundo con el tercerto. Muy útil para trasnformaciones de litle-big endian.
shr: Shift right. Desplazamiento binario a la derecha de x posiciones. Equivalente en C a >>
shl: Shift left. Desplazamiento binario a la izquierda de x posiciones. Equivalente en C a <<
Operaciones lógicas:
and: Realiza la operación lógica "y" entre los dos operandos. Si queréis saber algo más de la operación lógica "y" podéis mirar este link
xor: Realiza la operación lógica "suma exclusiva" entre los dos operandos. Si queréis saber algo más de la operación lógica xor podéis mirar este link
Operaciones aritméticas:
inc: Incrementa en un unidad el valor del registro que se le pase.(equivalente en C a ++)
dec: Decrementa en un unidad el valor del registro que se le pase. (equivalente en C a --)
add: Suma dos registros y guarda el resultado en el primero. (equivalente en C a +=)
sub: Resta dos registros y guarda el resultado en el primero. ( equivalente en C a -=)
Comparaciones:
cmp: Compara dos registros y setea los flags para que después se puedan hacer saltos condicionales(jz, jnz, jg,etc...) (equivalente en C a if)
test: Aplica la operación and entre dos registros, pero sin poner el valor del resultado, solo preparando los flags para que después se pueden realizar los saltos condicionales.
jz: Jump Zero. Salto condicional. Salta a la etiqueta que se le diga si la comparación anterior daba 0.
jnz: Jump No Zero. Salto condicional. Salta a la etiqueta que se le diga si la comparación anterior daba diferente de 0.
jg: Jump Greater. Salto condicional. Salta a la etiqueta que se le diga si la comparación anterior daba que el primer elemento era mayor.
je: Jump Equal. Salto condicional. Salta a la etiqueta que se le diga si la comparación anterior daba que los dos registros eran iguales.
jne: Jump No Equal. Salto condicional. Salta a la etiqueta que se le diga si la comparación anterior daba que los dos registros no eran iguales.
Otras:
jmp: Operación de salto. La ejecución de código continua en la etiqueta que se le pase como parámetro. ( equivalente en C al poco recomendable goto)
loop: Mientras que en el registro ecx tenga un valor diferente de 0, decrementa ecx y salta a la etiqueta que se le diga. Muy util para realizar bucle. Equivalente en C a while( (ecx--) > 0 ) {}
leave: Limpia todo lo que hayamos tocado en la función en la que estamos para que podamos volver a la función que nos ha llamado sin afectar al programa. Siempre se llama antes de hacer un ret
ret: Retorno de función. Equivalente al return de C
P.D: Si quereis también podeis mirar la siguiente lista que os podrá ayudar en vuestro estudio del ensamblador
0 comentarios :
Publicar un comentario