notas-8086

46
MICROPOCESADOR 8086 NOTAS DE CURSO (Versión 2.1)

description

chip8086

Transcript of notas-8086

MICROPOCESADOR 8086

NOTAS DE CURSO(Versin 2.1)

Arquitectura de Computadores 2 Facultad de Ingeniera

NDICE

DIRECCIONAMIENTO DE MEMORIA............................................................................................................. 2

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

Microprocesador 8086Notas del CursoCARTILLA REDUCIDA................................................................................................................................... 32

Arquitectura de Computadores 210Facultad de Ingeniera

DIRECCIONAMIENTO DE MEMORIA

Los registros del 8086 son de 16 bits, por lo tanto el nmero de direcciones posibles a direccionar con 1 solo registro es:

216

6553610 1000016

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 lmite se utilizan 2 registros para direccionar memoria: Uno de SEGMENTO y otro de DESPLAZAMIENTO (offset) dentro del segmento. La notacin utilizada para una direccin segmentada es:

SEGMENTO:DESPLAZAMIENTO

La relacin entre la direccin de memoria real y la direccin segmentada es: DIR = SEGMENTO * 16 + DESPLAZAMIENTOAl multiplicar por 16 se obtienen 4 bits ms con lo que ahora se tiene:

220

104857610 10000016

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 direccin 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 parmetros 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 parmetro que direcciona a un registro est utilizando el modo de direccionamientoREGISTRO.

Ej: MOV Ax,Bx

En este ejemplo los dos parmetros 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 instruccin. Es decir dicho parmetro representa a su valor y no a una direccin de memoria o un registro que lo contiene.

Ej: MOV Ax,500

En este ejemplo el nmero 500 es un parmetro inmediato.

DIRECTO

Se utiliza el modo directo cuando se referencia a una direccin de memoria y la misma esta codificada junto con la instruccin.

Ej:

MOV Al,[127]

En este ejemplo el desplazamiento de la direccin de memoria se codifica junto con la instruccin y el segmento se asume a DS.

Si MEMORIA es un array de bytes que representa a la memoria la instruccin anterior se puede poner como:

Al := MEMORIA[ DS:127 ]

INDIRECTO

Se utiliza el modo directo cuando se referencia a una direccin de memoria a travs de uno o varios registros

Ej: MOV Al,[Bx]

Aqu el offset de la direccin 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 instruccin anterior se puede poner como:

Al := MEMORIA[ DS:Bx ]

La especificacin completa de las expresiones que van dentro de los parntesis rectos es:

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

{ Si | Di } [ + desplazamiento ] |

desplazamiento

Donde la expresin entre {} es obligatoria, la expresin entre [] es opcional y el signo |implica opcin entre dos expresiones.

Fuera del parntesis recto se puede indicar cual es el registro de segmento usado para completar la direccin de memoria. En caso que este no se especifique siempre se asume uno por defecto.

Ejemplos:

Mov Ax, [Bp + 3] Add [Bx + Si ], 4Sub Es:[Bx + Di + 5],Dx

En la Tabla 1 se indican las combinaciones posibles entre registros ndice y los segmentos as como las asignaciones por defecto.

Tabla 1.Combinacin entre registros de segmento e indices.

CSSSDSES

IPSi

SPsi

BPPrefijopor defectoprefijoprefijo

BXPrefijoprefijopor defectoprefijo

SIPrefijoprefijopor defectoprefijo

DIPrefijoprefijopor defectopor defecto(cadenas)

INSTRUCCIONES

Para describir a cada una de las instrucciones usaremos el siguiente formato:CDIGOFormato: CDIGO op1 , op2

Tipo Args: Se indica qu forma puede tomar cada parmetro poniendo debajo del mismo una lista de cdigos entre parntesis que definimos as:

A direccin absoluta inmediata ( 4 bytes ) a direccin 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 particularLgica: Se indica usando pseudo cdigo cual es la lgica de la instruccin.

OFDFIFTFSFZFAFPFCFX---?XXXXDescripcin: Descripcin de la semntica de la instruccin. Banderas:

En la tabla de Banderas se indica cmo afecta a las flags del procesador la ejecucin de la instruccin, usando el siguiente cdigo:

Xafecta siempre el valor de la flag colocando el valor apropiado segn corresponda.

?el valor de la flag luego de la ejecucin de la instruccin es indeterminado

- la ejecucin de la instruccin no afecta el valor de flag

ARITMTICAS

ADDFormato: ADD op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op1 + op2

Descripcin: Suma los dos operandos y almacena el resultado en op1 , por lo tanto ambos deben tener el mismo tipo

OFDFIFTFSFZFAFPFCFX---XXXXXBanderas:

ADCFormato: ADC op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op1 + op2 c

OFDFIFTFSFZFAFPFCFX---XXXXXDescripcin: Idem a ADD pero adems suma el valor del carry. Banderas:

SUBFormato: SUB op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op1

op2

OFDFIFTFSFZFAFPFCFX---XXXXXDescripcin: Idem a ADD pero realiza la resta en lugar de la suma. Banderas:

SBBFormato: SBB op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op1

op2 c

OFDFIFTFSFZFAFPFCFX---XXXXXDescripcin: Idem a SUB pero adems resta el carry. Banderas:

MULFormato: MUL op Tipo Args: ( r,m) Lgica:si op es de tipo byteAx = Al * opsino si op es de tipo palabraDx, Ax = Ax * opfin sisi la mitad superior del resultado es 0CF 0sino

fin si

CF 1OF CFDescripcin: Multiplica sin considerar el signo, el acumulador ( Ax o Ax ) por el operando op segn este ltimo sea de tipo byte o palabra.

OFDFIFTFSFZFAFPFCFX---????XEn caso que op sea de tipo byte ls resultado se almacena en Ax si es de tipo palabra se almacena en el par de registros Ax , Dx colocando la parte ms significativa en Dx .

Banderas:

DIVFormato: DIV op Tipo Args: ( r,m) Lgica:si op es de tipo bytesi Ax div opINT 0

FFhelse

fin si

Al Ax div opAh Ax mod op

fin sisino si op es de tipo palabra si Dx: Ax div opINT 0

FFhelse

fin si

Ax Dx: Ax div opDx Ax mod opError! Objects cannot be created from editing field codes.

Descripcin: Divide sin considerar el signo, el acumulador Ax por el operando op si este ltimo es de tipo byte. Si op es de tipo palabra el nmero dividido porste es Dx: Ax .En caso que op sea de tipo byte el cociente se almacena en Al y el resto en Ah. Si es de tipo palabra el cociente se almacena en Dx y el resto en Ax

OFDFIFTFSFZFAFPFCF?---?????Si el cociente es mayor que el nmero mximo representable ( FFh o FFFFh segn sea el caso), el resultado queda indefinido y se genera una interrupcin tipo 0.

Banderas

NEGFormato: NEG op Tipo Args: ( r,m) Lgica:si op es de tipo byteop FFh opop op 1sino si op es de tipo palabraop FFFFh op

fin si

op op 1Descripcin: Calcula el complemento a 2 de op

OFDFIFTFSFZFAFPFCFBanderas:

X---XXXXX

CBWFormato: CBW Lgica:si Al < 80hAh

00hsino

fin si

Ah FFhDescripcin: Copia el bit 7 del registro AL en todos los bits del registro AH; es decir expande el bit de signo de AL

OFDFIFTFSFZFAFPFCF---------Banderas:

INCFormato:INCop

Tipo Args:

Lgica:

op( r,m)op 1

Descripcin: Incrementa el operando destino.

OFDFIFTFSFZFAFPFCFX---XXXX-Banderas:

DECFormato: DEC op Tipo Args: ( r,m) Lgica: op op 1

OFDFIFTFSFZFAFPFCFX---XXXX-Descripcin: Decrementa el operando destino. Banderas:

LGICAS

ANDFormato: AND op1 , op2Tipo Args: ( r,m) (r,m,i) Lgica:op1

op1

op2CF OF 0

OFDFIFTFSFZFAFPFCF0---XX?X0Descripcin: Calcula el "y" lgico bit a bit entre op1 y op2 . Banderas:

ORFormato: OR op1 , op2Tipo Args: ( r,m) (r,m,i) Lgica:op1

op1

op2CF OF 0Descripcin: Calcula el "o" lgico inclusivo bit a bit entre op1 y op2

OFDFIFTFSFZFAFPFCF0---XX?X0Banderas:

XORFormato: XOR op1 , op2Tipo Args: ( r,m) (r,m,i) Lgica:op1

op1

op2CF OF 0

OFDFIFTFSFZFAFPFCF0---XX?X0Descripcin: Calcula el "o" lgico exclusivo bit a bit entre op1 y op2 . Banderas:

NOTFormato: NOT op

Tipo Args: ( r,m)

Lgica: op1

op1

op2

Descripcin: Calcula el complemento a 1 de op . Es decir, cambia unos por cero y ceros por unos.

OFDFIFTFSFZFAFPFCF---------Banderas:

CMPFormato: CMP op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op2

Descripcin: Resta op1 de op2 pero solo afecta las flags ignorando el resultado. Los operandos quedan inalterados pudindose consultar las flags mediante una operacin de bifurcacin condicional.

OFDFIFTFSFZFAFPFCFX---XXXXXBanderas:

DESPLAZAMIENTO

SAL/SHLFormato: SAL op1 , op2SHL op1 , op2

Tipo Args: ( r,m) (1, CL) Lgica: corre op1 , op2 lugares a la izq.Ej: SAL Al,1

CF AlAntes ?

abcdefghbcdefgh0AlDespues h

Descripcin: Desplaza a la izquierda los bits de op1 el nro. de bits especificado por op2 .Los bits a la derecha se rellenan con ceros.

Si el nro. de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1 debe cargarse en CL.CF contiene luego de la ejecucin el ultimo bit de op1 en ser desplazado

OFDFIFTFSFZFAFPFCFX---XX?XX"fuera" de la representacin.

Banderas:

SHRFormato: SHR op1 , op2

Tipo Args: ( r,m) (1, CL) Lgica: corre op1 , op2 lugares a la der.Ej: SHR Al,1

abcdefghAl CF Antes ?

Al

0abcdefgDespues h

Descripcin: Desplaza a la derecha los bits de op1 el nro. de bits especificado por op2 .Los bits a la derecha se rellenan con ceros.

Si el nro. de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1 debe cargarse en CL.CF contiene luego de la ejecucin el ultimo bit de op1 en ser desplazado

OFDFIFTFSFZFAFPFCFX---XX?XX"fuera" de la representacin.

Banderas:

SARFormato: SAR op1 , op2

Tipo Args: ( r,m) (1, CL)Lgica: corre op1 , op2 lugares a la derecha expandiendo el signo.

Ej: SAR Al,1

abcdefghAl CF Antes ?

Al

aabcdefgDespues h

Descripcin: Desplaza a la derecha los bits de op1 el nro. de bits especificado por op2 .Los bits a la derecha se rellenan con el signo del primero operando.

Si el nro. de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1 debe cargarse en CL.CF contiene luego de la ejecucin el ultimo bit de op1 en ser desplazado

OFDFIFTFSFZFAFPFCFX---XX?XX"fuera" de la representacin.

Banderas:

ROLFormato: ROL op1 , op2

Tipo Args: ( r,m) (1, CL)Lgica: rota op1 , op2 lugares a la izquierda.

Ej: ROL Al,1

CF Al

abcdefghAntes ?

bcdefghaAlDespues a

Descripcin: Rota a la izquierda los bits de op1 el numero de bits especificado por op2

Si el nro. de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1 debe cargarse en CL.CF contiene luego de la ejecucin el ultimo bit de op1 en ser desplazado"fuera" de la representacin.

OFDFIFTFSFZFAFPFCFX-------XOF contiene el xor del CF con el bit ms significativo del resultado.

Banderas:

RORFormato: ROR op1 , op2

Tipo Args: ( r,m) (1, CL)Lgica: rota op1 , op2 lugares a la izquierda.

Ej: ROR Al,1

abcdefghAl CF Antes ?

Al

habcdefgDespues h

Descripcin: Rota a la derecha los bits de op1 el numero de bits especificado por op2

Si el nro. de bits a desplazar es 1, se puede especificar directamente. Si es mayor que 1 debe cargarse en CL.CF contiene luego de la ejecucin el ultimo bit de op1 en ser desplazado"fuera" de la representacin.

OFDFIFTFSFZFAFPFCFX-------XOF contiene el xor del CF con el bit menos significativo del resultado.

Banderas:

MOVIMIENTO e I/O

MOVFormato: MOV op1 , op2

Tipo Args: ( r,m) (r,m,i)

Lgica: op1

op2

Descripcin: Transfiere un byte o una palabra desde el operando fuente al operando destino.Ambos operandos deben ser del mismo tipo (byte o palabra).El contenido especificado por el elemento fuente se copia sobre el elemento destino, quedando inalterado el elemento fuente.

Atencin: No se puede mover memoria a memoria.

OFDFIFTFSFZFAFPFCF---------Banderas:

INFormato: IN op1 , op2Tipo Args: (AL, AX) (i,DX) Lgica:si op1 AlAl I / O(op2 )sino si op1 AXAx I / O(op2 )fin si

Descripcin: Transfiere un byte o una palabra de una puerta de entrada del procesador al registro Al o Ax, respectivamente.

El nro. de la puerta se puede especificar mediante: Un valor fijo (de o a 255).Un valor variable, el contenido en el registro Dx (de 0 a 65535), pudindose acceder a 64K puertas de entrada.

OFDFIFTFSFZFAFPFCF---------Banderas:

OUTFormato: OUT op1 , op2Tipo Args: (i,DX) (Al, Ax) Lgica:si op1 AlI / O(op2 ) Alsino si op1 AxI / O(op2 ) Axfin siDescripcin: Transfiere un byte o una palabra desde el registro Al o Ax a una puerta de salida del procesador

El nro. de la puerta se puede especificar mediante: Un valor fijo (de o a 255).Un valor variable, el contenido en el registro Dx ( de 0 a 65535), pudindose acceder a 64K puertas de salida.

OFDFIFTFSFZFAFPFCF---------Banderas:

MANEJO DE FLAGS

CLC

Formato: CLC Lgica: CF := 0Descripcin: Borra la bandera de acarreo (CF) sin afectar a ninguna otra bandera.

OFDFIFTFSFZFAFPFCF--------0Banderas:

STC

Formato: STC Lgica: CF := 1Descripcin: Pone en 1 la bandera de acarreo (CF) sin afectar a ninguna otra bandera.

OFDFIFTFSFZFAFPFCF--------1Banderas:

CLI

Formato: CLI Lgica: IF := 0Descripcin: Borra la bandera de activacin de interrupciones (IF) y desactiva las interrupciones enmascarables (las que aparecen sobre la linea INTR del procesador).Las interrupciones enmascarables se pueden activar o desactivar. Las interrupciones no enmascarables (las que aparecen sobre lalinea NMI) no se pueden desactivar.

OFDFIFTFSFZFAFPFCF--0------Banderas:

STI

Formato: STI Lgica: IF := 1Descripcin: Pone en 1 la bandera de activacin de interrupciones (IF) y activa las interrupciones enmascarables (las que aparecen sobre la linea INTR del procesador)

OFDFIFTFSFZFAFPFCFUna interrupcin pendiente no ser reconocida hasta que no se haya ejecutado la instruccin que sigue a STI.

Banderas:

--1------

Microprocesador 8086Notas del CursoArquitectura de Computadores 2 19 Facultad de Ingeniera

BIFURCACIN INCONDICIONAL

CALLFormato: CALL op1Tipo Args: (R,M,a,A,W) Lgica:Si llamada FARPUSH CS PUSH IPCS := segmento op1IP := offset op1sino { llamada NEAR }PUSH IP IP := op1fin si

Descripcin: Modifica el flujo de control, cambiando el puntero de programa (CS:IP) a la direccin indicada por op1 , guardando previamente en la pila la direccin de la instruccin siguiente, para volver a esta instruccin una vez ejecutado el procedimiento.

El procedimiento llamado puede estar:

Dentro del mismo segmento (llamada NEAR). En este caso, se almacena en la pila el desplazamiento de la instruccin siguiente.

En otro segmento (llamada FAR). En este caso se almacena en la pila primero el segmento y segundo el desplazamiento de la instruccin siguiente.

La llamada puede ser a su vez:Directa, es decir op1 es el valor a asignar a el puntero de instruccin. Se supone siempre un salto NEAR a menos que se indique lo contrario.Indirecta, es decir op1 contiene la direccin de memoria donde se encuentra el valor a asignar al puntero de instruccin. Si se utiliza WORD PTR, el contenido es la nueva direccin o desplazamiento. Si en cambio se utiliza DWORD PTR la primera palabra contiene el desplazamiento y la segunda el segmento. De esta forma se pueden hacer llamadas NEAR o FAR, respectivamente.

OFDFIFTFSFZFAFPFCF---------Banderas:

Arquitectura de Computadores 220Facultad de Ingeniera

JMPFormato: JMP op1Tipo Args: (R,M,a,A,W) Lgica:Si llamada FARCS := segmento op1IP := offset op1sino

fin si

IP := op1

OFDFIFTFSFZFAFPFCF---------Descripcin: Igual al CALL sin guardar la direccin de retorno en el stack: Banderas:

RETFormato: RET Lgica:POP IPsi procedimiento FAR POP CSfin si

Descripcin: Retorna de un procedimiento invocado por un CALL, utilizando como direccin de retorno el valor almacenado en el tope del stack.

El ensamblador genera un RET distinto segn el procedimiento sea NEARo FAR:

OFDFIFTFSFZFAFPFCF---------Banderas:

SI es NEAR se asume que en el tope del STACK contiene el nuevo valor de IP.

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.

BIFURCACIN CONDICIONAL

Este conjunto de instrucciones se utilizan para efectuar un salto CONDICIONAL a una direccin de memoria ubicada en el segmento CS a una distancia menor a 128 bytes de la instruccin actual.

Todas verifican cierta condicin que deben cumplir algunos bits del registro de flags para realizar la transferencia de control. Si dicha condicin no se cumple entonces el salto no se realiza.

JA / JNBE (no considera signo)Formato: JA op1 (Jump Above)JNBE op1 (Jump Not Below or Equal) Tipo Args: (d)Lgica:Si CF = 0 y ZF = 0IP op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinCF=0 y ZF=0.

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JA DIR. ; saltar a DIR si a > b

; sin considerar signo

JB / JNAE / JC (no considera signo)Formato: JB op1JNAE op1JC op1Tipo Args: (d) Lgica:Si CF = 1IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinCF=1 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JC DIR. ; saltar a DIR si a < b ; sin considerar signo

JNB / JAE / JNC (no considera signo)Formato: JNB op1JAE op1Tipo Args: (d) Lgica:Si CF = 0IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinCF=0 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNB DIR. ; saltar a DIR si a b

; sin considerar signo

JBE/JNA (no considera signo)Formato: JBE op1JNA op1Tipo Args: (d) Lgica:Si CF = 1 o ZF = 1IP op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinCF=1 o ZF=1.

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNA DIR. ; saltar a DIR si a b

; sin considerar signo

JE/JZFormato: JE op1JZ op1Tipo Args: (d) Lgica:Si ZF = 1IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinZF=1 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JC DIR. ; saltar a DIR si a = b

JG/JNLE (considera signo)Formato: JG op1JNLE op1Tipo Args: (d) Lgica:Si ZF = 0 y SF = OFIP op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinZF=0 y SF=OF .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JG DIR. ; saltar a DIR si a > b

; considerando el signo

JNG/JLE (considera signo)Formato: JNG op1JLE op1Tipo Args: (d) Lgica:Si ZF = 1 o SF OFIP op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinZF=1 y SF OF .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNG DIR. ; saltar a DIR si a b

; considerando el signo

JNE/JNZFormato: JNE op1JNZ op1Tipo Args: (d) Lgica:Si ZF = 0IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinZF=0 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNE DIR. ; saltar a DIR si a b

JNOFormato: JNO op1Tipo Args: (d) Lgica:Si OF = 0IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinOF=0 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

ADD a,b ; a=a+b

JNO DIR. ; saltar a DIR si no hubo overflow

JNSFormato: JNS op1Tipo Args: (d) Lgica:Si SF = 0IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinSF=0 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNS DIR. ; saltar a DIR si a b

JOFormato: JO op1Tipo Args: (d) Lgica:Si OF = 1IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinOF=1.

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

Banderas:

ADD a,b ; a=a+b

OFDFIFTFSFZFAFPFCF---------JO DIR. ; saltar a DIR si hubo overflow

JSFormato: JS op1Tipo Args: (d) Lgica:Si SF = 1IP

op1 + IPDescripcin: Transfiere el control a la instruccin (IP + op1 ) si se cumple la condicinSF=0 .

El desplazamiento es un valor con signo de 8 bits, es decir esta comprendido entre -128 y 127.

Ej:

OFDFIFTFSFZFAFPFCF---------Banderas:

CMP a,b ; comparar a y b

JNS DIR. ; saltar a DIR si a < b

MANEJO DE STACK

El stack del 8086 est implementado utilizando fundamentalmente las operaciones PUSHy POP conjuntamente con los registros SS y SP.

El tope del stack est apuntado por SS:SP y las operaciones PUSH y POP los actualizan de forma de obtener la semntica de stack como veremos ms adelante.

PUSHFormato: PUSH op1Tipo Args: (R,M) Lgica:SP=SP-2MOV SS:[SP],op1Descripcin: Decrementa el puntero del stack, SP y transfiere la palabra especificada por op1 a la direccin SS:SP

OFDFIFTFSFZFAFPFCF---------Banderas:

POPFormato: POP op1Tipo Args: (R,M) Lgica:MOV op1 ,SS:[SP]SP=SP+2

Descripcin: Transfiere la palabra en tope del stack al operando op1 y luego incrementa el puntero del stack, SP.

OFDFIFTFSFZFAFPFCF---------Banderas:

PUSHFFormato: PUSHF Lgica:SP=SP-2MOV SS:[SP],FLAGS

OFDFIFTFSFZFAFPFCF---------Descripcin: Coloca el registro de flags en al tope del stack. Banderas:

POPFFormato: POPF Lgica:SP=SP-2MOV FLAGS, SS:[SP]

OFDFIFTFSFZFAFPFCFXXXXXXXXXDescripcin: Restaura los registros de flags desde el tope del stack. Banderas:

INTERRUPCIONES

La tabla de interrupciones del 8086 se encuentra en la direccin absoluta 0 y ocupa el primer kilobyte de memoria.

Dicha tabla posee 256 entradas de 4 bytes cada una. La entrada i-sima de esta tabla posee la direccin de memoria del manejador de la interrupcin i. Los primeros 2 bytes corresponden al offset del manejador y los ltimos 2 corresponden al segmento del mismo.

INTFormato: INT op1Tipo Args: (i) Lgica:PUSHFIF=0TF=0CALL FAR tabla_int( op1 )

OFDFIFTFSFZFAFPFCF--xx-----Descripcin: Genera una interrupcin software tipo op1 . Banderas:

IRETFormato: IRET Lgica:RETPOPF

Descripcin: Retorna de una interrupcin. Funciona en forma equivalente al RET utilizado para retornar de una llamada CALL con la diferencia que esta instruccin restaura las flags del stack antes de retornar.

OFDFIFTFSFZFAFPFCFXxxxxxxxxBanderas:

CARTILLA REDUCIDA

CARTILLA 8086/88 (Reducida) Curso 1993

INSTRUCCINOP1OP2OPERACINOISZPC

ADD op1 , op2r,mr,m,iop1 op1 op2X XXXX

ADC op1 , op2r,mr,m,iop1 op1 op2 cX XXXX

SUB op1 , op2r,mr,m,iop1 op1 op2X XXXX

SBB op1 , op2r,mr,m,iop1 op1 op2 cX XXXX

MUL opr{DX:AX|AX} {AX|AL}*opX ???X

DIV opr{AX|AL} {DX:AX|AL} div op{DX|AH} {DX:AX|AX} mod op? ????

NEG opr,m\EMBED Equation op op * 1X XXXX

CBWAX AL (expande signo)

INC opr,mop op + 1X XXX

DEC opr,mop op + 1X XXX

AND op1 , op2r,mr,m,iop1 op1 and op2 (2)0 XXX0

OR op1 , op2r,mr,m,iop1 op1 or op2 (2)0 XXX0

XOR op1 , op2r,mr,m,iop1 op1 xor op2 (2)0 XXX0

NOT opr,mop not op (2)

CMP op1 , op2r,mr,m,isetea las flags (3)X XXXX

SAL op1 , op2r,m1,CLcorre op1 , op2 lugares a la izq.X XXXX

SAR op1 , op2r,m1,CLcorre op1 , op2 lugares a la der. (7)X XXXX

SHL op1 , op2r,m1,CLcorre op1 , op2 lugares a la izq.X XXXX

SHR op1 , op2r,m1,CLcorre op1 , op2 lugares a la der.X XXXX

ROL op1 , op2r,m1,CLrota op1 , op2 lugaresX X

ROR op1 , op2r,m1,CLrota op1 , op2 lugaresX X

MOV op1 , op2r,mr,m,iop1 op2 , NO MUEVE MEMORIA A MEMORIA

IN op1 , op2AL,AXi,DX{AL|AX} { I/O{i} | I/O(DX) } (4)

OUT op1 , op2i,DXAL,AX{ I/O{i} | I/O(DX) } {AL|AX} (4)

CLCborra el carry (c)0

STCprende el carry (c)1

CLIdeshabilita interrupciones0

STIhabilita interrupciones1

JMP opa,R,M A,WIP op (5) CS:IP op (6)

CALL opa,R,M A,WPUSH Next IP, IP IP + op (5) PUSH Next IP, PUSH CS, CS:IP op (6)

RETa,R,M A,WPOP IP (5) POP CS, POP IP (6)

CARTILLA 8086/88 (Reducida) Curso 1993

INSTRUCCINOP1OP2OPERACINOISZPC

JA/JNBE opdsi c=0 ^ z=0 IP op + IP

JB/JNAE/JC opdsi c=1 IP op + IP

JNB/JAE opdsi c=0 IP op + IP

JBE/JNA opdsi c=1 or z=1 IP op + IP

JE/JZ opdsi z=1 IP op + IP

JG/JNLE opdsi z=0 ^ s=o IP op + IP

JGE/JNL opdsi s=o IP op + IP

JL/JNGE opdsi so IP op + IP

JNG/JLE opdsi z=1 or so IP op + IP

JNC opdsi c0 IP op + IP

JNE/JNZ opdsi z0 IP op + IP

JNO opdsi o0 IP op + IP

JNS opdsi s0 IP op + IP

JO opdsi o=1 IP op + IP

JS opdsi s=1 IP op + IP

INT op0..ffhPUSHF,PUSH CS,PUSH IP, CS:IP E(op *4)0

IRETPOP IP, POP CS, POPF

PUSH opR,MSP SP - 2, E(SP) op1

POP opR,Mop1 E(SP), SP SP + 2

PUSHFSP SP - 2, E(SP) flags

POPFflags E(SP), SP SP + 2X XXXX

REFERENCIAS:flags : registro con todas las banderas de condicin (O, I, S, Z, P, C) Ultima columna de la tabla.1,0, espacio : set, reset incondicional, no se afecta.X : afectada para reflejar resultado de la operacin.

NOTAS: (1) : la operacin se hace en 16 u 8 bits de acuerdo al tamao de op1. (2) : las operaciones son bit a bit.(3) : las condiciones se setean segn el resultado de la resta .(4) : entrada o salida en la direccin , 8 o 16 bits segn largo de(5) : caso saltos NEAR.(6) : caso saltos FAR.(7) : repite el bit de signo

y no pueden ser memoria a la vez.Direccionamiento: cuando el operando es memoria (m,M,w):- directo: la direccin esta en la instruccin- indirecto: - {BX | BP} [+ {SI | DI}] [+ desplazamiento]- {SI | DI} [+ desplazamiento]- desplazamiento