sábado, 24 de noviembre de 2012

Lista de instrucciones de ensamblador ASMx86 más usadas.

Artículo perteneciente al curso de ensamblador

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




 A medida que vaya desarrollando el curso y poniendo más ejemplos iré rellenando esta lista. Si creéis que falta alguna instrucción importante decirlo.

P.D: Si quereis también podeis mirar la siguiente lista que os podrá ayudar en vuestro estudio del ensamblador

LordPakusBlog


0 comentarios :

Publicar un comentario

Entradas populares