30.10.2012 Views

Resumen de las instrucciones del 8086/8088

Resumen de las instrucciones del 8086/8088

Resumen de las instrucciones del 8086/8088

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!