Resumen de las instrucciones del 8086/8088
Resumen de las instrucciones del 8086/8088
Resumen de las instrucciones del 8086/8088
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong><br />
En este capítulo se hace un resumen <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong>. Estas<br />
<strong>instrucciones</strong> se encuentran explicadas más <strong>de</strong>talladamente en otro capítulo. Se pue<strong>de</strong><br />
consultar más en [PA01], [Rod00], [PCG00], [Ray00] y [Ter00].<br />
Operaciones aritméticas y lógicas<br />
Estas <strong>instrucciones</strong> son realizadas por la ALU <strong>de</strong> la máquina. Las po<strong>de</strong>mos consi<strong>de</strong>rar<br />
agrupadas en varios tipos:<br />
Operaciones puramente aritméticas<br />
A este apartado pertenecen aquel<strong>las</strong> <strong>instrucciones</strong> que realizan operaciones aritméticas<br />
con los operandos, como suma, resta, etc. Alteran <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado.<br />
Instrucción Función<br />
ADC Sumar dos operandos y añadir el acarreo.<br />
ADD Sumar dos operandos sin añadir el acarreo.<br />
DEC Decrementa operando en 1.<br />
DIV División sin signo.<br />
IDIV División consi<strong>de</strong>rando los signos <strong>de</strong> los operandos.<br />
IMUL Multiplicación consi<strong>de</strong>rando los signos <strong>de</strong> los operandos.<br />
INC Incremeta el operando en 1.<br />
MUL Multiplicación sin consi<strong>de</strong>rar los signos.<br />
NEG Cambiar el signo <strong>de</strong>l operando.<br />
SBB Resta añadiendo el acarreo.<br />
SUB Resta sin acarreo.<br />
Operaciones puramente lógicas<br />
A este apartado pertenecen aquel<strong>las</strong> <strong>instrucciones</strong> que realizan operaciones a nivel <strong>de</strong> bit<br />
(operaciones <strong>de</strong> tipo lógica o <strong>de</strong> aritmética binaria) con los operandos. Al igual que <strong>las</strong><br />
anteriores, alteran <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado.<br />
Instrucción Función<br />
AND Realiza un lógico.<br />
NOT Realiza un lógico.<br />
OR Realiza una lógica.<br />
XOR Realiza una exclusiva .<br />
1
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
Operaciones <strong>de</strong> manejo <strong>de</strong> bits<br />
Pertenecen a este apartado aquel<strong>las</strong> <strong>instrucciones</strong> que realizan traslaciones (rotaciones)<br />
con los bits <strong>de</strong>l operando. Al igual que <strong>las</strong> anteriores, alteran <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado.<br />
Instrucción Función<br />
RCL Rota a la izquierda a través <strong>de</strong>l acarreo.<br />
RCR Rota a la <strong>de</strong>recha consi<strong>de</strong>rando el acarreo.<br />
ROL Rotación a la izquierda.<br />
ROR Rotación a la <strong>de</strong>recha.<br />
SAL/SHL Desplazamiento a la izquierda.<br />
SAR/SHR Desplazamiento hacia la <strong>de</strong>recha.<br />
Operaciones <strong>de</strong> conversión<br />
Realizan conversiones <strong>de</strong> los operandos para transformarlos en otro tipo <strong>de</strong><br />
representación numérica.<br />
Instrucción Función<br />
AAA Ajusta el valor ASCII <strong>de</strong> una suma.<br />
AAD Ajuste <strong>de</strong>l valor ASCII <strong>de</strong> una divisón.<br />
AAM Ajuste <strong>de</strong>l valor ASCII <strong>de</strong> una multiplicación.<br />
AAS Ajuste <strong>de</strong>l valor ASCII <strong>de</strong> una resta.<br />
CBW Convierte un byte en un word.<br />
CWD Convierte un word en un double word.<br />
DAA Ajuste <strong>de</strong>cimal en una suma.<br />
DAS Ajuste <strong>de</strong>cimal en una resta.<br />
Instrucciones <strong>de</strong> comparación<br />
Las <strong>instrucciones</strong> <strong>de</strong> comparación permiten alterar <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado <strong>de</strong> la máquina<br />
y, con ello, tomar <strong>de</strong>cisiones cambiando el flujo <strong>de</strong> un programa. Estas operaciones realizan<br />
internamente alguna operación (por lo general la resta), pero no almacenan el resultado <strong>de</strong> esa<br />
operación, sino que únicamente actualizan <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado.<br />
El <strong>8086</strong>/<strong>8088</strong> dispone <strong>de</strong> <strong>las</strong> siguientes <strong>instrucciones</strong> <strong>de</strong> comparación:<br />
Instrucción Función<br />
CMP Comparar dos operandos y actualizar ban<strong>de</strong>ras.<br />
CMPS Comparar ca<strong>de</strong>nas <strong>de</strong> un byte o <strong>de</strong> una palabra.<br />
TEST Comparar dos operandos utilizando operación AND.<br />
2
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
Instrucciones <strong>de</strong> salto<br />
El <strong>8086</strong>/<strong>8088</strong> dispone <strong>de</strong> 36 <strong>instrucciones</strong> <strong>de</strong> salto que permiten controlar el flujo <strong>de</strong><br />
ejecución <strong>de</strong> un programa. Se pue<strong>de</strong>n c<strong>las</strong>ificar en dos tipos: <strong>instrucciones</strong> <strong>de</strong> salto<br />
condicional e <strong>instrucciones</strong> <strong>de</strong> salto incondicional.<br />
Salto condicional<br />
Realizan el salto si se cumple una <strong>de</strong>terminada condición. Esta condición se comprueba<br />
analizando <strong>las</strong> ban<strong>de</strong>ras <strong>de</strong> estado. Se utilizan combinadas con alguna instrucción que afecta<br />
el estado <strong>de</strong> <strong>las</strong> ban<strong>de</strong>ras, como <strong>las</strong> vistas en los apartados anteriores.<br />
Instrucción Función<br />
JA Saltar si superior.<br />
JAE Saltar si superior o igual.<br />
JB Saltar si inferior .<br />
JBE Saltar si iferior o igual.<br />
JC Saltar si hay acarreo .<br />
JCXZ Saltar si cx es cero.<br />
JE Saltar si igual.<br />
JG Saltar si mayor, consi<strong>de</strong>rando signos.<br />
JGE Saltar si mayor o igual, consi<strong>de</strong>rando signos.<br />
JL Saltar si menor, consi<strong>de</strong>rando signos.<br />
JLE Saltar si menor o igual, consi<strong>de</strong>rando signos.<br />
JNA Saltar si no superior.<br />
JNAE Saltar si no superior o igual.<br />
JNB Saltar si no inferior.<br />
JNBE Saltar si no inferior o igual.<br />
JNC Saltar si no hay acarreo.<br />
JNE Saltar si no igual.<br />
JNG Saltar si no mayor (con signo).<br />
JNGE Saltar si no mayor o igual (con signo).<br />
JNL Saltar si no menor (con signo).<br />
JNLE Saltar si no menor o igual (con signo).<br />
JNO Saltar si no hay overflow (consi<strong>de</strong>rando signos).<br />
JNS Saltar si positivo.<br />
JNZ Saltar si no es cero.<br />
JO Saltar si hay overflow (con signo).<br />
JP/JPE Saltar si par.<br />
JNP/JPO Saltar si impar.<br />
JS Saltar si negativo (signo activado).<br />
JZ Saltar si es cero.<br />
LOOP Saltar hasta que CX sea 0.<br />
LOOPE/LOOPZ Saltar hasta que el resultado <strong>de</strong> la última operación sea igual a cero.<br />
LOOPNZ Saltar hasta que el resultado <strong>de</strong> última operación sea distinta <strong>de</strong> cero.<br />
LOOPNE Saltar hasta que última comparación sea “distinto”.<br />
3
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
Salto Incondicional<br />
Este tipo <strong>de</strong> <strong>instrucciones</strong> <strong>de</strong> salto se diferencian <strong>de</strong>l anterior en que el salto se realiza<br />
siempre, es <strong>de</strong>cir, sin comprobar ninguna condición.<br />
Instrucción Función<br />
CALL Llamada a función, con retorno.<br />
JMP Salto incondicional (saltar siempre).<br />
RET Retorno incondicional <strong>de</strong> un procedimiento.<br />
Instrucciones <strong>de</strong> manejo <strong>de</strong> interrupciones<br />
Estas <strong>instrucciones</strong> permiten activar interrupciones o acce<strong>de</strong>r a servicios <strong>de</strong>l sistema o<br />
<strong>de</strong> la ROM-BIOS.<br />
Instrucción Función<br />
INT Genera una interrupción.<br />
INTO Genera una interrupción si <strong>de</strong>sbordamiento.<br />
IRET Retorno <strong>de</strong> interrupción.<br />
Instrucciones <strong>de</strong> transferencia <strong>de</strong> información<br />
Estas <strong>instrucciones</strong> se pue<strong>de</strong>n c<strong>las</strong>ificar en varios grupos:<br />
Transferencia usando registros y/o memoria<br />
Realizan movimientos <strong>de</strong> datos <strong>de</strong>s<strong>de</strong> un registro a memoria (o viceversa) y <strong>de</strong>s<strong>de</strong> un<br />
registro hacia otro registro, con la salvedad <strong>de</strong> que no se pue<strong>de</strong>n hacer transferencias <strong>de</strong><br />
memoria a memoria. Son <strong>las</strong> siguientes:<br />
Instrucción Función<br />
LAHF Cargar <strong>las</strong> ban<strong>de</strong>ras en AH.<br />
LDS Carga un puntero en DS.<br />
LEA Carga dirección efectiva.<br />
LES Carga un puntero en ES.<br />
MOV Mover un dato.<br />
POP Extraer dato <strong>de</strong> la pila.<br />
POPF Extraer dato <strong>de</strong> la pila y almacenarlo en registro <strong>de</strong> ban<strong>de</strong>ras.<br />
PUSH Almacenar dato en la pila.<br />
PUSHF Almacenar registro <strong>de</strong> ban<strong>de</strong>ras en la pila.<br />
SAHF Almacena el contenido <strong>de</strong> AH en el registro <strong>de</strong> ban<strong>de</strong>ras.<br />
XCHG Intercambiar valores <strong>de</strong> los operandos.<br />
XLAT Traducir posición.<br />
4
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
Transferencia usando puertos <strong>de</strong> E/S<br />
Permiten la comunicación <strong>de</strong>l procesador con otros elementos <strong>de</strong>l bus (como<br />
controladoras y coprocesadores), y con los periféricos conectados al sistema (como<br />
impresoras, ratón, etc.). Unicamente son cuatro, aunque <strong>las</strong> dos últimas son especializaciones<br />
<strong>de</strong> <strong>las</strong> dos primeras:<br />
Instrucción Función<br />
IN Entrada <strong>de</strong> byte o palabra <strong>de</strong>s<strong>de</strong> un puerto <strong>de</strong> E/S.<br />
OUT Salida <strong>de</strong> byte o palabra a un puerto <strong>de</strong> E/S.<br />
ESC Enviar información al coprocesador.<br />
WAIT Espera a un coprocesador.<br />
Transferencias “especiales”<br />
A este apartado pertenecen aquel<strong>las</strong> <strong>instrucciones</strong> que realizan transferencias <strong>de</strong> datos <strong>de</strong><br />
forma repetitiva y/o utilizando registros <strong>de</strong> direccionamiento, como el DI y el SI. Son <strong>las</strong><br />
siguientes:<br />
Instrucción Función<br />
LODS Carga una ca<strong>de</strong>na.<br />
MOVS Mueve ca<strong>de</strong>na <strong>de</strong> datos.<br />
REP Repetir operación <strong>de</strong> manejo <strong>de</strong> ca<strong>de</strong>nas.<br />
REPE Repetir operación <strong>de</strong> manejo <strong>de</strong> ca<strong>de</strong>nas miestras igual.<br />
REPNE Repetir operación <strong>de</strong> manejo <strong>de</strong> ca<strong>de</strong>nas miestras no igual.<br />
REPNZ Repetir operación <strong>de</strong> manejo <strong>de</strong> ca<strong>de</strong>nas miestras no cero.<br />
REPZ Repetir operación <strong>de</strong> manejo <strong>de</strong> ca<strong>de</strong>nas miestras cero.<br />
SCAS Explora ca<strong>de</strong>na <strong>de</strong> datos.<br />
STOS Almacena ca<strong>de</strong>na <strong>de</strong> datos.<br />
Instrucciones <strong>de</strong> control <strong>de</strong>l microprocesador<br />
En este apartado se encuentran aquel<strong>las</strong> <strong>instrucciones</strong> que alteran el contenido <strong>de</strong>l<br />
registro <strong>de</strong> ban<strong>de</strong>ras, o que afectan al funcionamiento básico <strong>de</strong>l procesador.<br />
Se pue<strong>de</strong>n c<strong>las</strong>ificar, por tanto, en dos grupos:<br />
Operaciones con <strong>las</strong> ban<strong>de</strong>ras<br />
Alteran el contenido <strong>de</strong> <strong>las</strong> ban<strong>de</strong>ras.<br />
5
Grupo <strong>de</strong> Arquitectura <strong>de</strong> Computadores y Diseño Lógico. UEX, 1997. http://atc.unex.es/gacdl<br />
<strong>Resumen</strong> <strong>de</strong> <strong>las</strong> <strong>instrucciones</strong> <strong>de</strong>l <strong>8086</strong>/<strong>8088</strong> Germán Galeano Gil. Juan A. Gómez Puildo<br />
Instrucción Función<br />
CLC Pone a 0 la ban<strong>de</strong>ra <strong>de</strong> acarreo.<br />
CLD Pone a 0 la ban<strong>de</strong>ra <strong>de</strong> dirección.<br />
CLI Pone a 0 la ban<strong>de</strong>ra <strong>de</strong> interrupción.<br />
CMC Complementa la ban<strong>de</strong>ra <strong>de</strong> acarreo.<br />
STC Pone la ban<strong>de</strong>ra <strong>de</strong> acarreo a 1.<br />
STD Pone la ban<strong>de</strong>ra <strong>de</strong> dirección a 1.<br />
STI Pone la ban<strong>de</strong>ra <strong>de</strong> interrupción a 1.<br />
Operaciones con el procesador y el bus<br />
Son <strong>instrucciones</strong> utilizadas para comunicar la CPU con el bus y con otros procesadores.<br />
Instrucción Función<br />
HLT Detienen el procesador.<br />
LOCK Bloquea el bus <strong>de</strong> datos.<br />
NOP Operación sin contenido (sólo consume tiempo).<br />
6