Instrucciones


Instrucciones de transferencia

Permiten el movimiento, carga y descarga de los registros. Es empleado para las instrucciones de asignación y para apilar y desapilar los registros de manera general o de forma individual.

Una pequeña descripción de las instrucciones de transferencia se muestra en la siguiente tabla.

Nombre Comentario Operación
MOV Mover (copiar) MOV Dest,Fuente
XCHG Intercambiar XCHG Op1,Op2
STC Set The Carry (pone Carry en 1) STC
CLC Clear Carry (pone Carry en 0) CLC
CMC Complementar Carry CMC
STD Saetear dirección STD
CLD Limpiar dirección CLD
STI Bandera de Interrupción en 1 STI
CLI Bandera de Interrupción en 0 CLI
PUSH Apilar en la pila PUSH Fuente
PUSHF Apila las Banderas PUSHF
PUSHA Apila los registros generales PUSHA
POP Desapila de la pila POP Dest
POPF Desapila a las Banderas POPF
POPA Desapila a los registros generales POPA
CBW Convertir Byte a Word CBW
CWD Convertir Word a Doble CWD
CWDE Convertir Word a Doble Extendido CWDE
IN Entrada IN Dest,Puerto
OUT Salida OUT Puerto,Fuente

Instrucciones aritméticas

Son las encargadas de la aplicación de operaciones a los datos. Como es de esperarse, las operaciones aritméticas son limitadas para el lenguaje ensamblador; la gran mayoría de instrucciones aritméticas, matemáticas, estadísticas y demás que vienen incorporadas en los lenguajes de alto nivel, son programadas en subrutinas (últimamente llamadas clases e instancias) que se basan en las instrucciones aritméticas presentadas en la siguiente tabla.

Nombre Comentario Operación
ADD Suma ADD Dest,Fuente
ADC Suma con acarreo ADC Dest,Fuente
SUB Resta SUB Dest,Fuente
SBB Resta con acarreo SBB Dest,Fuente
DIV División (sin signo) DIV Op
IDIV División entera con signo IDIV Op
MUL Multiplicación (sin signo) MUL Op
IMUL Multiplicación entera con signo IMUL Op
INC Incrementar INC Op
DEC Decrementar DEC Op
CMP Comparar CMP Op1,Op2
SAL Desplazamiento aritmético a la izquierda SAL Op,Cantidad
SAR Desplazamiento aritmético a la derecha SAR Op,Cantidad
RCL Rotar a la izquierda con acarreo RCL Op,Cantidad
RCR Rotar a la derecha con acarreo RCR Op,Cantidad
ROL Rotar a la izquierda ROL Op,Cantidad
ROR Rotar a la derecha ROR Op,Cantidad

Instrucciones lógicas

El conjunto de instrucciones lógicas se caracteriza por ser de fácil reconocimiento y aplicación. Regularmente están ligadas a un solo operador sobre el que se realiza la acción de la operación.

En la siguiente gráfica se observan las diferentes instrucciones lógicas del conjunto de instrucciones del lenguaje ensamblador.

Nombre Comentario Operación
NEG Negación (complemento a 2) NEG Op
NOT Invertir cada bit NOT Op
AND 'Y' (And) lógico AND Dest,Fuente
OR 'O' (Or) lógico OR Dest,Fuente
XOR 'O' (Or) exclusivo XOR Dest,Fuente
SHL Desplazamiento lógico a la izquierda SHL Op,Cantidad
SHR Desplazamiento lógico a la derecha SHR Op,Cantidad

Instrucciones de salto

Las instrucciones de salto se caracterizan porque el único operador que tienen es una posición de memoria en la cual debe continuar la ejecución de instrucciones si la condición del salto así lo establece. Son las más variadas dado que se utilizan para poder realizar macroinstrucciones del lenguaje de alto nivel como decisiones y ciclos, además de ser fundamentales para los procesos de creación de subrutinas y llamado a espacios de memoria.

Las instrucciones de salto se dividen en tres secciones: generales, salto sin signo o cardianles y salto con signo o enteras.

En las siguientes tablas se observa el conjunto de instrucciones de salto y una breve descripción de su aplicación:

Saltos generales

Nombre Comentario Operación
CALL Llamado a subrutina CALL Proc
JMP Saltar JMP Dest
JE Saltar si es igual JE Dest
JZ Saltar si es cero JZ Dest
JCXZ Saltar si CX es cero JCXZ Dest
JP Saltar si hay paridad JP Dest
JPE Saltar si hay paridad par JPE Dest
RET Retorno de subrutina RET
JNE Saltar si no es igual JNE Dest
JNZ Saltar si no es cero JNZ Dest
JECXZ Saltar si ECX es cero JECXZ Dest
JNP Saltar si no hay paridad JNP Dest
JPO Saltar si hay paridad impar JPO Dest

Saltos sin signo o cardinales

Nombre Comentario Operación
JA Saltar si es superior JA Dest
JAE Saltar si es superior o igual JAE Dest
JB Saltar si es inferior JB Dest
JBE Saltar si es inferior o igual JBE Dest
JNAE Saltar si no es superior o igual JNAE Dest
JNB Saltar si no es inferior JNB Dest
JNBE Saltar si no es inferior o igual JNBE Dest
JC Saltar si hay carry JC Dest
JNC Saltar si no hay carry JNC Dest

Saltos con signo o enteras

Nombre Comentario Operación
JG Saltar si es mayor JG Dest
JGE Saltar si es mayor o igual JGE Dest
JL Saltar si es menor JL Dest
JLE Saltar si es menor o igual JLE Dest
JNG Saltar si no es mayor JNG Dest
JNGE Saltar si no es mayor o igual JNGE Dest
JNL Saltar si no es inferior JNL Dest
JNLE Saltar si no es menor o igual JNLE Dest
JO Saltar si hay Overflow JO Dest
JNO Saltar si no hay Overflow JNO Dest
JS Saltar si hay Signo (=negativo) JS Dest
JNS Saltar si No hay Signo (=positivo) JNS Dest

Con este set de instrucciones es posible codificar y ensamblar todos los programas que se desarrollan en los lenguajes de alto nivel, se aplican indistintamente en los programas principales como en las subrutinas y los llamados a las interrupciones.

Instrucciones misceláneas

Este conjunto de instrucciones es igual de corto como de importante, las instrucciones descritas se requieren para la finalización de programas (Nop), para la carga de direcciones de memoria y para el llamado a las subrutinas denominadas interrupciones (INT).

La instrucción INT es de las más potentes, dado que incorpora una gran cantidad de subrutinas que permiten la interacción del usuario con el hardware, los recursos de E/S, de forma que se convierte en interfaz natural de comunicación entre el usuario, el sistema operativo y el hardware instalado.

Nombre Comentario Operación
NOP Hacer nada NOP
LEA Cargar dirección Efectiva LEA Dest,Fuente
INT Interrupción INT Num

Formato de instrucción

Una instrucción se caracteriza por establecer la acción que se debe desarrollar la cual se determina por el código de operación y los operandos sobre los cuales se realiza dicha acción. En general se puede establecer la siguiente estructura para las instrucciones con n operandos:

Código de operación Operando 1 Operando 2 Operando 3 Operando … Operando n

Sin embargo, es difícil encontrar operaciones con más de tres operandos. Las siguientes son algunas de las operaciones:

Código de operación Operando 1 Operando 2
Mov AX 05
Mov DX (0250)
Add AX BX
Inc DX