Sunteți pe pagina 1din 0

LENGUAJEENSAMBLADORPARAMICROPROCESADORES

INTEL80XX/80X86





Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 2
TEMARIO




INTRODUCCION.

I.- DEFINICIONES Y CONCEPTOS PRELIMINARES.
1.- CONCEPTOS BASICOS.
1.1.- EL LENGUAJ E DE MAQUINA Y EL LENGUAJ E ENSAMBLADOR.
1.2.- INTERPRETES, COMPILADORES Y ENSAMBLADORES.
1.3.- EL PROCESO DE LINK, LAS RUTINAS DE RUN-TIME Y LOS SERVICIOS
DEL SISTEMA OPERATIVO.
2.- LA ARQUITECTURA DE LAS COMPUTADORAS PERSONALES IBM Y COMPATIBLES.
3.- LA ARQUITECTURA DE LOS MICROPROCESADORES INTEL.
4.- EL SISTEMA OPERATIVO MS-DOS.
5.- ENSAMBLADORES Y MACROENSAMBLADORES.

II.- EL LENGUAJ E ENSAMBLADOR.
1.- UN EJ EMPLO CLASICO.
2.- EL FORMATO DEL ENSAMBLADOR.
3.- DIRECTIVAS.
4.- CONJ UNTO DE INSTRUCCIONES.
5.- MACROS Y PROCEDIMIENTOS.
6.- INTERRUPCIONES.

III.- CREACION Y DEPURACION DE PROGRAMAS EN LENGUAJ E ENSAMBLADOR
1.- EDICION.
2.- ENSAMBLADO.
3.- LINK.
4.- EJ ECUCION.
5.- DEPURACION.
6.- LA UTILERIA EXE2BIN Y LOS ARCHIVOS .EXE Y .COM .

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.
APENDICE E.- J UEGO DE INSTRUCCIONES DEL 8086, 8087, 80186, 80286 Y 80287.
APENDICE F.- INTERRUPCIONES.
APENDICE G.- EJ EMPLOS ADICIONALES.

BIBLIOGRAFIA.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 3













INTRODUCCION.


El presente trabajo, tal y como lo indica su ttulo, est enfocado al lenguaje
ensamblador de los microprocesadores Intel, particularmente el 8088, 8086, 80186, 80188 y 80286. Sin
embargo, todos los programas generados para estos procesadores corrern en un 80386 80486.
Adicionalmente se proporciona el juego de instrucciones de los coprocesadores matemticos 8087 y 80287,
que es compatible con el de los microprocesadores ya citados.

Este documento trata de abarcar, de la forma ms general, todo aquello que involucra el conocimiento y uso
del lenguaje ensamblador. As, ha sido organizado en tres partes. La primera describe los conocimientos
bsicos que deben poseerse para una mejor comprensin e interpretacin de lo que es el lenguaje
ensamblador y cmo debe ser usado. La segunda parte est dedicada por completo a lo que es el lenguaje
ensamblador, las interrupciones del sistema operativo MS-DOS y el conjunto de instrucciones 8086-80286. La
ltima parte se ha dedicado al proceso de ensamble, la depuracin de programas en ensamblador, y algunas
consideraciones sobre la creacin de programas y su ejecucin.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 4
I.- DEFINICIONES Y CONCEPTOS PRELIMINARES.



1.- CONCEPTOS BASICOS.
1.1.- EL LENGUAJE DE MAQUINA Y EL LENGUAJE ENSAMBLADOR.

Todo procesador, grande o pequeo, desde el de una calculadora hasta el de un supercomputador, ya
sea de propsito general o especfico, posee un lenguaje nico que es capaz de reconocer y ejecutar. Por
razones que resultan obvias, este lenguaje ha sido denominado Lenguaje de Mquina y ms que ser propio de
un computador pertenece a su microprocesador. El lenguaje de mquina est compuesto por una serie de
instrucciones, que son las nicas que pueden ser reconocidas y ejecutadas por el microprocesador. Este
lenguaje es un conjunto de nmeros que representan las operaciones que realiza el microprocesador a travs
de su circuitera interna. Estas instrucciones, por decirlo as, estn grabadas o "alambradas" en el hardware y
no pueden ser cambiadas. El nivel ms bajo al que podemos aspirar a llegar en el control de un
microprocesador es precisamente el del lenguaje de mquina.

Ahora bien, siendo el lenguaje de mquina un conjunto de nmeros, cmo es capaz el
microprocesador de saber cundo un nmero representa una instruccin y cundo un dato? El secreto de esto
reside en la direccin de inicio de un programa y en el estado del microprocesador. La direccin de inicio nos
indica en qu localidad de memoria comienza un programa, y en consecuencia que datos deberemos
considerar como instrucciones. El estado del microprocesador nos permite saber cundo ste espera una
instruccin y cundo ste espera un dato.

Obviamente, el lenguaje de mquina de un microprocesador no puede ser ejecutado por otro
microprocesador de arquitectura distinta, a menos que haya cierto tipo de compatibilidad prevista. Por ejemplo,
un 80486 es capaz de ejecutar lenguaje de mquina propio y soporta el cdigo generado para
microprocesadores anteriores de la misma serie (desde un 8086 hasta un 80386). Por otra parte, un PowerPC
es capaz de ejecutar instrucciones de los microprocesadores Motorola 68xxx y de los Intel 80xx/80x86. En
ambos casos, el diseo de los microprocesadores se hizo tratando de mantener cierto nivel de compatibilidad
con los desarrollados anteriormente. En el segundo caso, este nivel de compatibilidad se extendi a los de otra
marca. Sin embargo, un 8088 no puede ejecutar cdigo de un 80186 o superiores, ya que los procesadores
ms avanzados poseen juegos de instrucciones y registros nuevos no contenidos por un 8088. Un caso similar
es la serie 68xxx, pero de ninguna manera podemos esperar que un Intel ejecute cdigo de un Motorola y
viceversa. Y esto no tiene nada que ver con la compaa, ya que Intel desarrolla otros tipos de
microprocesadores como el 80860 y el iWARP, los cuales no pueden compartir cdigo ni entre ellos ni entre los
80xx/80xxx.

Ahora bien, mientras que con el lenguaje de mquina, nosotros obtenemos un control total del
microprocesador, la programacin en este lenguaje resulta muy difcil y fcil para cometer errores. No tanto por
el hecho de que las instrucciones son slo nmeros, sino porque se debe calcular y trabajar con las direcciones
de memoria de los datos, los saltos y las direcciones de llamadas a subrutinas, adems de que para poder
hacer ejecutable un programa, se deben enlazar las rutinas de run-time y servicios del sistema operativo. Este
proceso es al que se le denomina ensamblado de cdigo. Para facilitar la elaboracin de programas a este
nivel, se desarrollaron los Ensambladores y el Lenguaje Ensamblador.




Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 5

Existe una correspondencia 1 a 1 entre las instrucciones del lenguaje de mquina y las del lenguaje
ensamblador. Cada uno de los valores numricos del lenguaje de mquina tiene una representacin simblica
de 3 a 5 letras como instruccin del lenguaje ensamblador. Adicionalmente, este lenguaje proporciona un
conjunto de pseudo-operaciones (tambien conocidas como directivas del ensamblador) que sirven para definir
datos, rutinas y todo tipo de informacin para que el programa ejecutable sea creado de determinada forma y
en determinado lugar.



1.2.- INTERPRETES, COMPILADORES Y ENSAMBLADORES.

Aun cuando el lenguaje ensamblador fue diseado para hacer ms fcil la programacin de bajo nivel,
esta resulta todava complicada y muy laboriosa. Por tal motivo se desarrollaron los lenguajes de alto nivel, para
facilitar la programacin de los computadores, minimizando la cantidad de instrucciones a especificar. Sin
embargo, esto no quiere decir que el microprocesador ejecute dichos lenguajes. Cada una de las instrucciones
de un lenguaje de alto nivel o de un nivel intermedio, equivalen a varias de lenguaje mquina o lenguaje
ensamblador.

La traduccin de las instrucciones de nivel superior a las de bajo nivel la realizan determinados
programas. Por una parte tenemos los interpretes, como DBase, BASIC, APL, y Lisp. En estos, cada vez que
se encuentra una instruccin, se llama una determinada rutina de lenguaje de mquina que se encarga de
realizar las operaciones asociadas, pero en ningn momento se genera un cdigo objeto y mucho menos un
cdigo ejecutable.

Por otra parte, tenemos los compiladores, como los desarrollados para Fortran, Clipper, COBOL,
Pascal o C, que en vez de llamar y ejecutar una rutina en lenguaje de mquina, stos juntan esas rutinas para
formar el cdigo objeto que, despus de enlazar las rutinas de run-time y llamadas a otros programas y
servicios del sistema operativo, se transformar en el programa ejecutable.

Finalmente, tenemos los ensambladores como los descritos en este trabajo que son como una
versin reducida y elemental de un compilador (pero que de ninguna manera deben considerarse como tales),
ya que lo nico que tienen que hacer es cambiar toda referencia simblica por la direccin correspondiente,
calcular los saltos, resolver referencias y llamadas a otros programas, y realizar el proceso de enlace. Los
ensambladores son programas destinados a realizar el ensamblado de un determinado cdigo.



1.3.- EL PROCESO DE LIGA, LAS RUTINAS DE RUN-TIME Y LOS SERVICIOS DEL
SISTEMA OPERATIVO.

Para crear un programa ejecutable a partir de un cdigo objeto se require que se resulevan las
llamadas a otros programas y a los servicios del sistema operativo, y agregar las rutinas o informacin de run-
time para que el programa pueda ser cargado a memoria y ejecutado. Este proceso es lo que se conoce como
Link o proceso de liga, y se realiza a travs de un ligador o Linker que toma de entrada el cdigo objeto y
produce de salida el cdigo ejecutable.

Las rutinas de run-time son necesarias, puesto que el sistema operativo requiere tener control sobre el
programa en cualquier momento, adems de que la asignacin de recursos y su acceso deben hacerse
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 6
slamente a travs del sistema operativo. Para los computadores personales, esto no es tan complejo como
para otros computadores y sistemas operativos, pero es requerido.
2.- LA ARQUITECTURA DE LAS COMPUTADORAS PERSONALES IBM Y
COMPATIBLES.

Los computadores PC estn compuestos fsicamente por: monitor, teclado, CPU, floppy drives, hard
disk drives, perifricos y componentes adicionales. Lgicamente estn compuestos por el BIOS (Basic Input-
Output System) y el sistema operativo MS-DOS (MicroSoft Disk Operating System).

El teclado se encuentra conectado a un puerto de entrada destinado especficamente para tal
propsito. Este tiene asociado un rea de memoria (buffer) al cual llegan los cdigos de la teclas presionadas
en el teclado.

La CPU est compuesta por la memoria RAM, memoria ROM (donde reside el BIOS), los controladores
de disco, la tarjeta de video, los puertos de entrada-salida y el microprocesador. Los perifricos se encuentran
conectados y asociados por el sistema operativo con un puerto en particular (una vez que el puerto ha sido
abierto).

Las tarjetas controladores de floppy y disco duro se encargan de intercambiar informacin entre
memoria, procesador y unidades de disco. Para tal propsito se reservan en memoria reas specificas, para
servir de buffers en el intercambio de datos del computador con las unidades de disco.

El monitor y la tarjeta de video estn muy relacionados entre s, ya que si bien el monitor se encarga de
desplegar la informacin, no es ste quien la mantiene, sino la memoria designada a la tarjeta de video. Esta
memoria es como cualquier otra, direccionable y modificable, y es en donde se guarda la informacin que
aparece en pantalla.

Debido al tipo de microprocesador empleado, la memoria de la PC se encuentra dividida en una serie
de blocks denominados segmentos, de 64KB cada uno. La memoria es accesada especificando el segmento y
el desplazamiento dentro del segmento (segmento:desplazamiento, para mayor detalle ver el apendice C).
Para las PCs la memoria se clasifica en tres tipos:

- Convencional. Es la memoria de tipo bsico y que abarca las direcciones de 0 a 640KB. En sta es
donde se cargan los programas de usuario y el sistema operativo, y es la que est disponible para equipo XT
(8088,8086, 80186 y 80188).

- Extendida. Esta memoria slo est disponible para procesadores 80286 y mayores (equipo AT,
80386 y 80486). Muchos programas que usan la memoria convencional no pueden usar la memoria extendida
porque las direcciones en memoria extendida estn ms alla de las que el programa puede reconocer.
nicamente las direcciones dentro de los 640KB pueden ser reconocidas por todos los programas. Para
reconocer la memoria extendida se requiere de un manejador de memoria extendida, como HIMEM.SYS que
provee MS-DOS.

- Expandida. Esta es la memoria que se agrega al computador a travs de una tarjeta de expansin, y
que debe ser administrada por un programa especial, como el EMM386.EXE. A diferencia de la memoria
convencional o extendida, la memoria expandida es dividida en bloques de 16K llamados pginas (pages) .
Cuando un programa solicita informacin de memoria expandida el manejador copia la pgina correspondiente
en un rea denominada page frame para poder ser accesada en la memoria extendida.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 7
Como podremos ver, el 8088, 8086, 80188 y 80186 son capaces de direccionar hasta 1 MB de
memoria. Ya hemos indicado que la memoria convencional slo abarca 640KB, as nos quedan 384KB libres.
Esta parte de la memoria es denominada parte alta, y como no est disponible para muchos programas
generalmente se usa para cargar drivers del sistema operativo, programas residentes y datos de hardware
(ROM y pginas de video).


3.- LA ARQUITECTURA DE LOS MICROPROCESADORES INTEL.

Sin importar de que microprocesador se trate, los microprocesadores del 8088 al 80486 usan el
modelo de registros del 8086. Los microprocesadores matemticos 80287 al 80487 utilizan el modelo de
registros expandidos del 8087. Para mayor detalle ver los apndices A y B.

Los microprocesadores matemticos estn diseados exclusivamente para efectuar operaciones
aritmticas de una manera ms rpida y precisa bajo el control de otro procesador razn por la cual se
denominan coprocesadores. Estos tambin poseen un juego de instrucciones de lenguaje de mquina propio.

La diferencia entre los diversos microprocesadores de uso general y los coprocesadores reside en el
nuevo conjunto de instrucciones, registros y sealizadores agregados con cada nueva liberacin de un
procesador superior. Estas adiciones se hicieron con el fin de agregar un mayor poder de cmputo sin alterar la
estructura bsica, para as mantener la compatibilidad con los desarollos anteriores, tanto de software como de
hardware.

La diferencia entre los 8086 y 8088 con los 80186 y 80188 no es muy grande, sta radica en un grupo
de instrucciones que fueron agregadas al 80186 y al 80188. La diferencia entre el 8086 y el 8088, lo mismo que
entre el 80186 y el 80188, es el modelo de memoria que usan ambos procesadores. El 8088 y el 80188 estn
diseados como microprocesadores de 8 bits por lo que el modo de acceso a la memoria es ligeramente
distinto pero compatible con el 8086 y el 80186. Esto se ver con ms detalle en un tema posterior.


4.- EL SISTEMA OPERATIVO MS-DOS.

J unto con todo lo visto anteriormente, y como se mencion anteriormente, uno de los componentes
que caracterizan los computadores personales es su sistema operativo. Una PC puede correr varios sistemas
operativos: CP/M, CP/M-86, XENIX, Windows, PC-DOS, y MS-DOS. Lo que los define es la forma en que
estn integrados sus servicios y la forma en que se accesa a ellos. Esto es precisamente lo que el linker debe
enlazar y resolver.

Aqu nos enfocaremos exclusivamente en el sistema operativo MS-DOS, y lo que se mencione aqu
ser valido para las versiones 3.0 y superiores. Este sistema operativo est organizado de la siguiente
manera:

Comandos Internos (reconocidos y ejecutados por el COMMAND.COM)
Comandos Externos (.EXEs y .COMs)
Utileras y drivers (programas de administracin del sistema)
Shell (Interfaz amigable, slo versiones 4.0 o mayores)
Servicios (Interrupciones)

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 8
Los servicios, ms conocidos como interrupciones o vectores de interrupcin, es parte medular de lo
que es MS-DOS, y no son mas que rutinas definidas por MS-DOS y el BIOS, ubicadas a partir de una localidad
de memoria especfica. La manera de accesar a estas rutinas y a los servicios que ofrecen es mediante una
instruccin que permite ejecutar una interrupcin.

MS-DOS proporciona dos mdulos: IBMBIO.COM (provee una interfaz de bajo nivel para el BIOS) e
IBMDOS.COM (contiene un manejador de archivos y servicios para manejo de registros). En equipos
compatibles estos archivos tienen los nombres IO.SYS y MSDOS.SYS, respectivamente. El acceso a los
servicios del computador se realiza de la siguiente manera:


Programa DOS DOS ROM EXTERNO
de usuario Alto nivel Bajo nivel
peticin de IBMDOS.COM IBMBIO.COM BIOS Dispositivo
I/O



5.- ENSAMBLADORES Y MACROENSAMBLADORES.

Existen varios ensambladores disponibles para ambiente MS-DOS: el IBM Macro Assembler, el Turbo
Assembler de Borland, el Turbo Editassm de Speedware, por citar algunos. Una breve descripcin de cada uno
se propociona a continuacin.

Macro Ensamblador IBM.- Est integrado por un ensamblador y un macroensamblador. En gran
medida su funcionamiento y forma de invocarlo es sumamente similar al de Microsoft. Su forma de uso consiste
en generar un archivo fuente en cdigo ASCII, se procede a generar un programa objeto que es ligado y se
genera un programa .EXE. Opcionalmente puede recurirse a la utilera EXE2BIN de MS-DOS para
transformarlo a .COM. Es capaz de generar un listado con informacin del proceso de ensamble y referencias
cruzadas.

Macro Ensamblador de Microsoft.- Dependiendo de la versin, este ensamblador es capaz de
soportar el juego de instrucciones de distintos tipos de microprocesadores Intel de la serie 80xx/80x86. En su
versin 4.0 este soporta desde el 8086 al 80286 y los coprocesadores 8087 y 80287. Requiere 128KB de
memoria y sistema operativo MS-DOS v2.0 o superior. Trabaja con un archivo de cdigo fuente creado a partir
de un editor y grabado en formato ASCII. Este archivo es usado para el proceso de ensamble y generacin de
cdigo objeto. Posteriormente, y con un ligador, es creado el cdigo ejecutable en formato .EXE.

Turbo Editassm.- Este es desarrollado por Speddware, Inc., y consiste de un ambiente integrado que
incluye un editor y utileras para el proceso de ensamble y depuracin. Es capaz de realizar el ensamble lnea a
lnea, conforme se introducen los mnemnicos, y permite revisar listas de referencias cruzadas y contenido de
los registros. Este ensamblador trabaja con tablas en memoria, por lo que la generacin del cdigo ejecutable
no implica la invocacin explcita del ligador por parte del programador. Adicionalmente permite la generacin
de listados de mensajes e informacin de cada etapa del proceso y la capacidad de creacin de archivos de
cdigo objeto.

Turbo Assembler.- De Borland Intl., es muy superior al Turbo Editassm. Trabaja de la misma forma,
pero proporciona una interfaz mucho ms fcil de usar y un mayor conjunto de utileras y servicios.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 9
En lo que se refiere a las presentes notas, nos enfocaremos al Microsoft Macro Assembler v4.0. Los
programas ejemplo han sido desarrollados con ste y est garantizado su funcionamiento. Estos mismo
programas posiblemente funcionen con otros ensambladores sin cambios o con cambios mnimos cuando
utilizan directivas o pseudoinstrucciones.


Realmente la diferencia entre los ensambladores radica en la forma de generar el cdigo y en las
directivas con que cuente, aunque estas diferencias son mnimas. El cdigo ensamblador no cambia puesto
que los microprocesadores con los que se va a trabajar son comunes. As, todos los programas que se creen
con un ensamblador en particular podrn ser ensamblados en otro, cambiando las pseudo-operaciones no
reconocidas por el equivalente indicado en el manual de referencia del paquete empleado.

Los programas que componen el Macro Ensamblador Microsoft v4.0 son los siguientes:

Programa Descripcin
MASM.EXE Microsoft Macro Assembler
LINK.EXE Microsoft 8086 object linker
SYMDEB.EXE Microsoft Symbolic Debuger Utility
MAPSYM.EXE Microsoft Symbol File Generator
CREF.EXE Microsoft Cross-Reference Utility
LIB.EXE Microsoft Library Manager
MAKE.EXE Microsoft Program Maintenance Utility
EXEPACK.EXE Microsoft EXE File Compression Utility
EXEMOD.EXE Microsoft EXE File Header Utility
COUNT.ASM Sample source file for SYMDEB session
README.DOC Updated information obtained after the manual
was printed.

El Microsoft Macro Assembler v4.0 crea cdigo ejecutable para procesadores 8086, 8088, 80186,
80188, 80286, 8087 y 80287. Adems es capaz de aprovechar las instrucciones del 80286 en la creacin de
cdigo protegido y no protegido.

El trmino macroensamblador es usado para indicar que el ensamblador en cuestin tiene la capacidad
de poder ensamblar programas con facilidad de macro. Una macro es una pseudo-instruccin que define un
conjunto de instrucciones asociadas a un nombre simblico. Por cada ocurrencia en el cdigo de esta macro, el
ensamblador se encarga de substituir esa llamada por todas las instrucciones asociadas y, en caso de existir,
se dejan los parmetros con los que se estaba llamando la macro y no con los que haba sido definida. Es
importante sealar que no se deja una llamada, como a una subrutina o procedimiento, sino que se incorporan
todas las instrucciones que definen a la macro.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 10
II.- EL LENGUAJE ENSAMBLADOR.



1.- UN EJEMPLO CLASICO.

En esta parte se describe lo que es el lenguaje ensamblador, no al ensamblador o al proceso de
ensamblado. Aqu se tratar todo lo concerniente con el lenguaje ensamblador y el conjunto de directivas del
Microsoft Macro Assembler v4.0. Si bien esto puede resultar bastente extenso y complejo, aqu slo se
describirn las instrucciones y directivas bsicas.

Para comenzar veamos un pequeo ejemplo que ilustra el formato del programa fuente. Este ejemplo
est completamente desarrollado en lenguaje ensamblador que usa servicios o funciones de MS-DOS (system
calls) para imprimir el mensaje Hola mundo!! en pantalla.

; HOLA. ASM
; Programa clasico de ejemplo. Despliega una leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS

DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS

CODE SEGMENT ; Segmento de Codigo
ASSUME CS:CODE, DS:DATA, SS:STACK

INICIO: ; Punto de entrada al programa
MOV AX,DATA ; Pone direccion en AX
MOV DS,AX ; Pone la direccion en los registros
MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje
MOV AH,09H ; Funcion: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Funcion: Terminar
INT 21H
CODE ENDS
END INICIO ; Marca fin y define INICIO


La descripcin del programa es como sigue:

1.- Las declaraciones SEGMENT y ENDS definen los segmentos a usar.

2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo del dolar al
final de la cadena (denominado centinela) es requerido por la funcin de visualizacin de la cadena de MS-
DOS. La cadena incluye los cdigos para carriage-return y line-feed.

3.- La etiqueta START en el segmento de cdigo marca el inicio de las instrucciones del programa.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 11

4.- La declaracion DW en el segmento de pila define el espacio para ser usado por el stack del
programa.

5.- La declaracin ASSUME indica que registros de segmento se asociarn con las etiquetas
declaradas en las definiciones de segmentos.

6.- Las primeras dos instrucciones cargan la direccin del segmento de datos en el registro DS. Estas
instrucciones no son necesarias para los segmentos de cdigo y stack puesto que la direccin del segmento de
cdigo siempre es cargado en el registro CS y la direccin de la declaracin del stack segment es
automticamente cargada en el registro SS.

7.- Las ltimas dos instrucciones del segmento CODE usa la funcin 4CH de MS-DOS para regresar el
control al sistema operativo. Existen muchas otras formas de hacer esto, pero sta es la ms recomendada.

8.- La directiva END indica el final del cdigo fuente y especifica a START como punto de arranque.



2.- EL FORMATO DEL ENSAMBLADOR.

De acuerdo a las convenciones y notacin seguidas en el manual del Microsoft Macro Assembler, y que
usaremos nosotros tambin, tenemos:

Notacin Significado
Negritas Comandos, smbolos y parmetros a ser usados como se
muestra.
Itlicas Todo aquello que debe ser reemplazado por el usuario
[ ] Indican un parmetro opcional
,,, Denota un parmetros que puede repetirse varias veces
Separa dos valores mutuamente excluyentes
letra chica Usada para ejemplos. Cdigo y lo que aparece en pantalla.


Cada programa en lenguaje ensamblador es creado a partir de un archivo fuente de cdigo
ensamblador. Estos son archivos de texto que contienen todas las declaraciones de datos e instrucciones que
componen al programa y que se agrupan en reas o secciones, cada una con un propsito especial. Las
sentencias en ensamblador tienen la siguiente sintaxis:

[nombre] mnemnico [operandos] [;comentarios]


En cuanto a la estructura, todos los archivos fuente tienen la misma forma: cero o ms segmentos de
programa seguidos por una directiva END. No hay una regla sobre la estructura u orden que deben seguir las
diversas secciones o reas en la creacin del cdigo fuente de un programa en ensamblador. Sin embargo la
mayora de los programas tiene un segmento de datos, un segmento de cdigo y un segmento de stack, los
cuales pueden ser puestos en cualquier lugar.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 12
Para la definicin de datos y declaracin de instrucciones y operandos el MASM reconoce el conjunto
de caracteres formado por letras maysculas, letras minsculas (excluyendo caracteres acentuados, , ),
nmeros, y los smbolos: ? @ _ $ : . [ ] ( ) {}+- / * & % ! ~ \ =# ; , "

La declaracin de nmeros requiere tener presente ciertas consideraciones. En el MASM un entero se
refiere a un nmero entero: combinacin de dgitos hexadecimales, octales, decimales o binarios, ms una raz
opcional. La raz se especifica con B, Q u O, D, o H. El ensamblador usar siempre la raz decimal por defecto,
si se omite la especificacin de la raz (la cual se puede cambiar con la directiva .RADIX). As nosotros
podemos especificar un entero de la siguiente manera: digitos, digitosB, digitosQ o digitosO, digitosD, digitosH.
Si una D o B aparecen al final de un nmero, stas siempre se considerarn un especificador de raz, e.g. 11B
ser tratado como 11
2
(2
10
), mientras que si se trata del nmero 11B
16
debe introducirse como 11Bh.

Para los nmeros reales tenemos al designador R, que slo puede ser usado con nmeros
hexadecimales de 8, 16, 20 digitos de la forma digitosR. Tambin puede usarse una de las directivas DD, DQ,
y DT con el formato [+-]digitos.digitos[E[+-]digitos].

Las cadenas de carcter y constantes alfanumricas son formadas como caracteres o " caracteres" .
Para referencias simblicas se utilizan cadenas especiales denominadas nombres. Los nombres son cadenas
de caracteres que no se entrecomillan y que deben comenzar con una A..Z a..z _ $ @ los caracteres
restantes pueden ser cualquiera de los permitidos, y solamente los 31 primeros caracteres son reconocidos.


3.- DIRECTIVAS.

El MASM posee un conjunto de instrucciones que no pertenecen al lenguaje ensamblador
propiamente sino que son instrucciones que nicamente son reconocidas por el ensambldor y que han sido
agregadas para facilitar la tarea de ensablamblado, tanto para el programador como para el programa que lo
lleva a cabo. Dichas instrucciones son denominadas directivas. En general, las directivas son usadas para
especificar la organizacin de memoria, realizar ensamblado condicional, definir macros, entrada, salida,
control de archivos, listados, cross-reference, direcciones e informacin acerca de la estructura de un
programa y las declaraciones de datos. El apndice D proporciona una lista completa de estas directivas.

* Conjunto de instrucciones.- Dentro de las directivas ms importantes, tenemos las que establecen
el conjunto de instrucciones a soportar para un microprocesador en especial:

.8086(default).- Activa las instrucciones para el 8086 y 8088 e inhibe las del 80186 y 80286.
.8087(default).- Activa instrucciones para el 8087 y desactiva las del 80287.
.186.- Activa las instrucciones del 80186.
.286c.- Activa instrucciones del 80286 en modo no protegido.
.289p.- Activa instrucciones del 80286 en modo protegido y no protegido.
.287.- Activa las instrucciones para el 80287.

* Declaracin de segmentos.- En lo que respecta a la estructura del programa tenemos las
directivas SEGMENT y ENDS que marcan el inicio y final de un segmento del programa. Un segmento de
programa es una coleccin de instrucciones y/o datos cuyas direcciones son todas relativas para el mismo
registro de segmento. Su sintaxis es:

nombre SEGMENT [alineacin] [combinacin] [clase]
nombre ENDS
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 13
El nombre del segmento es dado por nombre, y debe ser nico. Segmentos con el mismo nombre se
tratan como un mismo segmento. Las opciones alineacin, combinacin, y clase proporcionan informacin al
LINK sobre cmo ajustar los segmentos. Para alineacin tenemos los siguientes valores: byte (usa cualquier
byte de direccin), word (usa cualquier palabra de direccin, 2 bytes/word), para (usa direcciones de parrfos,
16 bytes/parrfo, deafult), y page (usa direcciones de pgina, 256 bytes/page). combinacin define cmo se
combinarn los segmentos con el mismo nombre. Puede asumir valores de: public (concatena todos los
segmentos en uno solo), stack (igual al anterior, pero con direcciones relativas al registro SS, common (crea
segmentos sobrepuestos colocando el inicio de todos en una misma direccin), memory (indica al LINK tratar
los segmentos igual que MASM con public, at address (direccionamiento relativo a address). clase indica el
tipo de segmento, sealados con cualquier nombre. Cabe sealar que en la definicin est permitido el anidar
segmentos, pero no se permite de ninguna manera el sobreponerlos.

* Fin de cdigo fuente.- Otra directiva importante es la que indica el final de un mdulo. Al alcanzarla
el ensamblador ignorar cualquier otra declaracin que siga a sta. Su sintaxis es:

END [expresin]

La opcin expresin permite definir la direccin en la cual el programa iniciar.

* Asignacin de segmentos.- La directiva ASSUME permite indicar cuales sern los valores por
default que asimirn los registros de segmento. Existen dos formas de hacer esto:

ASSUME registrosegmento:nombre,,,
ASSUME NOTHING

NOTHING cancela valores previos.

* Etiquetas.- Las etiquetas son declaradas

nombre:

Donde nombre constituye una cadena de caracteres.

* Declaracin de datos.- Estos se declaran segn el tipo, mediante la regla

[nombre] directiva valor,,,

Donde directiva puede ser DB (bytes), DW (palabras), DD (palabra doble), DQ (palabra cudruple), DT
(diez bytes). Tambin pueden usarse las directivas LABEL (crea etiquetas de instrucciones o datos), EQU
(crea smbolos de igualdad) , y el smbolo = ( asigna absolutos) para declarar smbolos. Estos tienen la
siguiente sintaxis:
nombre = expresion
nombre EQU expresin
nombre LABEL tipo

Donde tipo puede ser BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR.



Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 14
* Declaracin de estructuras.- Para la declaracin de estructuras de datos se emplea la directiva
STRUC. Su sintaxis es:
nombre STRUC
campos
nombre ENDS


4.- CONJUNTO DE INSTRUCCIONES.

El juego completo de instrucciones reconocidas por los procesadores intel 8086 a 80286, junto con los
coprocesadores 8087 y 80287, se enlistan en el apendice E. Como puede verse en dicho apndice, la
mayora de las instrucciones requieren algunos operandos o expresiones para trabajar, y lo cual es vlido
tambin para las directivas. Los operandos representan valores, registros o localidades de memoria a ser
accesadas de alguna manera. Las expresiones combinan operandos y operadores aritmticos y lgicos para
calcular en valor o la direccin a acceder.

Los operandos permitidos se enlistan a continuacin:

Constantes.- Pueden ser nmeros, cadenas o expresiones que representan un valor fijo. Por ejemplo,
para cargar un registro con valor constante usaramos la instruccin MOV indicando el registro y el valor que
cargaramos dicho registro.

mov ax,9
mov al,c
mov bx,65535/3
mov cx,count

Count slo sera vlido si este fue declarado con la directiva EQU.

Directos.- Aqu se debe especificar la direccin de memoria a accesar en la forma segmento:offset.

mov ax,ss:0031h
mov al,data:0
mov bx,DGROUP:block

Relocalizables.- Por medio de un smbolo asociado a una direccin de memoria y que puede ser
usado tambin para llamados.

mov ax, value
call main
mov al,OFFSET dgroup:tabla
mov bx, count

count slo ser vlido si fue declarado con la directiva DW.





Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 15
Contador de localizacin.- Usado para indicar la actual localizacin en el actual segmento durante el
ensamblado. Representado con el smbolo $ y tambin conocido como centinela.


help DB OPCIONES,13,10
F1 DB F1 salva pantalla,13,10
.
.
.
F10 DB F10 exit,13,10,$
DISTANCIA =$-help

Registros.- Cuando se hace referencia a cualquiera de los registros de propsito general, apuntadores,
ndices, o de segmento.

Basados.- Un operador basado representa una direccin de memoria relativa a uno de los registros de
base (BP o BX). Su sintaxis es:

desplazamiento[BP]
desplazamiento[BX]
[desplazamiento][BP]
[BP+desplazamiento]
[BP].desplazamiento
[BP]+desplazamiento

En cada caso la direccin efectiva es la suma del desplazamiento y el contenido del registro.

mov ax,[BP]
mov al,[bx]
mov bx,12[bx]
mov bx,fred[bp]

Indexado.- Un operador indexado representa una direccin de memoria relativa a uno de los registros
ndice (SI o DI). Su sintaxis es:

desplazamiento[DI]
desplazamiento[SI]
[desplazamiento][DI]
[DI+desplazamiento]
[DI].desplazamiento
[DI]+desplazamiento

En cada caso la direccin efectiva es la suma del desplazamiento y el contenido del registro.

mov ax,[si]
mov al,[di]
mov bx,12[di]
mov bx,fred[si]

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 16
Base-indexados.- Un operador base-indexado representa una direccin de memoria relativa a la
combinacin de los registros de base e ndice. Su sintaxis es:

desplazamiento[BP][SI]
desplazamiento[BX][DI]
desplazamiento[BX][SI]
desplazamiento[BP][DI]
[desplazamiento][BP][DI]
[BP+DI+desplazamiento]
[BP+DI].desplazamiento
[DI]+desplazamiento+[BP]

En cada caso la direccin efectiva es la suma del desplazamiento y el contenido del registro.

mov ax,[BP][si]
mov al,[bx+di]
mov bx,12[bp+di]
mov bx,fred[bx][si]


Estructuras.- Su sintaxis es variable.campo. variable es el nombre con que se declar la estructura, y
campo es el nombre del campo dentro de la estructura.

date STRUC
mes DW ?
dia DW ?
aa DW ?
date ENDS

actual date ja,01,84

mov ax,actual.dia
mov actual.aa, 85

Operadores y expresiones.- Se cuenta con los siguientes operadores:

-aritmticos
expresin1 * expresin2
expresin1 / expresin2
expresin1 MOD expresin2
expresin1 + expresin2
expresin1 - expresin2
+ expresin
- expresin





-de corrimiento
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 17
expresin1 SHR contador
expresin1 SHL contador

-relacionales
expresin1 EQ expresin2
expresin1 NE expresin2
expresin1 LT expresin2
expresin1 LE expresin2
expresin1 GT expresin2
expresin1 GE expresin2

- de bit
NOT expresin
expresin1 AND expresin2
expresin1 OR expresin2
expresin1 XOR expresin2

-de ndice
[expresin1] [expresin2]

Ejemplos:
mov al, string[3]
mov string[last],al
mov cx,dgroup:[1] ; igual a mov cx,dgroup:1

-de apuntador
Tipo PTR expresin

Tipo puede ser BYTE 1, WORD 2, DWORD 4, QWORD 8, TBYTE 10, NEAR 0FFFFh, FAR
0FFFEh. Ejemplos:

call FAR PTR subrout3
mov BYTE ptr [array], 1
add al, BYTE ptr [full_word]

-de nombre de campo
estructura.campo

Ejemplos:
inc month.day
mov time.min,0
mov [bx].dest







-de propsito especial.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 18

OFFSET expresion.- Regresa el desplazamiento del operando
mov bx, OFFSET dgroup:array
mov bx, offset subrout3

SHORT etiqueta.- Para un salto de menos de 128 bytes
jmp SHORT loop

LENGTH variable.- Regresa el nmero de elementos de variable segn su tipo
mov cx,length array

SIZE variable.- Regresa el tamao en bytes alojados para variable
mov cx,size array

SEG expresin.- Regresa el valor del segmento para expresin
mov ax, SEG saludo


5.- MACROS Y PROCEDIMIENTOS.

La manera ms fcil de modularizar un programa es dividirlo en dos o ms partes. Para esto, es
necesario que datos, smbolos, y dems valores de un mdulo sean reconocidos por el otro u otros mdulos.
Para este tipo de declaraciones globales existen dos directivas:

PUBLIC nombre,,, que hace la variable, etiqueta o smbolo absoluto disponible para todos los
programas.

EXTRN nombre:tipo,,, que especifica una variable, etiqueta o smbolo externos identificados por
nombre y tipo (que puede ser BYTE, WORD, DWORD, QWORD, TBYTE, NEAR, FAR, o ABS, ste ltimo
para nmeros absolutos).

El siguiente ejemplo ilustra el uso de las directivas. El primer listado corresponde al mdulo principal,
mientras que el segundo al mdulo que contiene una rutina. Ambos mdulos son archivos que se editan por
separado, se ensamblan por separado, pero se ligan juntos.















MODULO PRINCIPAL: MAIN.ASM

NAME main
PUBLIC exit
EXTRN print:near

stack SEGMENT word stack 'STACK'
DW 64 DUP(?)
stack ENDS

data SEGMENT word public 'DATA'
data ENDS

code SEGMENT byte public 'CODE'
ASSUME cs:code, ds:data
start:
mov ax,data ; carga localizacion del segmento
mov ds,ax ; en el registro DS
jmp print ; va a PRINT en el otro modulo
exit:
mov ah,4ch
int 21h
code ENDS
END start


























SUBMODULO: TASK.ASM
NAME task
PUBLIC print
EXTRN exit:near

data SEGMENT word public 'DATA'
entrada DB "Entrando a un submodulo....",13,10,"$"
salida DB ".......saliendo del submodulo.",01,07,13,10,"$"
data ENDS

code SEGMENT byte public 'CODE'
ASSUME cs:code, ds:data
print:
mov ah,06h ; Funcion para borrar pantalla
mov al,0 ; todas las lineas
mov cx,0 ; de 0,0
mov dh,24d
mov dl,79d
mov bh,0 ; atributo en lineas vacias
int 10h ; Servicio de e/s video
mov dx, OFFSET entrada
mov ah,09h
int 21h
mov dx, OFFSET salida
int 21h
jmp exit ; Regresa al otro modulo
code ENDS
END






















La declaracin de macros se hace a travs de las directivas MACRO y ENDM. Su sintaxis es:

nombre MACRO [parmetros,,,]
declaraciones
ENDM

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 20
Parmetros son los valores que se substituirn en la macro cada vez que se haga referencia a sta.

Para la definicin de procedimientos se emplean las directivas PROC y ENDP. Su sintaxis es:

nombre PROC [distancia]
sentencias
nombre ENDP

Distancia, que puede ser NEAR (default) o FAR permiten indicar el tipo de acciones a realizar en
brincos y llamados a subrutinas. nombre se puede usar como direccin en llamados o brincos.


6.- INTERRUPCIONES.

Como se mencion anteriormente la PC esta constituida lgicamente por su BIOS y sistema operativo.
La mayora de las rutinas que controlan al computador estn grabadas en el ROM del BIOS, aunque muchas
rutinas son establecidas por el sistema operativo y se cargan en RAM al momento de encender al computador.
Estas rutinas son denominadas interrupciones y son activadas mediante la instruccin: INT nmero. Una
interrupcin es una operacin que invoca la ejecucin de una rutina especfica que suspende la ejecucin del
programa que la llam, de tal manera que el sistema toma control del computador colocando en el stack el
contenido de los registros CS e IP. El programa suspendido vuelve a activarse cuando termina la ejecucin de
la interrupcin y son restablecidos los registros salvados. Existen dos razones para ejecutar una interrupcin:
(1) intencionalmente como peticin para la entrada o salida de datos de un dispositivo, y (2) un error serio y no
intencional, como sobreflujo o divisin por cero.

El operando de una interrupcin indica cal es la rutina a activar. La direccin de la rutina es localizada
por medio de una tabla que el sistema mantiene a partir de la direccin 0000:0000h. Existen 256 entradas de 4
bytes de longitud, y cada interrupcin proporciona varias funciones. Las interrupciones de 00h a 1Fh
correponden al BIOS y de 20h a FFh son del DOS y BASIC. El apndice F proporciona una lista de las
interrupciones para equipo XT.

















Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 21
III.- CREACION Y DEPURACION DE PROGRAMAS EN LENGUAJE ENSAMBLADOR


1.- EDICION.

Los archivos fuente de cdigo ensamblador deben estar en formato ASCII standard. Para esto puede
usarse cualquier editor que permita crear archivos sin formato, e.g. Edlin, Edit, Write, El editor del Turbo Pascal,
Works, Word, WordStar, etctera. Las declaraciones pueden ser introducidas en maysculas y/o minsculas.
Una buena prctica de programacin es poner todas las palabras reservadas (directivas e instrucciones) en
maysculas y todo lo del usuario en minsculas para fines de facilidad de lectura del cdigo.

Las sentencias pueden comenzar en cualquier columna, no pueden tener ms de 128 caracteres, no
se permiten lineas mltiples ni cdigos de control, y cada lnea debe ser terminada con una combinacin de
line-feed y carriage-return. Los comentarios se declaran con ; y terminan al final de la lnea.


2.- ENSAMBLADO.

El ensamblado se lleva a cabo invocando al MASM. Este puese ser invocado, usando una lnea de
comando, de la siguiente manera:

MASM archivo [,[objeto][,[listado][,[cross]]]]][opciones][;]
Donde:

archivo.- Corresponde al programa fuente. Por default se toma la extensin .ASM.
objeto.- Es el nombre para el archivo objeto.
listado.- Nombre del archivo de listado de ensamblado.
cross.- Es un archivo de referencias cruzadas.
opciones.- Pueden ser:
/A Escribe los segmentos en orden alfabtico
/S Escribe los segmentos en orden del fuente
/Bnum Fija buffer de tamao num
/C Especifica un archivo de referencias cruzadas
/L Especifica un listado de ensamble
/D Crea listado del paso 1
/Dsym Define un smbolo que puede usarse en el ensamble
/Ipath Fija path para bscar archivos a incluir
/ML Mantiene sensitividad de letras (mays./mins) en nombres
/MX Mantiene sensitividad en nombre publicos y externos
/MU Convierte nombres a maysculas
/N Suprime tablas en listados
/P Checa por cdigo impuro
/R Crea cdigo para instrucciones de punto flotante
/E Crea cdigo para emular instrucciones de punto flotante
/T Suprime mensajes de ensable exitoso
/V Despliega estadsticas adicionales en pantalla
/X Incluir condicionales falsos en pantalla
/Z Despliega lneas de error en pantalla
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 22

Si el ; al final se omite es necesario poner todas las comas que se indican. Si no se quiere poner algn
valor basta con dejar la coma.

La otra forma de invocar al ensamblador es slo tecleando MASM y respondiendo a la informacin que
se solicita. Para omitir algn valor slo basta teclear ENTER si dar ningn valor.


3.- LINK.

De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LINK. Este puede ser
invocado de la misma forma que el MASM. Los parmetros que este requiere son:

LINK objeto [,[ejecutable][,[mapa][,[librera]]]]][opciones][;]

Donde:

objeto.- Es el nombre para el archivo .OBJ
ejecutable.- Nombre del archivo .EXE
mapa.- Nombre del archivo mapa
librera.- Nombre del archivo biblioteca de rutinas
Opciones.- Pueden ser:
/HELP Muestra lista de opciones
/PAUSE Pausa en el proceso
/EXEPACK Empaca archivo ejecutable
/MAP Crea mapa se smbolos pblicos
/LINENUMBERS Copia nmero de lineas al mapa
/NOIGNORECASE Mantiene sensitividad en nombres
/NODEFAULTLIBRARYSEARCH No usa bibliotecas por default
/STACK:size Fija el tamao del stack a usar
/CPARMAXALLOC:nmero Fija alojacin mxima de espacio
/HIGH Fija la direccin de carga ms alta
/DSALLOCATE Aloja grupo de datos
/NOGROUPASSOCIATION Ignora asociaciones para direcciones
/OVERLAYINTERRUPT:nmero Asigan nuevo nmero a la INT 03Fh
/SEGMENTS:nmero Procesa un nmero de segmentos
/DOSSEG Sigue la convencin de orden de DOS

4.- EJECUCION.

Para la ejecucin del programa simplemente basta teclear su nombre en el prompt de MS-DOS y
teclear ENTER. Con esto el programa ser cargado en memoria y el sistema proceder a ejecutarlo. El
proceso completo para poder crear un programa ejecutable con el Microsoft Macro Assembler se muestra
abajo.





Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Edicin del
Archivo
Ensamble Liga Ejecucin

Luis Angel Castro Castellanos 23







Y lo que se vera en pantalla sera lo siguiente:

C:\DATA\PROGRAMS\ASM>masm main
Microsoft (R) Macro Assembler Version 4.00
Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved.

Object filename [main.OBJ ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:

50966 Bytes symbol space free

0 Warning Errors
0 Severe Errors

C:\DATA\PROGRAMS\ASM>masm task
Microsoft (R) Macro Assembler Version 4.00
Copyright (C) Microsoft Corp 1981, 1983, 1984, 1985. All rights reserved.

Object filename [task.OBJ ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:

51034 Bytes symbol space free

0 Warning Errors
0 Severe Errors

C:\DATA\PROGRAMS\ASM>link main+task

Microsoft (R) 8086 Object Linker Version 3.05
Copyright (C) Microsoft Corp 1983, 1984, 1985. All rights reserved.

Run File [MAIN.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:

C:\DATA\PROGRAMS\ASM>main
Entrando a un submodulo....
.......saliendo del submodulo.

C:\DATA\PROGRAMS\ASM>
.asm .obj .exe
Creacin de un
archivo sin
formato
MASM programa LINK programa programa
(ASCII)
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 24

5.- DEPURACION.

Para la depuracin de un programa en ensamblador tenemos disponibles dos herramientas. Por un
lado tenemos el debuger que nos proporciona MS-DOS (DEBUG.EXE) y por otro lado tenemos el que nos
proporciona Microsoft (SYMDEB.EXE). Este ltimo trabaja igual que el de MS-DOS pero nos proporciona
muchas ventajas ms. Una de ellas es la facilidad de desplegar el cdigo fuente correspondiente a la
instruccin que se esta ejecutando (si el programa ejecutable fue ensamblado o compilado con un ensamblador
o compilador compatible), nos permite ejecutar comandos del S.O. y nos permite obtener informacin de las
interrupciones de manera simblica.


6.- LA UTILERIA EXE2BIN Y LOS ARCHIVOS .EXE Y .COM .

Para MS-DOS slo existen dos tipo de archivos ejecutables los .COM y .EXE. Ambos archivos difieren
en algunas cosas. Primero, las ventajas de los .EXE son dobles, nos permiten tener archivos reubicables y el
uso de hasta cuatro segmentos (STACK, DATA, EXTRA y CODE) de hasta 64KB cada uno. Un archivo .COM
slo puede tener un segmento de 64KB, en el que se tiene tanto cdigo como pila, y datos. La desventaja de
los .EXE es que agregan 512 bytes como cabecera con informacin para la reubicacin del cdigo. Un .COM
no es reubicable, siempre inicia en la direccin 0100H.

Si nuestro programa no es muy grande 64KB son mas que suficientes. Por lo que conviene crearlo
como .COM, para esto se cuenta con la utilera EXE2BIN.EXE que nos proporciona el sistema operativo. y que
nos permite crear .COM a partir de .EXE . Las restricciones para esto son las suguientes: el archivo a convertir
no debe estar empacado, no debe tener segmento de stack, debe tener slo segmento de cdigo y su tamao
debe ser menor a 64KB.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.
APENDICE A.- MODELO DE REGISTROS DEL 8086

AH AL
DH
CL CH
DL
BH BL




Bit 15 Bit 1
Bit 7 Bit 7 Bit 0 Bit 0
AX (Acumulador)
CX (Contador)
BX (Base)
DX (Datos)
SP (Apuntador de pila)
SI (Indice a fuente)
BP (Apuntador de base)
DI (Indice de destino)

Luis Angel Castro Castellanos 25
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.
APENDICE B.- REGISTROS EXPANDIDOS DEL 8087.




Luis Angel Castro Castellanos 26
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.





Luis Angel Castro Castellanos 27
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.
APENDICE C.- MODELO DE SEGMENTACION DE MEMORIA.

Luis Angel Castro Castellanos 28
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 29
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
(idnticas para el 8088).
.8087 Activa el ensamble de instrucciones 8087. Modo por defecto.
nombre=expresin Asigna el valor de expresin a nombre.
ASSUME segmentregister:segmentname... Selecciona segmentregister que sea el segmento por defecto
para todos los smbolos en el segmento o grupo nombrados. Si
segmentname es NOTHING, ningn 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 smbolos

[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 cudruple (DQ), y 10 bytes (
(DT) de almacenamiento para cada valor.

ELSE Seala el inicio de un bloque alterno dentro de un bloque
condicional.
END [expresin] Seala el fin de un bloque y, opcionalmente, fija el punto de
entrada a expresin.
ENDIF Termina un bloque condicional.
ENDM Termina una macro.
nombre ENDP Marca el final de la definicin de un procedimiento
nombre ENDS Marca el final de la definicin de una estructura o segmento

nombre EQU expresin

Asigna expresin 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.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 30
.ERRE expresin Genera error si expresin es falsa (o)
.ERRIDN <cadena1>,<cadena2> Genera error si las cadenas son idnticas.
ERRNB <argumento> Genera error si el argumento no es blanco.
.ERRNDEF nombre Genera error si nombre no se ha definido.
.ERRNZ expresin Genera error si expresin no es cero (verdadera).
EVEN Si es necesario, incrementa el contador de localidad a un
nmero par y genera una instruccin NOP
EXITM Termina la expansin del bloque de repeticin o macro y
comienza a ensamblar la siguiente declaracin fuera del bloque.
EXTRN nombre:tipo... Declaracin de una variable, etiqueta o smbolo externo.
Nombre GROUP segmentname... Asocia el nombre de un grupo con uno o ms segmentos.
IF expresin Permite el ensamble si expresin es verdadera (no cero).
IF1 Ensambla slo en el paso 1.
IF2 Ensambla slo en el paso 2.
IFB <argumento> Ensambla si argumento es blanco.
IFDEF nombre Ensambla si nombre ya ha sido definido.
IFDIF <argumento1>,<argumento2> Ensambla slo si los argumentos son diferentes.
IFE expresin. Ensambla si expresin es falsa (0).
IFIDN <argumento1>,<argumento2> Ensambla si los argumentos son idnticos.
IFNB <argumento> Ensambla si el argumento no es blanco.
IFNDEF nombre Si nombre no ha sido definido permite el ensamble
INCLUDE filename Inserta cdigo fuente desde el archivo indicado
IRP nombre,<parmetro...> Marca el inicio de un bloque de cdigo que ser repetido tantas
veces como parmetros existan y en cada repeticin nombre
ser reemplazado por cada parmetro.
IRPC nombre,<cadena> Marca el inicio de un bloque de cdigo que ser repetido tantas
veces como caracteres tenga la cadena indicada y en cada
repeticin ser substituido nombre por cada carcter.
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 parmetro... Marca el inicio de la macro nombre y establece cada parmetro
para ser substituido por los respectivos parmetros cuando la
macro sea llamada.
NAME mdulo Fija el nombre del mdulo.
PURGE macro... Borra las macros indicadas.
ORG expresin Fija el contador de localidades expresin.
%OUT texto Despliega texto en pantalla.
nombre PROC tipo Seala el inicio de un procedimiento de determinado tipo.
PAGE longitud,ancho Fija los mrgenes para el listado del programa (en caracteres).
PAGE+ Incrementa la numeracin de pgina.
PAGE Genera un corte de pgina en el listado.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 31
PUBLIC nombre...

Hace que cada variable, nombre, etiqueta o smbolo absoluto
declarado est disponible para el resto de mdulos en el
programa.

RADIX expresin Fija la base a expresin para la introducin de nmeros.
Nombre RECORD campo:ancho[=expresin]... Define una estructura para un registro de 8 16 bits que
contiene uno o ms campos.
REPT expresin Marca el incio de un bloque ser repetido el nmero de veces
indicado por expresin.
.SALL Suprime el listado de las expansiones de macros.
nombre SEGMENT [alineacin][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 condicin IF sea falsa.
nombre STRUC Marca el comienzo en la defincin de una estructura
SUBTTL [texto] Define un subttulo para el listado.
.TFCOND Fija por defecto el listar los bloques condicionales-
TITLE texto Ttulos para los listados de los programas.
.XALL Lista slo aquellas macros que generen cdigo o datos.
.XCREF [nombre...] Suprime el listado de las referencias cruzadas.
.XLIST Suprime el listado de las lneas que sigan.












Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 32
APENDICE E.- JUEGO DE INSTRUCCIONES DEL 8086, 8087, 80186, 80286 Y 80287.

En la siguiente lista de instrucciones, para la descripcin 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 smbolo de 8 o 16 bits
mem un operando de memoria: smbolo, etiqueta, variable.
etiqueta etiqueta de instrucciones.
src fuente en operaciones de cadena
dest destino en operaciones de cadena.


8086/8088

AAA Ajuste ASCII para adicin.
AAD Ajuste ASCII para divisin.
AAM Ajuste ASCII para multiplicacin.
AAS Ajuste ASCII para divisin.
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

Operacin AND a nivel bit.




CALL etiqueta
r/m

Llamado.


CBW Convierte byte a palabra.
CLC Limpia bandera de acarreo.
CLD Limpia bandera de direccin.
CLI Limpia bandera de interrupcin.
CMC Complementa bandera de acarreo.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 33
CMP acum,inmed
r/m,inmed
r/m, reg
reg, r/m
Comparacin
CMPS src,dest Comparacin de cadenas.
CMPSB Compara cadenas byte por byte.
CMPSW Compara cadenas palabra por palabra.
CWD Convierte palabra a palabra doble.
DAA Ajuste decimal para adicin.
DAS Ajuste decimal para substraccin.
DEC r/m
reg
Decremento.

DIV r/m Divisin
ESC inmed, r/m Escape con 6 bits.
HLT Alto.
IDIV r/m Divisin entera.
IMUL r/m Mutiplicacin entera.
IN ccum,inmed
acum, DX
Entrada desde puerto.

INC r/m
reg
Incremento.
INT 3 Interrupcion 3 codificada como un byte.
INT inmed Interrupcin 0-255.
INTO Interrupcin en overflow.
IRET Retorno de interrupcin.
JMP etiqueta
r/m
Brinco incondicional.
J(condicin) 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 direccin.
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.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 34
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 Multiplicacin.
NEG r/m Niega (complemento a 2).
NOP Operacin ociosa.
NOT r/m Invierte valores de bits (complemento a 1).
OR acum, inmed
r/m,inmed
r/m, reg
reg,r/m
Operacin 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
Rotacin a la izquierda 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 despus de recuperar bytes de la pila.
ROL r/m,1
r/m, CL
Rotacin a la izquierda
ROR r/m,1
r/m, CL
Rotacin a la derecha.
SAHF Carga banderas con el valor de AH.

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 35
SAL r/m, 1
r/m, CL
Desplazamiento aritmtico a la izquierda.
SAR r/m, 1
r/m, CL
Desplazamiento aritmtico a la derecha.
SBB acum, inmed
r/m,inmed
r/m, reg
reg,r/m
Subtraccin 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
Dezplazamiento a la izquierda.

SHR r/m, 1
r/m, CL
Dezplazamiento a la derecha.

STC Fija bandera de acarreo.
STD Fija bandera de direccin.
STI Fija bandera de interrupcin.
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
Substraccin.
TEST acum, inmed
r/m,inmed
r/m, reg
reg,r/m
Comparacin.
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
Operacin XOR a nivel bit.





Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 36
8087

F2XM1 Calcula 2
x
-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 despus 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 despus de un WAIT.
FDIV mem Divisin real.
FDIV ST, ST(i) Divisin real desde la pila.
FDIV ST(i), ST Divisin real en la pila.
FDIVP ST(i), ST Divisin real sacando valor de la pila.
FDIVR Divisin real invertida.
FDIVR mem Divisin real invertida desde memoria.
FDIVR ST, ST(i) Divisin real invertida desde la pila.
FDIVR ST(i), ST Divisin real invertida desde la pila.
FDIVRP ST(i), ST Divisin con un real invertido y sacando valor de la pila.
FENI Habilita interrupciones despus de un WAIT.
FFREE Libera elemento de la pila.
FIADD mem Suma entera de un nmero 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 Divisin entera.
FDIVR mem Diviisn entera invertida.
FILD mem Carga un entero de 2, 4 u 8 bytes en la pila.
FIMUL mem Multiplicacin entera de 2 4 bytes.
FINCSTP Incrementa el apuntador de la pila.
FINIT Inicializa el procesador despus 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.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 37
FLDENV mem Carga entorno 8087 (14 bytes).
FLDL2E
Carga log
2
e en el tope de la pila.
FLDL2T Carga log
2
10 en el tope de la pila.
FLDLG2 Carga log
10
2 en el tope de la pila.
FLDLN2 Carga log
e
2 en el tope de la pila.
FLDPI Carga en el tope de la pila.
FLDZ Carga +0.0 en el tope de la pila.
FMUL Multiplicacin real.
MUL mem Multiplicacin 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 Operacin 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 Funcin arcotangente parcial.
FPREM Residuo parcial.
FPTAN Funcin tangente parcial.
FRNDINT Redondea a entero
FRSTOR mem Restablece estado 8087 (94 bytes)
FSAVE mem Conserva el estado 8087 (94 bytes).
FSCALE Escala
FSQRT Raz 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 despus de WAIT.
FSTP mem Guarda real de 4, 8 10 bytes y saca de la pila.
FSTSW mem Almacena la palabra de estado depus 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 Substraccin real invertida.
FSUBR mem Substraccin real invertida desde memoria.
FSUBR ST, ST(i) Substraccin real invertida desde la pila.
FSUBR ST(i), ST Substraccin real invertida a la pila.
FSUBRP ST(i), ST Substraccin real invertida a la pila y saca.
FTST Prueba el tope de la pila.
FWAIT Aguarda que la ltima operacin 8087 termine.
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 38
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.
FFREE ST(i) Intercambia el elemento del tope de la pila y el i-simo
elemento.
FXTRACT Extrae el exponente y significando.
FYL2X Calcula Y log
2
X.
FYL2PI Calcula Y log
2
(x+1)


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
Multiplicacin 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 procedimiento.
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 Rotacin a la izquierda con acarreo
RCR r/m, inmed Rotacin a la derecha con acarreo.
ROL r/m, inmed Rotacin a la izquierda.
ROR r/m, inmed Rotacin a la derecha.
SAL r/m, inmed Desplazamiento aritmtico a la izquierda.
SAR r/m, inmed Desplazamiento aritmtico a la derecha.
SHL r/m, inmed Desplazamiento a la izquierda.
SHR r/m, inmed Desplazamiento a la derecha.













80286 (modo protegido)
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 39

ARPL mem, reg Ajusta peticin de nivel de privilegio.
CLTS Limpia bandera de conmutacin 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 lmite 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.


80287

FSETPM Fija modo protegido.
FSTSW AX Almacena palabra de estado en AX (aguarda).
FNSTSW AX Almacena palabra de estado en AX (no aguarda).


Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 40
APENDICE F.- INTERRUPCIONES.

DIRECCION
(hex)
INTERRUPCION
(hex)
FUNCION
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 graphics
characters ASCII 128-255
80-83 20 DOS program terminate
84-87 21 DOS function call
88-8B 22 DOS terminate address,fix in storage.
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
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 41
Tabladeinterrupciones
Lasprincipalesinterrupcionesdel 8086/8088sonlassiguientes:


Interrupcin
Hex Decimal
Uso
00h 0 Generada por la CPU cuando se intenta hacer una divisin por cero
01h 1 Utilizada par ir paso a paso por los programas (como DEBUG)
02h 2 Interrupcin no enmascarable
03h 3
Utilizada para establecer puntos de ruptura en programas (igual que con
DEBUG)
04h 4
Generada cuando operaciones aritmticas dan operaciones de
desbordamientos
05h 5 Invoca la rutina de servicio de imprimir pantalla de la ROM BIOS
06h 6 Reservada para DOS
07h 7 Reservada para DOS
08h 8 Generada por el tic-tac del reloj del hardware
09h 9 Generada por accin del teclado
0Ah a
0Dh
10 a 13 Reservadas para BIOS
0Eh 14 Seala atencin al diskette (por ejemplo, para sealar operacin completada)
0Fh 15 Utilizada para controlar la impresora
10h 16 Invoca servicios de vdeo de la ROM BIOS
11h 17 Invoca el servicio de lista de equipamiento de ROM BIOS
12h 18 Invoca servicio de tamao de memoria de la ROM BIOS
13h 19 Invoca servicios de disco de la ROM BIOS
14h 20 Invoca servicios de comunicaciones de la ROM BIOS
15h 21 Invoca servicios del sistema de la ROM BIOS
16h 22 Invoca los servicios estndar del teclado de la ROM BIOS
17h 23 Invoca los servicios de la impresora de la ROM BIOS
18h 24 Activa el lenguaje BASIC de la ROM
19h 25
Invoca la rutina cargadora de la secuencia de arranque de la ROM BIOS
(invocarla equivale a hacer un RESET)
1Ah 26 Invoca los servicios de hora y fecha de la ROM BIOS
1Bh 27 Interrupcin de la ROM BIOS para Ctrl-Break
1Ch 28 Interrupcin generada con cada pulso de reloj
1Dh 29 Apunta a la tabla de parmetros de control del vdeo
1Eh 30 Apunta a la tabla de parmetros de la unidad de disco
1Fh 31 Apunta a los caracteres grficos del CGA
20h 32 Invoca al servicio de terminacin de programa del DOS
21h 33 Invoca a todos los servicios de llamada a funcin DOS
22h 34 Direccin de la rutina de terminacin del programa del DOS
23h 35 Direccin de la rutina de break del teclado del DOS
24h 36 Direccin de la rutina de errores crticos del DOS
25h 37 Invoca al servicio de lectura absoluta del DOS
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 42
26h 38 Invoca al servicio de escritura absoluta del DOS
27h 39 Termina un programa, quedando residente
28h 40 Dos Idle
29h 41 Interno DOS. PutChar Rpido
2Ah a
2Dh
42 a 46

Reservado para DOS
2Eh 48 Ejecutar comando
2Fh 47 Interrupcin mltiple del DOS
30h a
32h
48 a 50 Reservado para DOS
33h 51 Funciones del driver del ratn
34h a
3Eh
52 a 62 Reservado para DOS
3Fh 63 Gestor Overlay
40h 64 Reasignacin Disquete BIOS
41h 65 Apunta a la tabla de parmetros del disco duro
42h 66 Gestor Vdeo Reasignado
43h 67 Apunta a los caracteres grficos de vdeo (EGA, PS/2)
44h 68 API red Novell
45h 69 Reservado
46h 70 Parmetros del disco duro
47h a
49h
71 a 73 Reservadas para BIOS
4Ah 74 Alarma usuario
4Bh a
5Fh
75 Reservadas para BIOS
60h a
66h
A
102
Reservadas a programas
67h 103 Invoca al gestor de memoria expandida LIM
68h a
69h
104 a 105 Reservadas para BIOS
70h 106 Reloj tiempo real
71h a
74h
107 a 110 Reservadas para BIOS
75h 111 Redirigido a interrupcin NMI
76h a
79h
112 a 114 Reservadas
7Ah 115 Software Novell (API)
7Bh a
7Fh
116 a 120 No usadas
80h a
F0h
121 a Reservado para BASIC
F1h a
FFh
A
255
Reservadas a programas

Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.
Serviciosdelainterrupcin10h(video)

Servicio Descripcin
00 Asignar modo de video
01 Asignar tipo de cursor
02 Situar posicion del cursor
03 Leer posicion del cursor
04 Leer posicion de lapiz optico
05 Seleccionar pagina de pantalla
06 Inicializar ventana o desplazar su contenido en sentido ascendente
07 Inicializar ventana o desplazar su contenido en sentido descendente
08 Obtener atributo y caracter en el cursor
09 Escribir atributo y caracter en el cursor
0A Escribir unicamente caracter en el cursor
0B Asignar paleta de colores
0C Mostrar pixel grafico
0D Leer pixel grafico
0E Mostrar texto en modo teletipo
0F Obtener modo de pantalla actual
10 Mostrar registros de paleta
11 Reservada
12 Reservada
13 Escribir cadena
FE Obtener buffer del video
FF Actualizar buffer del video


Serviciosdelainterrupcin15h(ROMBIOS) Serviciosdelainterrupcin16h(teclado)


Servicio Descripcin
00 Leer caracter teclado
01 Comprobar buffer teclado
02 Obtener byte estado teclado
03 Definir velocidad teclado
05 Colocar en buffer teclado
10 Leer caracter ampliado
11 Comprobar buffer ampliado
12 Obtener byte t.ampliado
Servicio Descripcin
21 Event Wait
84 Leer J oystick
86 Delay (CX DX)
88 Tamao mem.extend.
c0 Parmentros sistema
c1 Datos BIOS extendida









Luis Angel Castro Castellanos 43
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 44

Serviciosdelainterrupcin21h(sistema)

Servicio Descripcin
00 Terminacion de Programa
01 Entrada de caracteres con eco
02 Salida de caracteres
03 Entrada auxiliar
04 Salida auxiliar
05 Salida de impresora
06 E/S directa de consola
07 Entrada de caracteres no filtrados sin eco
08 Entrada de caracteres sin eco
09 Salida de una cadena de caracteres
0A Entrada con buffer
0B Obtener status de entrada
0C Borrar buffer de entrada y aceptar entrada posterior
0D Reset de disco
0E Asignar unidad de disco po defecto
0F Abrir fichero
10 Cerrar fichero
11 Buscar primera coincidencia
12 Buscar siguiente coincidencia
13 Borrar fichero
14 Lectura secuencial
15 Escritura secuencial
16 Crear o truncar
17 Cambiar nombre de fichero
18 Reservado
19 Obtener unidad de disco por defecto
1A Asignar direccion de la zona de transferencia de disco
1B Obtener informacion de ubicacion para unidad por defecto
1C Obtener informacion de ubicacion para unidad especificada
1D Reservado
1E Reservado
1F Reservado
20 Reservado
21 Lectura aleatoria
22 Escritura aleatoria
23 Obtener tamao de fichero
24 Asignar numero de registro aleatorio
25 Asignar vector de interrupcion
26 Crear prefijo del segmento de programa
27 Lectura aleatoria de bloque
28 Escritura aleatoria de bloque
29 Analisis (transcripcion) de nombre de fichero
2A Obtener fecha del sistema
2B Asignar fecha al sistema
2C Obtener hora del sistema
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 45
2D Asignar hora al sistema
2E Activar flag de verificacion
2F Obtener direccion de la zona de transferencia de disco
30 Obtener numero de version MS-DOS
31 Terminar y permanecer residente
32 Reservado
33 Obtener o activar flag de Ctrl-Break
34 Reservado
35 Obtener vector de interrupcion
36 Obtener espacio libre en disco
37 Reservado
38 Obtener o asignar pais
39 Crear subdirectorio
3A Borrar subdirectorio
3B Asignar directorio actual
3C Crear o truncar fichero
3D Abrir fichero
3E Cerrar fichero
3F Leer fichero o dispositivo
40 Escribir en fichero o dispositivo
41 Borrar fichero
42 Desplazar puntero del fichero
43 Obtener o asignar atributos del fichero
44 Control de gestor de dispositivo (IOCTL)
45 Duplicar handle
46 Duplicacion forzada de handle
47 Obtener directorio actual
48 Asignar memoria
49 Liberar memoria
4A Modificar Asignacion de memoria
4B Ejecutar programa
4C Terminar con codigo de retorno
4D Obtener codigo de retorno
4E Buscar primera coincidencia
4F Buscar siguiente coincidencia
50 Reservado
51 Reservado
52 Reservado
53 Reservado
54 Obtener flag de verificacion
55 Reservado
56 Cambiar nombre de fichero
57 Obtener o cambiar fecha y hora de fichero
58 Obtener o asignar estrategia de ubicacion
59 Obtener informacion extendida de error
5A Crear fichero temporal
5B Crear nuevo fichero
5C Bloquear registros
5D Reservado
5E Obtener nombre de la maquina/instalacion de impresora
Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 46
5F Asignar entrada de lista
60 Reservado
61 Reservado
62 Obtener direccion del prefijo del segmento de programa
63 Obtener tabla de encabezado de bytes






































Centro Universitario Salina Cruz Licenciatura en Informtica 3er sem

.

Luis Angel Castro Castellanos 47











BIBLIOGRAFIA.


Murray, Williams H. & Papas, Chris H.; 80286/80386. PROGRAMACION EN LENGUAJ E ENSAMBLADOR;
Osborne/McGraw-Hill, 1989.


Shildt, Herbert; TURBO PASCAL AVANZADO. PROGRAMACION Y TECNICAS; Osborne/McGraw-Hill, 1987.

---------------; DOS 5 A SU ALCANCE; Osborne/McGraw-Hill, 1992.


MICROSOFT MS-DOS VERSION 5.0. GETTING STARTED, USERS GUIDE & REFERENCE; Microsoft
Corporation, 1991.


MICROSOFT MACROASSEMBLER VERSION 4.0 FOR THE MS-DOS OPERATING SYSTEM. USERS
GUIDE & REFERENCE MANUAL; Microsoft Corporation, 1985.

S-ar putea să vă placă și