MICROPOCESADOR 8086

NOTAS DE CURSO
(Versión 2.1)

Arquitectura de Computadores 2

Facultad de Ingeniería

Microprocesador 8086

Notas del Curso

ÍNDICE
DIRECCIONAMIENTO DE MEMORIA............................................................................................................. 2
MODOS DE DIRECCIONAMIENTO................................................................................................................. 3
REGISTRO...................................................................................................................................................................................
VALOR o INMEDIATO..................................................................................................................................................................
DIRECTO......................................................................................................................................................................................
INDIRECTO..................................................................................................................................................................................

3
3
3
3

INSTRUCCIONES............................................................................................................................................ 5
CÓDIGO.................................................................................5
ARITMÉTICAS.............................................................................................................................................................................. 6
ADD....................................................................................6
ADC....................................................................................6
SUB ...................................................................................6
SBB....................................................................................6
MUL....................................................................................7
DIV....................................................................................8
NEG....................................................................................8
CBW....................................................................................9
INC....................................................................................9
DEC....................................................................................9
LÓGICAS.................................................................................................................................................................................... 10
AND...................................................................................10
OR....................................................................................10
XOR...................................................................................10
NOT...................................................................................11
CMP...................................................................................11
DESPLAZAMIENTO................................................................................................................................................................... 12
SAL/SHL...............................................................................12
SHR...................................................................................13
SAR...................................................................................13
ROL...................................................................................14
ROR...................................................................................15
MOVIMIENTO e I/O.................................................................................................................................................................... 16
MOV...................................................................................16
IN....................................................................................16
OUT...................................................................................17
MANEJO DE FLAGS.................................................................................................................................................................. 18
CLC...................................................................................18
STC...................................................................................18
CLI...................................................................................18
STI...................................................................................18
BIFURCACIÓN INCONDICIONAL.............................................................................................................................................. 20
CALL..................................................................................20
JMP...................................................................................21
RET...................................................................................21
BIFURCACIÓN CONDICIONAL................................................................................................................................................. 22
JA / JNBE (no considera signo)........................................................22
JB / JNAE / JC (no considera signo)...................................................23
JNB / JAE / JNC (no considera signo)..................................................23
JBE/JNA (no considera signo)..........................................................24
JE/JZ ................................................................................24
JG/JNLE (considera signo).............................................................25
JNG/JLE (considera signo).............................................................25
JNE/JNZ...............................................................................26
JNO...................................................................................26
JNS...................................................................................27
JO....................................................................................27
JS....................................................................................28
MANEJO DE STACK.................................................................................................................................................................. 29
PUSH..................................................................................29
POP...................................................................................29
PUSHF.................................................................................29
POPF..................................................................................30
INTERRUPCIONES.................................................................................................................................................................... 31
INT...................................................................................31
IRET..................................................................................31

CARTILLA REDUCIDA................................................................................................................................... 32

Arquitectura de Computadores 2

1

Facultad de Ingeniería

DIRECCIONAMIENTO DE MEMORIA
Los registros del 8086 son de 16 bits, por lo tanto el número de direcciones posibles a
direccionar con 1 solo registro es:
6553610 1000016
16
2
lo cual representa un total de 64 Kbytes y los valores de direcciones se encuentran en el
rango de 0 a FFFF.
Para superar este límite se utilizan 2 registros para direccionar memoria: Uno de
SEGMENTO y otro de DESPLAZAMIENTO (offset) dentro del segmento. La notación
utilizada para una dirección segmentada es:
SEGMENTO:DESPLAZAMIENTO
La relación entre la dirección de memoria real y la dirección segmentada es:
DIR = SEGMENTO * 16 + DESPLAZAMIENTO
Al multiplicar por 16 se obtienen 4 bits más con lo que ahora se tiene:
104857610 10000016
20
2
con lo cual tenemos un total de 1024Kb = 1Mb de memoria direccionable. Los valores para
las direcciones reales se encuentran en el rango 0 a FFFFFh.
Es importante hacer notar que una misma dirección de memoria puede ser
direccionada con distintos valores de segmento y desplazamiento
Ej:
100:50 = 105:0 =0:1050, trabajando en base 16.

MODOS DE DIRECCIONAMIENTO
Se entiende por modos de direccionamiento a las diferentes formas que pueden tomar
los parámetros de las instrucciones del procesador.
Diferentes autores clasifican en forma distinta los modos de direccionamiento del
8086. Nosotros distinguiremos fundamentalmente cuatro modos diferentes:

REGISTRO
Un parámetro que direcciona a un registro está utilizando el modo de direccionamiento
REGISTRO.
Ej:

MOV Ax,Bx

En este ejemplo los dos parámetros direccionan un registro.

VALOR o INMEDIATO
El modo de direccionamiento INMEDIATO es utilizado cuando se hace referencia a un valor
constante. Este se codifica junto con la instrucción. Es decir dicho parámetro representa a su
valor y no a una dirección de memoria o un registro que lo contiene.
Ej:

MOV Ax,500

En este ejemplo el número 500 es un parámetro inmediato.

DIRECTO
Se utiliza el modo directo cuando se referencia a una dirección de memoria y la misma esta
codificada junto con la instrucción.
Ej:
MOV Al,[127]
En este ejemplo el desplazamiento de la dirección de memoria se codifica junto con la
instrucción y el segmento se asume a DS.
Si MEMORIA es un array de bytes que representa a la memoria la instrucción anterior se
puede poner como:
Al := MEMORIA[ DS:127 ]

INDIRECTO
Se utiliza el modo directo cuando se referencia a una dirección de memoria a través de uno
o varios registros
Ej:

MOV Al,[Bx]

Aquí el offset de la dirección de memoria está contenido en el registro Bx y al igual que el
caso anterior como no se especifica el segmento se asume DS.
Si MEMORIA es un array de bytes que representa a la memoria la instrucción anterior se
puede poner como:
Al := MEMORIA[ DS:Bx ]
La especificación completa de las expresiones que van dentro de los paréntesis rectos es:

{ Bx | Bp } [ + { Si | Di } ] [ + desplazamiento ]
{ Si | Di }

[ + desplazamiento ]

desplazamiento

|

|

IP SP BP BX SI DI CS Si Prefijo Prefijo Prefijo Prefijo SS DS ES si por defecto prefijo prefijo prefijo prefijo por defecto por defecto por defecto prefijo prefijo prefijo por defecto (cadenas) . Fuera del paréntesis recto se puede indicar cual es el registro de segmento usado para completar la dirección de memoria. En caso que este no se especifique siempre se asume uno por defecto. la expresión entre [] es opcional y el signo | implica opción entre dos expresiones. [Bp + 3] Add [Bx + Si ]. Tabla 1. 4 Sub Es:[Bx + Di + 5]. Ejemplos: Mov Ax.Dx En la Tabla 1 se indican las combinaciones posibles entre registros índice y los segmentos así como las asignaciones por defecto.Donde la expresión entre {} es obligatoria.Combinación entre registros de segmento e indices.

Banderas: OF DF IF TF SF ZF AF PF CF XEn la. Formato: A dirección absoluta inmediata ( 4 bytes ) a dirección absoluta inmediata ( 2 bytes ) i operando inmediato ( 1 o 2 bytes ) d desplazamiento inmediato ( 1 byte ) r registro de uso general ( 8 o 16 bits ) R registro de uso general ( 16 bits ) m palabra de memoria ( 1 o 2 bytes ) M palabra de memoria ( 2 bytes ) W doble palabra de memoria ( 4 bytes ) CL el nombre de un registro en particular Se indica usando pseudo código cual es la lógica de la instrucción.INSTRUCCIONES Para describir a cada una de las instrucciones usaremos el siguiente formato: CÓDIGO op2 CÓDIGO Tipo Args: Se indica qué forma puede tomar cada parámetro poniendo debajo del mismo una lista de códigos entre paréntesis que definimos así: Lógica: Descripción: op1 .de Banderas ? se indica X X X cómo afectaXa las flags del procesador la ejecución de la instrucción. Descripción de la semántica de la instrucción. usando el siguiente código: X afecta siempre el valor de la flag colocando el valor apropiado según corresponda. ? el valor de la flag luego de la ejecución de la instrucción es indeterminado - la ejecución de la instrucción no afecta el valor de flag .tabla.

Banderas: SBB OF DF IF TF SF ZF AF PF CF X - - X X X X X Formato: SBB Tipo Args: op1 .m) (r.m.i) Idem a SUB pero además resta el carry.i) op1 + op2 c OF DF IF TF SF ZF AF PF CF X - - X X X X X Formato: SUB op1 .m. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X X - op1 .i) op1 op1 op2 Tipo Args: Lógica: Idem a ADD pero realiza la resta en lugar de la suma.m. por lo .m) (r. Banderas: SUB Descripción: op1 .m) op1 Lógica: Descripción: op2 Idem a ADD pero además suma el valor del carry. op2 ( r.i) op1 + op2 Lógica: op1 Descripción: Suma los dos operandos y almacena el resultado en tanto ambos deben tener el mismo tipo Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X X - ADC Formato: ADC Tipo Args: op1 Lógica: Descripción: ( r. op2 ( r.ARITMÉTICAS ADD Formato: ADD Tipo Args: op1 . op2 ( r.m) (r. op1 op2 c (r.m.

Ax si es de tipo palabra se almacena en el par de Banderas: OF DF IF TF SF ZF AF PF CF X - - ? ? ? ? X - Ax ) por . Ax = Ax * op si fin si si la mitad superior del resultado es 0 sino CF 0 CF 1 fin si OF CF Multiplica sin considerar el signo. Descripción: En caso que op sea de tipo byte ls resultado se almacena en registros Ax .m) Lógica: op es de tipo byte Ax = Al * op sino si op es de tipo palabra Dx. Dx colocando la parte más significativa en Dx .MUL Formato: MUL Tipo Args: op ( r. el acumulador ( Ax o el operando op según este último sea de tipo byte o palabra.

el resultado queda indefinido y se genera una interrupción tipo 0. En caso que op sea de tipo byte el cociente se almacena en Al y el resto en Ah . Si op es de tipo palabra el número dividido por éste es Dx: Ax .DIV Formato: DIV Tipo Args: op ( r.m) Lógica: si op es de tipo byte FFh si Ax div op INT 0 else Al Ah Ax div op Ax mod op fin si fin si sino si op es de tipo palabra FFh si Dx: Ax div op INT 0 else Ax Dx Dx: Ax div op Ax mod op fin si Error! Objects cannot be created from editing field codes. el acumulador Ax por el operando op si este último es de tipo byte. Si es de tipo palabra el cociente se almacena en Dx y el resto en Ax Si el cociente es mayor que el número máximo representable ( FFh o FFFFh según sea el caso). Descripción: Divide sin considerar el signo.m) op es de tipo byte op FFh op op op 1 op sino si es de tipo palabra op FFFFh op op op 1 si fin si Descripción: Calcula el complemento a 2 de op Banderas: OF DF IF TF SF ZF AF . Banderas OF DF IF TF SF ZF AF PF CF ? - - ? ? ? ? ? PF CF - NEG Formato: NEG Tipo Args: Lógica: op ( r.

es decir expande el bit de signo de AL Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - INC Formato: op INC Tipo Args: ( r. Banderas: OF X DF IF TF SF ZF AF PF CF - - - X X X X - .m) Lógica: op Descripción: Incrementa el operando destino. op 1 Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X - - DEC Formato: op DEC Tipo Args: ( r.X - - - X X X X X CBW Formato: CBW Lógica: si Al < 80h 00h Ah sino Ah FFh fin si Descripción: Copia el bit 7 del registro AL en todos los bits del registro AH.m) op Lógica: Descripción: op 1 Decrementa el operando destino.

m) (r.m.m.LÓGICAS AND Formato: AND Tipo Args: op1 . Banderas: OR OF DF IF TF SF ZF AF PF CF 0 - - X X ? X 0 Formato: OR Tipo Args: op1 .m) (r. Banderas: OF DF IF TF SF ZF AF PF CF 0 - - X X ? X 0 - .i) Lógica: op1 op1 op2 CF OF 0 Descripción: Calcula el "o" lógico inclusivo bit a bit entre op1 y op2 Banderas: OF DF IF TF SF ZF AF PF CF 0 - - X X ? X 0 - XOR Formato: XOR Tipo Args: Lógica: Descripción: op1 .i) Lógica: op1 Descripción: op1 op2 CF OF 0 Calcula el "y" lógico bit a bit entre op1 y op2 .i) op1 op1 op2 CF OF 0 Calcula el "o" lógico exclusivo bit a bit entre op1 y op2 . op2 ( r. op2 ( r.m) (r.m. op2 ( r.

op2 ( r. Los operandos quedan inalterados pudiéndose consultar las flags mediante una operación de bifurcación condicional. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X X - .m.m) op1 op2 Lógica: op1 Descripción: Calcula el complemento a 1 de ceros por unos.NOT Formato: op NOT Tipo Args: ( r.i) op2 Lógica: op1 Descripción: Resta op1 de op2 pero solo afecta las flags ignorando el resultado. Es decir. op .m) (r. cambia unos por cero y Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - CMP Formato: CMP Tipo Args: op1 .

DESPLAZAMIENTO SAL/SHL SAL op1 . CL) Formato: Tipo Args: Lógica: corre op1 . de bits especificado por Los bits a la derecha se rellenan con ceros. se puede especificar directamente. op2 SHL op1 . op2 lugares a la izq. Descripción: op2 . Ej: SAL Al. op2 ( r.1 CF ? Antes Al a b c d e f g h Al Despues h b c d e f g h 0 Desplaza a la izquierda los bits de op1 el nro. Si el nro. de bits a desplazar es 1. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X ? X X - op1 en ser desplazado . CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. Si es mayor que 1 debe cargarse en CL.m) (1.

Ej: SAR Al. op1 en ser desplazado Banderas: OF DF IF TF SF ZF AF PF CF X - - X X ? X X - SAR Formato: SAR Tipo Args: Lógica: corre op1 .m) (1. de bits especificado por Los bits a la derecha se rellenan con ceros. se puede especificar directamente. op2 ( r. CL) op1 . CL) Lógica: corre op2 op1 . Ej: SHR Al. se puede especificar directamente. op2 lugares a la der. CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación.1 Antes Al a b c d e f Despues Al a a b c d e f g h g CF ? h Desplaza a la derecha los bits de op1 el nro. Descripción: op2 . CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. Descripción: op2 . de bits a desplazar es 1. Si el nro. op2 lugares a la derecha expandiendo el signo. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X ? X X - op1 en ser desplazado . Si el nro. de bits especificado por Los bits a la derecha se rellenan con el signo del primero operando. de bits a desplazar es 1.1 Antes Al a b c d e f Despues Al 0 a b c d e f g h g CF ? h Desplaza a la derecha los bits de op1 el nro. Si es mayor que 1 debe cargarse en CL.m) (1. Si es mayor que 1 debe cargarse en CL. Tipo Args: ( r.SHR Formato: SHR op1 .

CL) op1 . OF contiene el xor del CF con el bit más significativo del resultado. Lógica: rota Ej: ROL Al. Banderas: OF DF IF TF SF ZF AF PF CF X - - - - - - X - op1 en ser desplazado .1 CF Antes Al a b c d e f ? g h Al Despues Descripción: a b c d e f Rota a la izquierda los bits de g h a op1 el numero de bits especificado por op2 Si el nro. op2 ( r. Si es mayor que 1 debe cargarse en CL. de bits a desplazar es 1. se puede especificar directamente. CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. op2 lugares a la izquierda.ROL Formato: ROL Tipo Args: op1 .m) (1.

1 Antes Al a b c d e f Despues Al h a b c d e f Descripción: Rota a la derecha los bits de g h g CF ? h op1 el numero de bits especificado por op2 Si el nro. op2 ( r. CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación.m) (1. op2 lugares a la izquierda. Banderas: OF DF IF TF SF ZF AF PF CF X - - - - - - X - op1 en ser desplazado . Si es mayor que 1 debe cargarse en CL. CL) op1 . OF contiene el xor del CF con el bit menos significativo del resultado. de bits a desplazar es 1. se puede especificar directamente. Lógica: rota Ej: ROR Al.ROR Formato: ROR Tipo Args: op1 .

el contenido en el registro Dx (de 0 a 65535).m) (r. pudiéndose acceder a 64K puertas de entrada. Un valor variable.m. quedando inalterado el elemento fuente.MOVIMIENTO e I/O MOV Formato: MOV Tipo Args: op1 . AX) (i. Atención: No se puede mover memoria a memoria. El nro. respectivamente. El contenido especificado por el elemento fuente se copia sobre el elemento destino. op2 ( r. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - IN Formato: IN Tipo Args: Lógica: op1 . Ambos operandos deben ser del mismo tipo (byte o palabra). de la puerta se puede especificar mediante: Un valor fijo (de o a 255).DX) Al Al I / O(op 2 ) sino si op1 AX Ax I / O(op 2 ) si op1 fin si Descripción: Transfiere un byte o una palabra de una puerta de entrada del procesador al registro Al o Ax.i) op2 Lógica: op1 Descripción: Transfiere un byte o una palabra desde el operando fuente al operando destino. op2 (AL. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .

Ax) si op1 Al I / O(op 2 ) sino si op1 Ax I / O(op 2 ) fin si Descripción: Al Ax Transfiere un byte o una palabra desde el registro Al o Ax a una puerta de salida del procesador El nro. Banderas: OF - DF IF TF SF ZF AF PF CF - - - - - - - - . op2 (i. el contenido en el registro Dx ( de 0 a 65535). de la puerta se puede especificar mediante: Un valor fijo (de o a 255).DX) (Al. Un valor variable.OUT Formato: OUT Tipo Args: Lógica: op1 . pudiéndose acceder a 64K puertas de salida.

MANEJO DE FLAGS CLC Formato: CLC Lógica: CF := 0 Descripción: Borra la bandera de acarreo (CF) sin afectar a ninguna otra bandera. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - 1 - CLI Formato: CLI Lógica: IF := 0 Descripción: Borra la bandera de activación de interrupciones (IF) y desactiva las interrupciones enmascarables (las que aparecen sobre la linea INTR del procesador). Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - 0 - STC Formato: STC Lógica: CF := 1 Descripción: Pone en 1 la bandera de acarreo (CF) sin afectar a ninguna otra bandera. Banderas: OF DF IF TF SF ZF AF PF CF . Banderas: OF DF IF TF SF ZF AF PF CF - 0 - - - - - - - STI Formato: STI Lógica: IF := 1 Descripción: Pone en 1 la bandera de activación de interrupciones (IF) y activa las interrupciones enmascarables (las que aparecen sobre la linea INTR del procesador) Una interrupción pendiente no será reconocida hasta que no se haya ejecutado la instrucción que sigue a STI. Las interrupciones no enmascarables (las que aparecen sobre la linea NMI) no se pueden desactivar. Las interrupciones enmascarables se pueden activar o desactivar.

Microprocesador 8086 Notas del Curso - Arquitectura de Computadores 2 - 1 - - 19 - - - - Facultad de Ingeniería .

cambiando el puntero de programa (CS:IP) a la dirección indicada por op1 . En este caso se almacena en la pila primero el segmento y segundo el desplazamiento de la instrucción siguiente. es decir op1 contiene la dirección de memoria donde se encuentra el valor a asignar al puntero de instrucción. guardando previamente en la pila la dirección de la instrucción siguiente. respectivamente.BIFURCACIÓN INCONDICIONAL CALL Formato: CALL Tipo Args: op1 (R. Si se utiliza WORD PTR. Indirecta. En otro segmento (llamada FAR). La llamada puede ser a su vez: Directa. Banderas: Arquitectura de Computadores 2 OF DF IF TF SF ZF AF PF CF - - - - - - - - - 20 Facultad de Ingeniería .a. De esta forma se pueden hacer llamadas NEAR o FAR. es decir op1 es el valor a asignar a el puntero de instrucción. El procedimiento llamado puede estar: Dentro del mismo segmento (llamada NEAR). se almacena en la pila el desplazamiento de la instrucción siguiente.M. el contenido es la nueva dirección o desplazamiento. para volver a esta instrucción una vez ejecutado el procedimiento.W) Lógica: Si llamada FAR PUSH CS PUSH IP CS := segmento IP := offset op1 sino { llamada NEAR } PUSH IP IP := op1 fin si Descripción: op1 Modifica el flujo de control. Si en cambio se utiliza DWORD PTR la primera palabra contiene el desplazamiento y la segunda el segmento. Se supone siempre un salto NEAR a menos que se indique lo contrario. En este caso.A.

utilizando como dirección de retorno el valor almacenado en el tope del stack.JMP Formato: JMP Tipo Args: op1 (R. SI es FAR se asume que en el tope del STACK contiene el nuevo valor de IP y luego esta el nuevo valor de CS.A.a.W) Lógica: Si llamada FAR CS := segmento IP := offset op1 sino IP := op op1 1 fin si Descripción: Igual al CALL sin guardar la dirección de retorno en el stack: Banderas: RET OF DF IF TF SF ZF AF PF CF - - - - - - - - Formato: RET Lógica: POP IP si procedimiento FAR POP CS fin si Descripción: Retorna de un procedimiento invocado por un CALL. El ensamblador genera un RET distinto según el procedimiento sea NEAR o FAR: SI es NEAR se asume que en el tope del STACK contiene el nuevo valor de IP. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .M.

comparar a y b JA DIR. Si dicha condición no se cumple entonces el salto no se realiza. saltar a DIR si a > b . Ej: CMP a. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.BIFURCACIÓN CONDICIONAL Este conjunto de instrucciones se utilizan para efectuar un salto CONDICIONAL a una dirección de memoria ubicada en el segmento CS a una distancia menor a 128 bytes de la instrucción actual.b . JA / JNBE (no considera signo) Formato: JA op1 (Jump Above) JNBE op1 (Jump Not Below or Equal) Tipo Args: (d) Lógica: Si Descripción: CF = 0 y ZF = 0 IP op1 + IP Transfiere el control a la instrucción (IP + CF=0 y ZF=0. sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . Todas verifican cierta condición que deben cumplir algunos bits del registro de flags para realizar la transferencia de control. es decir esta comprendido entre -128 y 127. .

op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.b . comparar a y b JNB DIR. es decir esta comprendido entre -128 y 127.JB / JNAE / JC (no considera signo) Formato: JB op1 JNAE op1 JC op1 Tipo Args: (d) Lógica: Si Descripción: CF = 1 IP op1 + IP Transfiere el control a la instrucción (IP + CF=1 . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. saltar a DIR si a b . saltar a DIR si a < b .b . Ej: CMP a. . comparar a y b JC DIR. es decir esta comprendido entre -128 y 127. . sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - JNB / JAE / JNC (no considera signo) Formato: JNB op1 JAE op1 Tipo Args: (d) Lógica: Si Descripción: CF = 0 IP op1 + IP Transfiere el control a la instrucción (IP + CF=0 . Ej: CMP a.

es decir esta comprendido entre -128 y 127. es decir esta comprendido entre -128 y 127. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. Ej: CMP a.b . saltar a DIR si a = b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . Ej: CMP a. saltar a DIR si a b . .b . sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - JE/JZ Formato: JE op1 JZ op1 Tipo Args: (d) Lógica: Si Descripción: ZF = 1 IP op1 + IP Transfiere el control a la instrucción (IP + ZF=1 . . comparar a y b JC DIR. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.JBE/JNA (no considera signo) Formato: JBE op1 JNA op1 Tipo Args: (d) Lógica: Si Descripción: CF = 1 o ZF = 1 IP op1 + IP Transfiere el control a la instrucción (IP + CF=1 o ZF=1. comparar a y b JNA DIR.

b . . Ej: CMP a. . comparar a y b JG DIR. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.JG/JNLE (considera signo) Formato: JG op1 JNLE op1 Tipo Args: (d) Lógica: Si Descripción: ZF = 0 y SF = OF IP op1 + IP Transfiere el control a la instrucción (IP + ZF=0 y SF=OF . Ej: CMP a. comparar a y b JNG DIR. considerando el signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . saltar a DIR si a b . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. es decir esta comprendido entre -128 y 127.b . es decir esta comprendido entre -128 y 127. considerando el signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - JNG/JLE (considera signo) Formato: JNG op1 JLE op1 Tipo Args: (d) Lógica: Si Descripción: ZF = 1 o SF OF IP op1 + IP Transfiere el control a la instrucción (IP + ZF=1 y SF OF . saltar a DIR si a > b .

saltar a DIR si no hubo overflow Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .b .JNE/JNZ Formato: JNE op1 JNZ op1 Tipo Args: (d) Lógica: Si Descripción: ZF = 0 IP op1 + IP Transfiere el control a la instrucción (IP + ZF=0 . Ej: ADD a. saltar a DIR si a b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - JNO Formato: JNO Tipo Args: op1 (d) Lógica: Si Descripción: OF = 0 IP op1 + IP Transfiere el control a la instrucción (IP + OF=0 .b . comparar a y b JNE DIR. . . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. es decir esta comprendido entre -128 y 127. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. a=a+b JNO DIR. Ej: CMP a. es decir esta comprendido entre -128 y 127.

b . . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. saltar a DIR si hubo overflow .JNS Formato: op1 JNS Tipo Args: (d) Lógica: Si SF Descripción: =0 IP op1 + IP Transfiere el control a la instrucción (IP + SF=0 . Ej: Banderas: ADD a. es decir esta comprendido entre -128 y 127. a=a+b JO DIR. comparar a y b JNS DIR. saltar a DIR si a b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - JO Formato: JO Tipo Args: Lógica: Descripción: op1 (d) Si OF = 1 IP op1 + IP Transfiere el control a la instrucción (IP + OF=1. . es decir esta comprendido entre -128 y 127. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.b . Ej: CMP a.

comparar a y b JNS DIR.JS Formato: op1 JS Tipo Args: (d) Lógica: Si SF Descripción: =1 IP op1 + IP Transfiere el control a la instrucción (IP + SF=0 . . es decir esta comprendido entre -128 y 127. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. Ej: CMP a.b . saltar a DIR si a < b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .

SP. El tope del stack está apuntado por SS:SP y las operaciones PUSH y POP los actualizan de forma de obtener la semántica de stack como veremos más adelante. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - PUSHF Formato: PUSHF Lógica: SP=SP-2 MOV SS:[SP]. op1 Descripción: Decrementa el puntero del stack. Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - op1 y luego incrementa .SS:[SP] SP=SP+2 Descripción: Transfiere la palabra en tope del stack al operando el puntero del stack.M) Lógica: SP=SP-2 MOV SS:[SP]. PUSH Formato: PUSH Tipo Args: op1 (R. SP y transfiere la palabra especificada por op1 a la dirección SS:SP Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - POP Formato: POP Tipo Args: op1 (R.MANEJO DE STACK El stack del 8086 está implementado utilizando fundamentalmente las operaciones PUSH y POP conjuntamente con los registros SS y SP.FLAGS Descripción: Coloca el registro de flags en al tope del stack.M) Lógica: MOV op1 .

SS:[SP] Descripción: Restaura los registros de flags desde el tope del stack.POPF Formato: POPF Lógica: SP=SP-2 MOV FLAGS. Banderas: OF X DF IF TF SF ZF AF PF CF X X X X X X X X .

Banderas: OF X DF IF TF SF ZF AF PF CF x x x x x x x x . La entrada i-ésima de esta tabla posee la dirección de memoria del manejador de la interrupción i. Funciona en forma equivalente al RET utilizado para retornar de una llamada CALL con la diferencia que esta instrucción restaura las flags del stack antes de retornar. Dicha tabla posee 256 entradas de 4 bytes cada una. Banderas: OF DF IF TF SF ZF AF PF CF - x x - - - - - Formato: IRET Lógica: RET POPF Descripción: Retorna de una interrupción.INTERRUPCIONES La tabla de interrupciones del 8086 se encuentra en la dirección absoluta 0 y ocupa el primer kilobyte de memoria. INT Formato: INT Tipo Args: op1 (i) Lógica: PUSHF IF=0 TF=0 CALL FAR tabla_int( Descripción: Genera una interrupción software tipo IRET op1 ) op1 . Los primeros 2 bytes corresponden al offset del manejador y los últimos 2 corresponden al segmento del mismo.

CL corre op1 .i op1 op1 op1 op r. CS:IP op (6) POP IP (5) POP CS.m.AX i.CL 1. op 2 lugares rota op1 . op2 op1 .m r.CL 1.m r.W X X X X X X XXXX XXXX XXXX XXXX X X op 2 .DX AL.R.m AND OR XOR NOT CMP op1 .i op1 (Reducida) Curso 1993 OPERACIÓN op1 op2 op1 op2 c op1 op2 op1 op2 c {DX:AX|AX} {AX|AL}* op {AX|AL} {DX:AX|AL} div op r r {DX|AH} {DX:AX|AX} mod op op * 1 \EMBED Equation op AX AL (expande signo) r.m 1. op2 op1 .CL 1.AX {AL|AX} OUT CLC STC CLI STI op op X XXXX op + 1 op + 1 op1 and op 2 op1 or op 2 op1 xor op 2 not op X XXX X XXX (2) (2) (2) (2) (3) 0 XXX0 0 XXX0 0 XXX0 X XXXX a a a a la la la la izq.m r. op2 r.M A.i r.i op1 r. op2 SUB op1 .m CBW INC DEC op op r.m.R.m r.m. op2 op op1 .m r. op2 op1 . NO MUEVE MEMORIA A MEMORIA { I/O{i} | I/O(DX) } { I/O{i} | I/O(DX) } (4) {AL|AX} (4) borra el carry (c) prende el carry (c) deshabilita interrupciones habilita interrupciones JMP RET OISZPC X XXXX X XXXX X XXXX X XXXX X ???X ? ???? IP op (5) CS:IP op (6) PUSH Next IP. op2 op1 .m r.R.M A. op2 ADC op1 .m.m.m. op2 op1 .m.DX i.m r.CL 1. der. der. (7) izq.m r.m.i op1 r.M A. op CALL op a.W a. op2 op1 .m r. op 2 lugares MOV op1 .m r. op2 SBB op1 . op2 r.m r. op 2 lugares rota op1 .i setea las flags SAL SAR SHL SHR ROL ROR op1 . op2 r. PUSH CS.i op1 r.m.m r. op2 op1 . op2 AL.m r. IP IP + op (5) PUSH Next IP. op 2 lugares corre op1 .CL 1.m r.m r.m r.W a.CARTILLA REDUCIDA INSTRUCCIÓN ADD op1 . POP IP (6) 0 1 0 1 . op 2 lugares corre op1 .i r.i op1 IN op1 . op2 MUL op DIV op NEG op CARTILLA 8086/88 OP1 OP2 r. op 2 lugares corre op1 . op2 op1 .

repite el bit de signo y no pueden ser memoria a la vez. espacio : set. 8 o 16 bits según largo de caso saltos NEAR. E(SP) op1 E(SP). CS:IP E( op *4) POP IP. X : afectada para reflejar resultado de la operación. entrada o salida en la dirección .M SP IRET PUSH POP PUSHF POPF (Reducida) Curso 1993 OPERACIÓN op + IP c=0 ^ z=0 IP op + IP c=1 IP op + IP c=0 IP op + IP c=1 or z=1 IP op + IP z=1 IP op + IP z=0 ^ s=o IP op + IP s=o IP op + IP s<>o IP op + IP z=1 or s<>o IP op + IP c<>0 IP op + IP z<>0 IP op + IP o<>0 IP op + IP s<>0 IP op + IP o=1 IP op + IP s=1 IP op1 OISZPC 0 SP . POPF op op R.directo: la dirección esta en la instrucción . P.INSTRUCCIÓN JA/JNBE op JB/JNAE/JC op JNB/JAE op JBE/JNA op op JE/JZ JG/JNLE op JGE/JNL op JL/JNGE op JNG/JLE op op JNC JNE/JNZ op op JNO op JNS op JO op JS INT CARTILLA 8086/88 OP1 OP2 d d d d d d d d d d d d d d d si si si si si si si si si si si si si si si op 0. no se afecta.2. las condiciones se setean según el resultado de la resta .M R.. SP flags SP + 2 X XXXX REFERENCIAS: flags : registro con todas las banderas de condición (O. NOTAS: (1) (2) (3) (4) (5) (6) (7) : : : : : : : la operación se hace en 16 u 8 bits de acuerdo al tamaño de op1. 1. Z. caso saltos FAR. POP CS. I. Direccionamiento: cuando el operando es memoria (m. E(SP) flags E(SP).PUSH IP.2.w): .desplazamiento .indirecto: .{BX | BP} [+ {SI | DI}] [+ desplazamiento] .0. S. SP SP + 2 SP SP . C) Ultima columna de la tabla.{SI | DI} [+ desplazamiento] . las operaciones son bit a bit. reset incondicional.M.PUSH CS.ffh PUSHF.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

OF - DF IF TF SF ZF AF PF CF - - - - - - - - .