Está en la página 1de 57

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

|

|

Tabla 1. 4 Sub Es:[Bx + Di + 5]. 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) .Donde la expresión entre {} es obligatoria. [Bp + 3] Add [Bx + Si ]. En caso que este no se especifique siempre se asume uno por defecto.Dx En la Tabla 1 se indican las combinaciones posibles entre registros índice y los segmentos así como las asignaciones por defecto. Fuera del paréntesis recto se puede indicar cual es el registro de segmento usado para completar la dirección de memoria. la expresión entre [] es opcional y el signo | implica opción entre dos expresiones. Ejemplos: Mov Ax.Combinación entre registros de segmento e indices.

usando el siguiente código: X afecta siempre el valor de la flag colocando el valor apropiado según corresponda. Banderas: OF DF IF TF SF ZF AF PF CF XEn la. ? 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.de Banderas ? se indica X X X cómo afectaXa las flags del procesador la ejecución de la instrucción. 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 . Descripción de la semántica de la instrucción.

m) (r. Banderas: SBB OF DF IF TF SF ZF AF PF CF X - - X X X X X Formato: SBB Tipo Args: op1 .m) op1 Lógica: Descripción: op2 Idem a ADD pero además suma el valor del carry.m. op1 op2 c (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.m. op2 ( r. op2 ( r.m.m) (r.i) Idem a SUB pero además resta el carry. por lo .m) (r. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X X - op1 . op2 ( r.ARITMÉTICAS ADD Formato: ADD Tipo Args: op1 . Banderas: SUB Descripción: op1 .i) op1 + op2 c OF DF IF TF SF ZF AF PF CF X - - X X X X X Formato: SUB op1 .m.i) op1 op1 op2 Tipo Args: Lógica: Idem a ADD pero realiza la resta en lugar de la suma.

MUL Formato: MUL Tipo Args: op ( r. Dx colocando la parte más significativa en Dx . 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. el acumulador ( Ax o el operando op según este último sea de tipo byte o palabra. 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 . 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.

Banderas OF DF IF TF SF ZF AF PF CF ? - - ? ? ? ? ? PF CF - NEG Formato: NEG Tipo Args: Lógica: 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.DIV Formato: DIV Tipo Args: op ( r. En caso que op sea de tipo byte el cociente se almacena en Al y el resto en Ah . Descripción: Divide sin considerar el signo. 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). el resultado queda indefinido y se genera una interrupción tipo 0.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 . Si op es de tipo palabra el número dividido por éste es Dx: Ax . el acumulador Ax por el operando op si este último es de tipo byte.

m) Lógica: op Descripción: Incrementa el operando destino.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. op 1 Banderas: OF DF IF TF SF ZF AF PF CF X - - X X X X - - DEC Formato: op DEC Tipo Args: ( r. Banderas: OF X DF IF TF SF ZF AF PF CF - - - X X X X - .m) op Lógica: Descripción: op 1 Decrementa el operando destino. 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.

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

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

op2 lugares a la izq. CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. Si el nro.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.DESPLAZAMIENTO SAL/SHL SAL op1 . Banderas: OF DF IF TF SF ZF AF PF CF X - - X X ? X X - op1 en ser desplazado .m) (1. CL) Formato: Tipo Args: Lógica: corre op1 . Ej: SAL Al. se puede especificar directamente. de bits especificado por Los bits a la derecha se rellenan con ceros. Descripción: op2 . op2 SHL op1 . op2 ( r. de bits a desplazar es 1. Si es mayor que 1 debe cargarse en CL.

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 el nro. se puede especificar directamente.m) (1. Descripción: op2 . op2 ( r. de bits especificado por Los bits a la derecha se rellenan con ceros.m) (1. op2 lugares a la der. CL) op1 . Tipo Args: ( r. de bits a desplazar es 1.SHR Formato: SHR op1 . Ej: SAR Al. se puede especificar directamente. Banderas: OF DF IF TF SF ZF AF PF CF X - - X X ? X X - op1 en ser desplazado . op2 lugares a la derecha expandiendo el signo. CL) Lógica: corre op2 op1 . 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. Ej: SHR Al. Si el nro. Si es mayor que 1 debe cargarse en CL. 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 . de bits a desplazar es 1. de bits especificado por Los bits a la derecha se rellenan con el signo del primero operando. Descripción: op2 . 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.

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.m) (1. CL) op1 . CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. de bits a desplazar es 1. OF contiene el xor del CF con el bit más significativo del resultado.ROL Formato: ROL Tipo Args: op1 . op2 lugares a la izquierda. se puede especificar directamente. Lógica: rota Ej: ROL Al.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.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. CL) op1 . op2 lugares a la izquierda. Lógica: rota Ej: ROR Al. CF contiene luego de la ejecución el ultimo bit de "fuera" de la representación. Banderas: OF DF IF TF SF ZF AF PF CF X - - - - - - X - op1 en ser desplazado .ROR Formato: ROR Tipo Args: op1 . op2 ( r.m) (1. OF contiene el xor del CF con el bit menos significativo del resultado. se puede especificar directamente.

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

OUT Formato: OUT Tipo Args: Lógica: op1 . 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. Un valor variable. op2 (i. de la puerta se puede especificar mediante: Un valor fijo (de o a 255).DX) (Al. Banderas: OF - DF IF TF SF ZF AF PF CF - - - - - - - - . pudiéndose acceder a 64K puertas de salida. el contenido en el registro Dx ( de 0 a 65535).

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. 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 . Las interrupciones enmascarables se pueden activar o desactivar.MANEJO DE FLAGS CLC Formato: CLC Lógica: CF := 0 Descripción: Borra la bandera de acarreo (CF) sin afectar a ninguna otra bandera.

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

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

M.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.a. 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 - - - - - - - - - . utilizando como dirección de retorno el valor almacenado en el tope del stack.A. 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.JMP Formato: JMP Tipo Args: op1 (R.

Todas verifican cierta condición que deben cumplir algunos bits del registro de flags para realizar la transferencia de control. Ej: CMP a. saltar a DIR si a > 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.b . comparar a y b JA DIR.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. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. Si dicha condición no se cumple entonces el salto no se realiza. es decir esta comprendido entre -128 y 127. . sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .

es decir esta comprendido entre -128 y 127. 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. Ej: CMP a.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 . 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 .b . es decir esta comprendido entre -128 y 127. comparar a y b JC DIR. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits.b . sin considerar signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . saltar a DIR si a b . comparar a y b JNB DIR. . .

saltar a DIR si a b .b . es decir esta comprendido entre -128 y 127. 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 . 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. . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. comparar a y b JNA DIR. Ej: CMP a. es decir esta comprendido entre -128 y 127. comparar a y b JC DIR.b . saltar a DIR si a = b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . Ej: CMP a.

op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. saltar a DIR si a > b . . es decir esta comprendido entre -128 y 127.b .b . . considerando el signo Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - . saltar a DIR si a b .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 . es decir esta comprendido entre -128 y 127. comparar a y b JG DIR. Ej: CMP a. Ej: CMP a. 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 . comparar a y b JNG DIR.

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 . . es decir esta comprendido entre -128 y 127.b . . Ej: CMP a. es decir esta comprendido entre -128 y 127. Ej: ADD a. a=a+b JNO DIR. 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 . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. comparar a y b JNE DIR. saltar a DIR si no hubo overflow Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .

b . op1 ) si se cumple la condición El desplazamiento es un valor con signo de 8 bits. Ej: CMP a. . saltar a DIR si hubo overflow . a=a+b JO DIR. es decir esta comprendido entre -128 y 127. comparar a y b JNS DIR.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 . . 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.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. Ej: Banderas: ADD a.

saltar a DIR si a < b Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - .b . comparar a y b JNS DIR. Ej: CMP a.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 . 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.

Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - op1 y luego incrementa .FLAGS Descripción: Coloca el registro de flags en al tope del stack. 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. 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.M) Lógica: MOV op1 . Banderas: OF DF IF TF SF ZF AF PF CF - - - - - - - - - PUSHF Formato: PUSHF Lógica: SP=SP-2 MOV SS:[SP].M) Lógica: SP=SP-2 MOV SS:[SP].MANEJO DE STACK El stack del 8086 está implementado utilizando fundamentalmente las operaciones PUSH y POP conjuntamente con los registros SS y SP. op1 Descripción: Decrementa el puntero del stack.SS:[SP] SP=SP+2 Descripción: Transfiere la palabra en tope del stack al operando el puntero del stack. SP. PUSH Formato: PUSH Tipo Args: op1 (R.

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

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. La entrada i-ésima de esta tabla posee la dirección de memoria del manejador de la interrupción i. 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. Banderas: OF X DF IF TF SF ZF AF PF CF x x x x x x x x . Dicha tabla posee 256 entradas de 4 bytes cada una. 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.

op 2 lugares corre op1 .i r.DX AL.m.m r.CL 1.M A.CL 1. op2 op1 .m.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 CBW INC DEC op op r.m r.m. op 2 lugares corre op1 . op2 op1 .m r. op2 MUL op DIV op NEG op CARTILLA 8086/88 OP1 OP2 r.i r. op2 r. op2 SUB op1 .m.m r.W X X X X X X XXXX XXXX XXXX XXXX X X op 2 .i op1 r.m 1.M A. der. op2 op1 . op 2 lugares corre op1 . op 2 lugares rota op1 .W a. op2 AL.i op1 IN op1 .CL 1. op2 op op1 . (7) izq.m r.i op1 op1 op1 op r.m r.m AND OR XOR NOT CMP op1 . PUSH CS.m r. op2 r.AX i. CS:IP op (6) POP IP (5) POP CS.m r.m.m r. der.m r.m r. op 2 lugares rota 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.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.i setea las flags SAL SAR SHL SHR ROL ROR op1 .i op1 r.R. IP IP + op (5) PUSH Next IP. op2 op1 .m r.m. op2 r.CL 1.m. op2 op1 .R.CL corre op1 . POP IP (6) 0 1 0 1 . op2 SBB op1 . op2 op1 .DX i.m.W a. op2 op1 .m r.m r. op2 op1 . op2 ADC op1 .CARTILLA REDUCIDA INSTRUCCIÓN ADD op1 .i op1 r. op 2 lugares MOV op1 . op CALL op a.m r.m r.M A.R.

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. I. reset incondicional. entrada o salida en la dirección . espacio : set.2. C) Ultima columna de la tabla.PUSH CS. E(SP) flags E(SP).w): . las condiciones se setean según el resultado de la resta .{SI | DI} [+ desplazamiento] . 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.{BX | BP} [+ {SI | DI}] [+ desplazamiento] .desplazamiento .. Z.directo: la dirección esta en la instrucción . no se afecta. repite el bit de signo y no pueden ser memoria a la vez. S. SP SP + 2 SP SP . las operaciones son bit a bit.ffh PUSHF.PUSH IP. SP flags SP + 2 X XXXX REFERENCIAS: flags : registro con todas las banderas de condición (O.2. POP CS. P. E(SP) op1 E(SP). 1. 8 o 16 bits según largo de caso saltos NEAR. POPF op op R. caso saltos FAR. Direccionamiento: cuando el operando es memoria (m.M R.indirecto: . CS:IP E( op *4) POP IP.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 . X : afectada para reflejar resultado de la operación.M.0.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

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