Make your own free website on Tripod.com

           

                           Ing. ElectrónicaUNEFA

 

 

Apéndice a.-  Modelo de registros del 8086.

Apéndice b.-  Registros expandidos del 8087.

Apéndice c.-  Modelo de segmentación de memoria.

Apéndice d.-  Directivas del masm.

Apéndice e.-  Juego de instrucciones del 8086, 8087, 80186, 80286 y 80287.

Apéndice f.-   Interrupciones.

 


           APENDICE A.-  MODELO DE REGISTROS DEL 8086


 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

             APENDICE B.-  REGISTROS EXPANDIDOS DEL 8087.

 

 

                          

 

                              


 

 

                            

                                              
 

APENDICE C.-  MODELO DE SEGMENTACION DE MEMORIA.

                              
 

APENDICE D.-  DIRECTIVAS DEL MASM.

 

.186                                                                                      Permite reconocer instrucciones para microprocesadores 8086 y 80186.

 

.286c                                                                                    Permite ensamblar instrucciones 80286 en modo no protegido, 8086 y 80186.

 

.286p                                                                                    Activa el ensamble de instrucciones 80286 en modo protegido, 80186, 8086.

 

.287                                                                           Ensamblar instrucciones 80287 y 8087.

 

.8086                                                                                    Modo por defecto. Activa el ensamble de instrucciones 8086 (idénticas para el 8088).

 

.8087                                                                                    Activa el ensamble de instrucciones 8087. Modo por defecto.

 

nombre=expresión                                              Asigna el valor de expresión a nombre.

 

ASSUME                             

segmentregister:segmentname...                      Selecciona segmentregister que sea el segmento por defecto para todos los símbolos en el segmento o grupo nombrados. Si segmentname es NOTHING, ningún registro es seleccionado.

 

COMMENT  delimitador texto delimitador         Trata como un comentario a todo texto dado entre delimitador y delimitador.

 

.CREF                                                                                  Restablece el listado de referencia cruzada de símbolos.

 

[nombre] DB valor...

[nombre] DW valor...

[nombre] DD valor...

[nombre] DQ valor...

[nombre] DT valor...

 

Aloja e inicializa un byte (DB),  una palabra (DW, 2 bytes),  una palabra doble (DD), una palabra cuádruple (DQ), y 10 bytes ( (DT) de almacenamiento para cada valor.

 

ELSE                                                                                   Señala el inicio de un bloque alterno dentro de un bloque condicional.

 

 

END [expresión]                                                                Señala el fin de un bloque y, opcionalmente, fija el punto de entrada a expresión.

 

ENDIF                                                                      Termina un bloque condicional.

 

ENDM                                                                                  Termina una macro.

 

nombre ENDP                                                                    Marca el final de la definición de un procedimiento

 

nombre ENDS                                                        Marca el final de la definición de una estructura o segmento

 

nombre EQU expresión                                         Asigna expresión a nombre.

 

.ERR                                                                         Genera error.

 

.ERR1                                                                                  Genera error en el paso 1 únicamente.

 

.ERR2                                                                                  Genera error en el paso 2 únicamente.

 

.ERRB <argumento>                                             Genera error si argumento es blanco.

 

.ERRDEF nombre                                                  Genera error si  nombre ya ha sido definido.

 

.ERRDIF <cadena1>,<cadena2>                        Genera error si los nombres son diferentes.

 

.ERRE expresión                                                    Genera error si  expresión es falsa (o)

 

.ERRIDN <cadena1>,<cadena2>                                   Genera error si las cadenas son idénticas.

 

.ERRNB <argumento>                                          Genera error si el argumento no es blanco.

 

.ERRNDEF nombre                                               Genera error si nombre no se ha definido.

 

.ERRNZ expresión                                                             Genera error si expresión no es cero (verdadera).

 

EVEN                                                                                   Si es necesario, incrementa el contador de localidad a un número par y genera una instrucción NOP.

 

EXITM                                                                                  Termina la expansión del bloque de repetición o macro y comienza a ensamblar la siguiente declaración fuera del bloque.

 

EXTRN nombre:tipo...                                                      Declaración de una variable, etiqueta o símbolo externo.

 

nombre GROUP segmentname...                                   Asocia el nombre de un grupo con uno o más segmentos.

 

IF  expresión                                                                       Permite el ensamble si expresión es verdadera (no cero).

 

IF1                                                                             Ensambla sólo en el paso 1.

 

IF2                                                                             Ensambla sólo en el paso 2.

 

IFB <argumento>                                                   Ensambla si argumento  es blanco.

 

IFDEF nombre                                                        Ensambla si nombre ya ha sido definido.

 

IFDIF <argumento1>,<argumento2>                   Ensambla sólo si los argumentos son diferentes.

 

IFE expresión                                                          Ensambla si expresión es falsa (0).

 

IFIDN <argumento1>,<argumento2>                  Ensambla si los argumentos son idénticos.

 

 

IFNB <argumento>                                                Ensambla si el argumento no es blanco.

 

IFNDEF nombre                                                                 Si nombre no ha sido definido permite el ensamble

 

INCLUDE filename                                                           Inserta código fuente desde el archivo indicado

 

IRP nombre,<parámetro...>                                              Marca el inicio de un bloque de código que será repetido tantas veces como parámetros  existan y en cada repetición nombre será reemplazado por cada parámetro.

 

IRPC nombre,<cadena>                                                   Marca el inicio de un bloque de código que será repetido tantas veces como caracteres tenga la cadena indicada y en cada repetición será substituido nombre por cada carácter.

 

nombre ETIQUETA tipo                                                    Crea una nueva variable o etiqueta asignando el valor actual del contador de localidades y el tipo dado a nombre.

 

 

.LALL                                                                       Lista todas las declaraciones en una macro.

 

.LFCOND                                                                            Restablece el listado de bloques condicionales.

 

.LIST                                                                                    Restablece el listado de declaraciones en el listado del programa.

 

LOCAL nombre...                                                   Declara nombre dentro de una macro para que sea reemplazado por el nombre actual, cuando la macro sea expandida

 

nombre MACRO parámetro...                                          Marca el inicio de la macro nombre y establece cada parámetro para ser substituido por los respectivos parámetros cuando la macro sea llamada.

 

NAME módulo                                                        Fija el nombre del módulo.

 

PURGE macro...                                                     Borra las macros indicadas.

 

ORG expresión                                                       Fija el contador de localidades expresión.

 

%OUT texto                                                            Despliega texto en pantalla.

 

nombre PROC tipo                                                            Señala el inicio de un procedimiento de determinado tipo.

 

PAGE longitud,ancho                                                        Fija los márgenes para el listado el programa (en caracteres).

 

PAGE+                                                                     Incrementa la numeración de página.

 

PAGE                                                                       Genera un corte de página en el listado.

 

PUBLIC nombre...                                                  Hace que cada variable, nombre, etiqueta o símbolo absoluto declarado esté disponible para el resto de módulos en el programa.

 

.RADIX expresión                                                              Fija la base a expresión para la introdución de números.

 

nombre RECORD

campo:ancho[=expresión]..                                  Define una estructura para un registro de 8 ó 16 bits que contiene uno o más campos.

 

REPT expresión                                                     Marca el incio de un bloque será repetido el número de veces indicado por expresión.

 

.SAL                                                                          Suprime el listado de las expansiones de macros.

 

nombre  SEGMENT

[alineación][combine]['clase']                               Marca el inicio de un segmento del programa llamado nombre y que posee los atributos indicados.

 

.SFCOND                                                                Suprime el listado de cualquier bloque condicional subsecuente cuya condición IF sea falsa.

 

nombre STRUC                                                      Marca el comienzo en la definción de una estructura.

 

SUBTTL [texto]                                                       Define un subtítulo para el listado.

 

.TFCOND                                                                 Fija por defecto el listar los bloques condicionales.

 

TITLE texto                                                              Títulos para los listados de los programas.

 

.XALL                                                                       Lista sólo aquellas macros que generen código o datos.

 

.XCREF [nombre...]                                                Suprime el listado de las referencias cruzadas.

 

.XLIST                                                                      Suprime el listado de las líneas que sigan.

 

          APENDICE E.-  JUEGO DE INSTRUCCIONES DEL 8086, 8087, 80186, 80286 Y 80287.

 

En la siguiente lista de instrucciones, para la descripción y su sintaxis se recurre a las siguientes abreviaturas:

 

acum.

Uno de los acumuladores: AX o AL.

reg

Cualquiera de los registros

segreg

Uno de los registros de regmento

r/m

Uno de los operandos generales: registro, memoria, basado, indexado o basado-indexado

inmed

Constante o símbolo de 8 o 16 bits

mem

Un operando de memoria: símbolo, etiqueta, variable.

etiqueta

Etiqueta de instrucciones.

src

Fuente en operaciones de cadena

dest

Destino en operaciones de cadena.

                            

                            

Para el 8086/8088 

AAA

Ajuste ASCII para adición.

AAD

Ajuste ASCII para división.

AAM

Ajuste ASCII para multiplicación.

AAS

Ajuste ASCII para división.

ADC   acum, inmed

r/m,inmed

r/m, reg

reg, r/m

Suma con acarreo.

ADD  acum,inmed

r/m,inmed

r/m, reg

reg, r/m

Suma.

AND  acum,inmed

r/m,inmed

r/m, reg

reg, r/m

Operación AND a nivel bit.

CALL etiqueta

r/m

Llamado.

CBW

Convierte byte a palabra.

CLC

Limpia bandera de acarreo.

CLD

Limpia bandera de dirección.

CLI

Limpia bandera de interrupción.

CMC

 

Complementa bandera de acarreo.

 

CMP  acum,inmed

r/m,inmed

r/m, reg

reg, r/m

Comparación

CMPS  src,dest

Comparación de cadenas.

CMPSB

Compara cadenas byte por byte.

CMPSW

Compara cadenas palabra por palabra.

CWD

Convierte palabra a palabra doble.

DAA

Ajuste decimal para adición.

DAS

Ajuste decimal para substracción.

DEC   r/m

reg

Decremento.

DIV    r/m

División.

ESC  inmed, r/m

Escape con 6 bits.

HLT

Alto.

IDIV  r/m

División entera.

IMUL r/m

Mutiplicación entera.

IN      accum,inmed

acum, DX

Entrada desde puerto.

INC    r/m

reg

Incremento.

INT 3

Interrupcion 3 codificada como un byte.

INT    inmed

Interrupción 0-255.

INTO

Interrupción en overflow.

IRET

Retorno de interrupción.

JMP etiqueta

r/m

Brinco incondicional. J(condición) etiqueta Brinca de   acuerdo a las condiciones: A (arriba), AE (arriba     o igual), B (siguiente), BE (siguiente o igual), C (acarreo), CXZ (CX en cero), E (igual), G (mayor), GE (mayor o igual), L (menor), LE (menor o igual), NA (no anterior), NAE (no anterior o igual), NB (no siguiente),  NBE (no siguiente o igual), NC (no acarreo), NE (no igual),  NG (no mayor),  NGE (no mayor o igual),  NL (no menor), NLE (no menor o igual), NO (no sobreflujo), NP (no paridad), NS (no signo), NZ (no cero), O (sobreflujo),  P (paridad), PE (paridad par), PO (paridad impar), S (signo), Z (cero).

LAHF

Carga AH con las banderas.

LDS  r/m

Carga DS.

LEA   r/m

Carga la dirección.

LES  r/m

Carga ES.

LOCK

Cierra bus.

LODS  src

Carga cadena.

LODSB

Carga byte de cadena en  AL.

LODSW

Carga palabra de la cadena en  AX.

LOOP  etiqueta

Ciclo.

LOOPE  etiqueta

Ciclo mientras igual.

LOOPNE  etiqueta

Ciclo mientras no igual.

LOOPNZ  etiqueta

Ciclo mientras no cero.

LOOPZ  etiqueta

Ciclo mientras cero.

MOV  acum,mem

r/m,inmed

mem, acum

r/m, reg

r/m,segreg

reg, inmed

reg,r/m

segreg,r/m

Mueve un valor del segundo al primer operando

MOVS  dest, src

Mueve cadena.

MOVSB

Mueve cadena byte por byte.

MOVSW

Mueve cadena palabra por palabra.

MUL  r/m

Multiplicación.

NEG  r/m

Niega (complemento a 2).

NOP

Operación ociosa.

NOT  r/m

Invierte valores de bits (complemento a1).

OR   acum, inmed

r/m,inmed

r/m, reg

reg,r/m

Operación OR a nivel de bit.

OUT DX, accum

inmed, acum

Salida por el puerto dado por el primer operando (inmediato de 8 bits).

POP  r/m

reg

segreg

Recupera valor de la pila.

POPF

Recupera banderas.

PUSH  r/m

reg

segreg

Guarda valor en la pila.

PUSHF

Guarda banderas.

RCL  r/m,1

 r/m,CL

Rotación a la izquierda con acarreo.

RCR  r/m, 1

r/m, CL

Rotación a la derecha con acarreo.

REP

Repite.

REPE

Repite si igual.

REPNE

Repite si no igual.

REPNZ

Repite si no cero.

REPZ

Repite si cero.

RET  [inmed]

Regresa después de recuperar bytes de la pila.

ROL r/m,1

r/m, CL

Rotación a la izquierda.

ROR r/m,1

r/m, CL

Rotación a la derecha.

SAHF

Carga banderas con el valor de AH.

SAL  r/m, 1

r/m, CL

Desplazamiento aritmético a la izquierda.

SAR  r/m, 1

r/m, CL

Desplazamiento aritmético a la derecha.

SBB  acum, inmed

r/m,inmed

r/m, reg

reg,r/m

Substracción con acarreo.

SCAS dest

Explora cadena.

SCASB

Explora cadena para el byte en AL.

SCASW

Explora cadena por la palabra en AX.

SHL  r/m, 1

r/m, CL

Desplazamiento a la izquierda.

SHR  r/m, 1

r/m, CL

Desplazamiento a la derecha.

STC

Fija bandera de acarreo.

STD

Fija bandera de dirección.

STI

Fija bandera de interrupción.

STOS dest

Guarda cadena.

STOSB

Guarda byte en AL en la cadena.

STOSW

Guarda palabra en AX en la cadena.

SUB  accum, inmed

r/m,inmed

r/m, reg

reg,r/m

Substracción.

TEST acum, inmed

r/m,inmed

r/m, reg

reg,r/m

Comparación.

WAIT

Aguarda.

XCHG acum, reg

r/m,inmed

r/m, reg

reg,r/m

Intercambio.

XLAT

Traduce.

XOR acum, reg

r/m,inmed

r/m, reg

reg,r/m

Operación XOR a  nivel bit.

 Para el 8087 

F2XM1

Calcula 2x-1.

FABS

Toma valor absoluto del tope de la pila.

FADD  mem

Suma real.

FADD  ST, ST(i)

Suma real desde la pila.

FADD  ST(i), ST

Suma real a la pila.

FADDP  ST(i), ST

Suma real y saca de pila.

FBLD  mem

Carga un decimal empacado de 10 bytes en  la pila.

FBSTP  mem

Almacena un decimal empacado de 10 bytes y saca de pila.

FCHS

Cambia signo del valor en el tope de la pila.

FCLEX

Borra las excepciones después de un WAIT.

FCOM

Compara real.

FCOM  ST

Compara real con el tope de la pila.

FCOM  ST(i)

Compara real con la pila.

FCOMP

Compara real y saca de pila.

FCOMP  ST

Compara real con el tope de la pila y saca de pila.

FCOMP  ST(i)

Compara real con el tope de la pila y saca.

FCOMPP

Compara real y saca dos valores de la pila.

FDECSTP

Decrementa el apuntador de la pila.

FDISI

Deshabilita las interrupciones depués de un WAIT.

FDIV  mem

División real.

FDIV  ST, ST(i)

División real desde la pila.

FDIV  ST(i), ST

División real en la pila.

FDIVP ST(i), ST

División real sacando valor de la pila.

FDIVR

División real invertida.

FDIVR  mem

División real invertida desde memoria.

FDIVR  ST, ST(i)

División real invertida desde la pila.

FDIVR  ST(i), ST

División real invertida desde la pila.

FDIVRP ST(i), ST

División con un real invertido y sacando valor de la pila.

FENI

Habilita interrupciones después de un WAIT.

FFREE

Libera elemento de la pila.

FIADD  mem

Suma entera de un número de 2 ó 4 bytes.

FICOM  mem

Compara enteros de 2 ó 4 bytes y saca de la pila.

FICOMP mem

Compara entero de 2 ó 4 bytes y saca de pila.

FIDIV mem

División entera.

FDIVR mem

División entera invertida.

FILD mem

Carga un entero de 2, 4 u 8 bytes en la pila.

FIMUL  mem

Multiplicación entera de 2 ó 4 bytes.

FINCSTP

Incrementa el apuntador de la pila.

FINIT

Inicializa el procesador después de WAIT.

FIST  mem

Almacena entero de 2 ó 4 bytes.

FISTP  mem

Almacena entero de 2, 4 u 8 bytes y saca de la pila.

FISUB  mem

Resta entero de 2 ó 4 bytes.

FISUBR  mem

Resta entera de 2 ó 4 bytes invertida.

FLD  mem

Carga real de 4, 8 ó 10 bytes en la pila.

FLD1

Pone +1.0 en el tope de la pila.

FLDCW mem

Carga la palabra de control.

FLDENV  mem

Carga entorno 8087 (14 bytes).

FLDL2E

Carga log2 e en el tope de la pila.

FLDL2T

Carga log2 10 en el tope de la pila.

FLDLG2

Carga log10 2 en el tope de la pila.

FLDLN2

Carga loge 2 en el tope de la pila.

FLDPI

Carga p en el tope de la pila.

FLDZ

Carga +0.0 en el tope de la pila.

FMUL

Multiplicación real.

MUL  mem

Multiplicación real desde memoria.

FMUL  ST, ST(i)

Multiplica real desde pila.

FMUL  ST(i), ST

Multiplica real a la pila.

FMULP  ST, ST(i)

Multiplica real y saca de la pila.

FNCLEX

Borra excepciones sin WAIT.

FNDISI

Inhabilita interrupciones sin WAIT.

FNENI

Habilita interrupciones sin WAIT.

FNINIT

Inicializa procesador sin WAIT.

FNOP

Operación nula.

FNSAVE  mem

Salva estado 8087 (94 bytes) sin WAIT.

FNSTCW  mem

Almacena la palabra de control sin WAIT.

FNSTENV  mem

Guarda el entorno 8087 sin WAIT.

FNSTSW mem

Almacena el estado 8087 sin WAIT.

FPATAN

Función arcotangente parcial.

FPREM

Residuo parcial.

FPTAN

Función tangente parcial.

FRNDINT

Redondea a entero

FRSTOR mem

Restablece estado 8087 (94 bytes)

FSAVE mem

Conserva el estado 8087 (94 bytes).

FSCALE

Escala

FSQRT

Raíz cuadrada

FST

Almacena real.

FST  ST

Almacena real desde el tope de la pila.

FST  ST(i)

Almacena real desde la pila.

FSTCW   mem

Almacena palabra de control  con WAIT.

FSTENV  mem

Guarda el entorno 8087 después de WAIT.

FSTP  mem

Guarda real de 4, 8 ó 10 bytes y saca de la pila.

FSTSW  mem

Almacena la palabra de estado depués de WAIT.

FSUB

Substrae real.

FSUB mem

Substrae real desde memora.

FSUB ST, ST(i)

Substrae real desde la pila.

FSUB ST(i), ST

Substrae real a la pila.

FSUBP ST, ST(i)

Substrae real y saca de pila.

FSUBR

Substracción real invertida.

FSUBR  mem

Substracción real invertida desde memoria.

FSUBR  ST, ST(i)

Substracción real invertida desde la pila.

FSUBR  ST(i), ST

Substracción real invertida a la pila.

FSUBRP ST(i), ST

Substracción real invertida a la pila y saca.

FTST

Prueba el tope de la pila.

FWAIT

Aguarda que la última operación 8087 termine.

FXAM

Examina el elemento del tope de la pila.

FXCH

Intercambia contenido de los elementos de la pila.

FFREE ST

Intercambia el elemento del tope de la pila.

FREE ST(i)

 

Intercambia el elemento del tope de la pila y el i-ésimo

elemento.

FXTRACT

Extrae el exponente y significando.

FYL2X

Calcula Y log2 X.

FYL2PI

Calcula Y log2 (x+1)

 Para el 80186/80188/80286 (modo no protegido) 

BOUND  reg, mem

Detecta valor fuera de rango.

ENTER inmed16, inmed8

Hace elemento en la pila para llamada a  procedimiento.

IMUL  reg, inmed

reg, r/m, inmed

Multiplicación entera.

INS  mem, DX

Entrada de cadena desde el puerto DX.

INSB mem,DX

Entrada de cadena de bytes desde el puerto DX.

INSW  mem DX

Entrada de cadena de palabras desde el puerto DX.

LEAVE

Deja procedimeinto.

OUTS DX, mem

Salida de cadena de bytes o palabras al puerto DX.

OUTSB DX,  mem

Salida de cadena de bytes al puerto DX.

OUTSW DX, mem

Salida de cadena de palabras al puerto DX.

POPA

Saca todos los registros de la pila.

PUSH  inmed

Introduce a la pila

PUSHA

Introduce todos los registros.

RCL  r/m, inmed

Rotación a la izquierda con acarreo

RCR  r/m, inmed

Rotación a la derecha con acarreo.

ROL  r/m, inmed

Rotación a la izquierda.

ROR  r/m, inmed

Rotación a la derecha.

SAL  r/m, inmed

Desplazamiento aritmético a la izquierda.

SAR  r/m, inmed

Desplazamiento aritmético a la derecha.

SHL  r/m, inmed

Desplazamiento a la izquierda.

SHR  r/m, inmed

Desplazamiento a la derecha.

 Para el 80286 (modo protegido) 

ARPL  mem, reg

Ajusta petición de nivel de privilegio.

CLTS

Limpia bandera de conmutación de tareas.

LAR reg, mem

Carga derechos de acceso.

LGDT mem

Carga la tabla de descriptores globales (8 bytes).

LIDT mem

Carga tabla de descriptores de interrupciones (8 bytes).

LLDT mem

Carga la tabla de descriptores locales.

LMSW mem

Carga la palabra de estado.

LSL reg, mem

Carga el límite del segmento.

LTR mem

Carga registro de tareas.

SGDT mem

Guarda la tabla de descriptores locales (8 bytes).

SIDT mem

Guarda tabla de descriptores de interrupciones (8 bytes).

SMSW mem

Guarda la palabra de estado.

STR mem

Guarda registro de tareas.

VERR mem

Verifica acceso de lectura.

VERW mem

Verifica acceso de escritura.

 Para el 80287 

FSETPM

Fija modo protegido.

FSTSW AX

Almacena palabra de estado en AX (aguarda).

FNSTSW AX

Almacena palabra de estado en AX (no aguarda).

           APENDICE F.-  INTERRUPCIONES. 

Dirección

(Hex)

Interrupción

(Hex)

Función

0-3

0

Division by zero

4-7

1

Single step trace

8-B

2

Nonmaskable interrupt

C-F

3

Breakpoint instruction

10-13

4

Overflow

14-17

5

Print screen

18-1F

6,7

Reserved

20-23

8

Timer

24-27

9

Keyboard interrupt

28-37

A,B,C,D

Reserved

38-3B

E

Diskette interrupt

3C-3F

F

Reserved

40-43

10

Video screen I/O

44-47

11

Equipment check

48-4B

12

Memory size check

4C-4F

13

Diskette I/O

50-53

14

Communication I/O

54-57

15

Cassete I/O

58-5B

16

Keyboard input

5C-5F

17

Printer Output

60-63

18

ROM Basic entry code

64-67

19

Bootstrap loader

68-6B

1A

Time of day

6C-6F

1B

Get control on keyboard break

70-73

1C

Get control on timer interrupt

74-77

1D

Pointer to video initialization table

78-7B

1E

Pointer to diskette parameter table

7C-7F

1F

Pointer to table for graphicscharacters ASCII 128-255

80-83

20

DOS program terminate

84-87

21

DOS function call

88-8B

22

DOS terminate address

90-93

24

DOS fatal error vector

94-97

25

DOS absolute disk read

98-9B

26

DOS absolute disk write

9C-9F

27

DOS terminate, fix in storage

A0-FF

28-3F

Reserved for DOS

100-1FF

40-7F

Not used

200-217

80-85

Reserved by BASIC

218-3C3

86-F0

Used by BASIC interpreter

3C4-3FF

F1-FF

Not Used