miércoles, 23 de mayo de 2012

Lista de instrucciones de ensamblador x86

Articulo perteneciente a : Referencias de programación

Si os interesa el tema del ensamblador podéis mirar el siguiente link

Hola a todos,

Esta lista intenta ser una referencia rápida para todos aquellos que os habéis adentrado (o queréis hacerlo) en el mundo de la programación en ASM. No esperéis encontrar todas las instrucciones, ya que las mas "peligrosas" y las menos usuales las he filtrado.

Por ahora no tengo planificado ningún tutorial de ASM x86 pero si me lo pedís unos cuantos , lo hago.

Movimiento de datos

MOV dest,src Copia el contenido del src en el dest. src y dest pueden ser registros, memoria,etc...
PUSH src Pone src arriba de todo de la pila.
POP dest  Retira el valor de arriba de la pila poniéndolo en dest(registro,memoria,etc...)
XCHG reg,{reg|mem} Intercambia ambos valores. (los dos no pueden ser memoria)
LEA reg,mem Almacena el "puntero" a memoria en un registro. Más información sobre punteros
PUSHF Almacena los flags en la pila.
POPF Pone en los flags el valor que hay en la pila.

Operaciones aritmeticas

ADD dest,src Suma
SUB dest,src Resta
CMP dest,src Compara ambos valores y modifica los flags en consecuencia.
INC dest  Operación dest++;
DEC dest Operación dest--;
MUL {reg|mem}  Multiplica el valor del registro A por el operador que le pasemos poniendo el resultado en A ( y parte en el registro si le fuera necesario)
IMUL {reg|mem} Lo mismo que antes pero usando signo en las operaciones.

Instrucciones lógicas

AND dest,src
TEST dest,src Lo mismo que and pero solamente afecta a los flags. Se acostumbra a usar para comprovar máscaras de bits sin modificar los valores de trabajo.
OR dest,src
XOR dest,src
NOT dest
SHL/SAL dest,número de bits Desplaza a la izquierda x bits.  Logico/Aritmetico
SHR/SAR dest,número de bits Desplaza a la derecha x bits. Logico/Aritmetico
ROL dest,número de bits Rotación hacia la izquierda
ROR dest,número de bits Rotación hacia la derecha

Instrucciones de salto

JMP label Saltar hacia la dirección label.
CALL label Es como hacer una llamada a función desde ASM
RET Retorno de procedimiento.

Saltos condicionales después de CMP


Con signo
JL etiqueta/JNGE etiqueta  Saltar a etiqueta si es menor.
JLE etiqueta/JNG etiqueta  Saltar a etiqueta si es menor o igual.
JE etiqueta   Saltar a etiqueta si es igual.
JNE etiqueta Saltar a etiqueta si es distinto.
JGE etiqueta/JNL etiqueta Saltar a etiqueta si es mayor o igual.
JG etiqueta/JNLE etiqueta Saltar a etiqueta si es mayor.

Sin signo 
JB etiqueta/JNAE etiqueta Saltar a etiqueta si es menor.
JBE etiqueta/JNA etiqueta Saltar a etiqueta si es menor o igual.
JE etiqueta Saltar a etiqueta si es igual.
JNE etiqueta Saltar a etiqueta si es distinto.
JAE etiqueta/JNB etiqueta Saltar a etiqueta si es mayor o igual.
JA etiqueta/JNBE etiqueta Saltar a etiqueta si es mayor.


Saltos condicionales según flags (después de cualquier operación)
JZ label        Saltar si el resultado es cero (ZF = 1).
JNZ label      Saltar si el resultado no es cero (ZF = 0).
JS label         Saltar si el signo es negativo (SF = 1).
JNS label       Saltar si el signo es positivo (SF = 0).
JP/JPE label   Saltar si la paridad es par (PF = 1).
JNP/JPO label Saltar si la paridad es impar (PF = 0).


Saltos especiales (usan CX)
LOOP label  CX-- Saltar a label si CX<>0.
LOOPZ/LOOPE label CX--. Saltar a label si CX <> 0 y ZF = 1.
LOOPNZ/LOOPNE label CX--. Saltar a label si CX <> 0 y ZF = 0.
JCXZ label  Salta a label si CX = 0.
Con estas instrucciones podréis hacer casi cualquier programa en ensamblador, espero que os sirvan.

Nos vemos

LordPakusBlog

2 comentarios :

  1. Respuestas
    1. Me alegra que te sirvan.
      Estas instrucciones son las básicas y te permiten hacer casi cualquier cosa, no obstante si te gusta el tema te recomiendo que te mires instrucciones vectoriales como las SSE, disfrutarás aprendiendo como funcionan

      Eliminar

Entradas populares