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.
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).
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.
Muy Bueno me sirvio mucho
ResponderEliminarMe alegra que te sirvan.
EliminarEstas 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