Está en la página 1de 41

LENGUAJE ENSAMBLADOR PARA MICROPROCESADORES INTEL 80XX/80X86

I+D GNeT Grupo de Trabajo en Nuevas Tecnologas

UTS Unidades Tecnolgicas de Santander BUCARAMANGA

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

TEMARIO

INTRODUCCION. I.- DEFINICIONES Y CONCEPTOS PRELIMINARES. 1.- CONCEPTOS BASICOS. 1.1.- EL LENGUAJE DE MAQUINA Y EL LENGUAJE 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 LENGUAJE ENSAMBLADOR. 1.- UN EJEMPLO CLASICO. 2.- EL FORMATO DEL ENSAMBLADOR. 3.- DIRECTIVAS. 4.- CONJUNTO DE INSTRUCCIONES. 5.- MACROS Y PROCEDIMIENTOS. 6.- INTERRUPCIONES. III.- CREACION Y DEPURACION DE PROGRAMAS EN LENGUAJE ENSAMBLADOR 1.- EDICION. 2.- ENSAMBLADO. 3.- LINK. 4.- EJECUCION. 5.- DEPURACION. 6.- LA UTILERIA EXE2BIN Y LOS ARCHIVOS .EXE Y .COM . APENDICE A.APENDICE B.APENDICE C.APENDICE D.APENDICE E.APENDICE F.APENDICE G.MODELO DE REGISTROS DEL 8086. REGISTROS EXPANDIDOS DEL 8087. MODELO DE SEGMENTACION DE MEMORIA. DIRECTIVAS DEL MASM. JUEGO DE INSTRUCCIONES DEL 8086, 8087, 80186, 80286 Y 80287. INTERRUPCIONES. EJEMPLOS ADICIONALES.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 2/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 3/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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. 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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 4/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 5/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 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 COMPATIBLES.

DE

LAS

COMPUTADORAS

PERSONALES

IBM

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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 6/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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. 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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 7/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.


Junto con todo lo visto anteriormente, y como se mencion anteriomente, 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 Comandos Externos Utileras y drivers Shell Servicios (reconocidos y ejecutados por el COMMAND.COM) ( .EXEs y .COMs ) (programas de administracin del sistema) (Interfaz amigable, slo versiones 4.0 o mayores) (Interrupciones)

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 de usuario peticin de I/O

DOS Alto nivel IBMDOS.COM

DOS Bajo nivel IBMBIO.COM

ROM BIOS

EXTERNO Dispositivo

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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 8/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

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

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 9/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 10/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 STACK DATA SALUDO DATA CODE SEGMENT STACK DW ENDS SEGMENT DB ENDS SEGMENT ; Segmento de Codigo ; Segmento de datos 64 DUP (?) ; Segmento de pila ; Define espacio en la pila

"Hola mundo!!",13,10,"$" ; Cadena

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

END 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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 11/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 Negritas Itlicas [] ,,,
letra chica

Significado Comandos, smbolos y parmetros a ser usados como se muestra. 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 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. 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,
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 12/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 112 (210), mientras que si se trata del nmero 11B16 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 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
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) Pg.: 13/41

06/09/2003

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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. * 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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 14/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

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 . . . F10 DB F10 exit,13,10,$ DISTANCIA = $-help F1 salva pantalla,13,10

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
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 15/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

[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]

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 dia aa Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) DW ? DW ? DW ? 06/09/2003 Pg.: 16/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas) date ENDS actual mov mov date ja,01,84 ax,actual.dia actual.aa, 85

UTS

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 expresin1 SHR contador expresin1 SHL contador -relacionales expresin1 expresin1 expresin1 expresin1 expresin1 expresin1 - de bit NOT expresin expresin1 AND expresin2 expresin1 OR expresin2 expresin1 XOR expresin2 -de ndice [expresin1] [expresin2] ejemplos:
mov mov mov al, string[3] string[last],al cx,dgroup:[1] ; igual a mov cx,dgroup:1

EQ expresin2 NE expresin2 LT expresin2 LE expresin2 GT expresin2 GE expresin2

-de apuntador tipo PTR expresin tipo puede ser BYTE 1, WORD 2, DWORD 4, QWORD 8, TBYTE 10, NEAR 0FFFFh, FAR 0FFFEh. Ejemplos:
call add Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) FAR PTR subrout3 al, BYTE ptr [full_word] 06/09/2003 Pg.: 17/41

mov BYTE ptr [array], 1

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

-de nombre de campo estructura.campo ejemplos:


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

-de propsito especial. 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 PUBLIC EXTRN stack stack main exit print:near

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

data SEGMENT word public 'DATA' Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 18/41

9:31

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

UTS

SUBMODULO: TASK.ASM
NAME PUBLIC EXTRN data salida data code print: mov mov mov mov mov mov int mov mov int mov int jmp code ENDS END ah,06h al,0 cx,0 dh,24d dl,79d bh,0 10h ah,09h 21h dx, OFFSET salida 21h exit ; Regresa al otro modulo ; atributo en lineas vacias ; Servicio de e/s video ; Funcion para borrar pantalla ; todas las lineas ; de 0,0 task print exit:near

SEGMENT word public 'DATA' "Entrando a un submodulo....",13,10,"$" ".......saliendo del submodulo.",01,07,13,10,"$" DB ENDS SEGMENT byte public 'CODE' ASSUME cs:code, ds:data

entrada DB

dx, OFFSET entrada

La declaracin de macros se hace a travs de las directivas MACRO y ENDM. Su sintaxis es: nombre MACRO [parmetros,,,] declaraciones ENDM parmetros son los valores que se substituirn en la macro cada vez que se haga referencia a sta.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 19/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

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 linefeed 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:
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 20/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 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 /PAUSE /EXEPACK /MAP /LINENUMBERS /NOIGNORECASE
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

muestra lista de opciones pausa en el proceso empaca archivo ejecutable crea mapa se smbolos pblicos copia nmero de lineas al mapa mantiene sensitividad en nombres
06/09/2003 Pg.: 21/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

/NODEFAULTLIBRARYSEARCH /STACK:size /CPARMAXALLOC:nmero /HIGH /DSALLOCATE /NOGROUPASSOCIATION /OVERLAYINTERRUPT:nmero /SEGMENTS:nmero /DOSSEG

no usa bibliotecas por default fija el tamao del stack a usar fija alojacin mxima de espacio fija la direccin de carga ms alta aloja grupo de datos ignora asociaciones para direcciones asigan nuevo nmero a la INT 03Fh procesa un nmero de segmentos 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.

Edicin del Archivo

.asm

Ensamble

.obj

Liga

.exe

Ejecucin

Creacin de un archivo sin formato (ASCII)

MASM programa

LINK programa

programa

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]: Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 22/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas) 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>

UTS

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.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 23/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

APENDICE A.- MODELO DE REGISTROS DEL 8086

Bit 15

Bit 1

Bit 7

Bit 0 Bit 7

Bit 0

AH BH CH DH

AL BL CL DL

AX (Acumulador) BX (Base) CX (Contador) DX (Datos)

SP (Apuntador de pila) BP (Apuntador de base) SI (Indice a fuente) DI (Indice de destino)

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 24/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

APENDICE B.- REGISTROS EXPANDIDOS DEL 8087.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 25/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 26/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 27/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

APENDICE C.- MODELO DE SEGMENTACION DE MEMORIA.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 28/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) Pg.: 29/41

06/09/2003

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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. .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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 30/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 31/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

.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. 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.
Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas) 06/09/2003 Pg.: 32/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 33/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

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 reg segreg r/m inmed mem etiqueta src dest uno de los acumuladores: AX o AL. cualquiera de los registros uno de los registros de regmento uno de los operandos generales: registro, memoria, basado, indexado o basadoindexado constante o smbolo de 8 o 16 bits un operando de memoria: smbolo, etiqueta, variable. etiqueta de instrucciones. fuente en operaciones de cadena destino en operaciones de cadena.

8086/8088
AAA AAD AAM AAS ADC acum, inmed r/m,inmed r/m, reg reg, r/m ADD acum,inmed r/m,inmed r/m, reg reg, r/m AND acum,inmed r/m,inmed r/m, reg reg, r/m CALL etiqueta r/m CBW CLC CLD CLI CMC CMP acum,inmed r/m,inmed r/m, reg reg, r/m CMPS src,dest CMPSB CMPSW CWD DAA DAS DEC r/m Ajuste ASCII para adicin. Ajuste ASCII para divisin. Ajuste ASCII para multiplicacin. Ajuste ASCII para divisin. Suma con acarreo.

Suma.

Operacin AND a nivel bit.

Llamado. Convierte byte a palabra. Limpia bandera de acarreo. Limpia bandera de direccin. Limpia bandera de interrupcin. Complementa bandera de acarreo. Comparacin

Comparacin de cadenas. Compara cadenas byte por byte. Compara cadenas palabra por palabra. Convierte palabra a palabra doble. Ajuste decimal para adicin. Ajuste decimal para substraccin. Decremento.
06/09/2003 Pg.: 34/41

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

reg DIV r/m ESC inmed, r/m HLT IDIV r/m IMUL r/m IN accum,inmed acum, DX INC r/m reg INT 3 INT inmed INTO IRET JMP etiqueta r/m J(condicin) etiqueta

Divisin. Escape con 6 bits. Alto. Divisin entera. Mutiplicacin entera. Entrada desde puerto. Incremento. Interrupcion 3 codificada como un byte. Interrupcin 0-255. Interrupcin en overflow. Retorno de interrupcin. Brinco incondicional. 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). Carga AH con las banderas. Carga DS. Carga la direccin. Carga ES. Cierra bus. Carga cadena. Carga byte de cadena en AL. Carga palabra de la cadena en AX. Ciclo. Ciclo mientras igual. Ciclo mientras no igual. Ciclo mientras no cero. Ciclo mientras cero. Mueve un valor del segundo al primer operando

LAHF LDS r/m LEA r/m LES r/m LOCK LODS src LODSB LODSW LOOP etiqueta LOOPE etiqueta LOOPNE etiqueta LOOPNZ etiqueta LOOPZ etiqueta MOV acum,mem r/m,inmed mem, acum r/m, reg r/m,segreg reg, inmed reg,r/m segreg,r/m MOVS dest, src MOVSB MOVSW MUL r/m NEG r/m NOP NOT r/m OR acum, inmed r/m,inmed

Mueve cadena. Mueve cadena byte por byte. Mueve cadena palabra por palabra. Multiplicacin. Niega (complemento a 2). Operacin ociosa. Invierte valores de bits (complemento a 1). Operacin OR a nivel de bit.

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 35/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

r/m, reg reg,r/m OUT DX, accum inmed, acum POP r/m reg segreg POPF PUSH r/m reg segreg PUSHF RCL r/m,1 r/m,CL RCR r/m, 1 r/m, CL REP REPE REPNE REPNZ REPZ RET [inmed] ROL r/m,1 r/m, CL ROR r/m,1 r/m, CL SAHF SAL r/m, 1 r/m, CL SAR r/m, 1 r/m, CL SBB acum, inmed r/m,inmed r/m, reg reg,r/m SCAS dest SCASB SCASW SHL r/m, 1 r/m, CL SHR r/m, 1 r/m, CL STC STD STI STOS dest STOSB STOSW SUB accum, inmed r/m,inmed r/m, reg reg,r/m TEST acum, inmed

Salida por el puerto dado por el primer operando. (inmediato de 8 bits) Recupera valor de la pila.

Recupera banderas. Guarda valor en la pila.

Guarda banderas. Rotacin a la izquierda con acarreo. Rotacin a la derecha con acarreo. Repite. Repite si igual. Repite si no igual. Repite si no cero. Repite si cero. Regresa despus de recuperar bytes de la pila. Rotacin a la izquierda. Rotacin a la derecha. Carga banderas con el valor de AH. Desplazamiento aritmtico a la izquierda. Desplazamiento aritmtico a la derecha. Subtraccin con acarreo.

Explora cadena. Explora cadena para el byte en AL. Explora cadena por la palabra en AX. Dezplazamiento a la izquierda. Dezplazamiento a la derecha. Fija bandera de acarreo. Fija bandera de direccin. Fija bandera de interrupcin. Guarda cadena. Guarda byte en AL en la cadena. Guarda palabra en AX en la cadena. Substraccin.

Comparacin.
06/09/2003 Pg.: 36/41

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

r/m,inmed r/m, reg reg,r/m WAIT XCHG acum, reg r/m,inmed r/m, reg reg,r/m XLAT XOR acum, reg r/m,inmed r/m, reg reg,r/m Aguarda. Intercambio.

Traduce. Operacin XOR a nivel bit.

8087
F2XM1 FABS FADD mem FADD ST, ST(i) FADD ST(i), ST FADDP ST(i), ST FBLD mem FBSTP mem FCHS FCLEX FCOM FCOM ST FCOM ST(i) FCOMP FCOMP ST FCOMP ST(i) FCOMPP FDECSTP FDISI FDIV mem FDIV ST, ST(i) FDIV ST(i), ST FDIVP ST(i), ST FDIVR FDIVR mem FDIVR ST, ST(i) FDIVR ST(i), ST FDIVRP ST(i), ST FENI FFREE FIADD mem FICOM mem FICOMP mem FIDIV mem FDIVR mem FILD mem Calcula 2x-1. Toma valor absoluto del tope de la pila. Suma real. Suma real desde la pila. Suma real a la pila. Suma real y saca de pila. Carga un decimal empacado de 10 bytes en la pila. Almacena un decimal empacado de 10 bytes y saca de pila. Cambia signo del valor en el tope de la pila. Borra las excepciones despus de un WAIT. Compara real. Compara real con el tope de la pila. Compara real con la pila. Compara real y saca de pila. Compara real con el tope de la pila y saca de pila. Compara real con el tope de la pila y saca. Compara real y saca dos valores de la pila. Decrementa el apuntador de la pila. Deshabilita las interrupciones depus de un WAIT. Divisin real. Divisin real desde la pila. Divisin real en la pila. Divisin real sacando valor de la pila. Divisin real invertida. Divisin real invertida desde memoria. Divisin real invertida desde la pila. Divisin real invertida desde la pila. Divisin con un real invertido y sacando valor de la pila. Habilita interrupciones despus de un WAIT. Libera elemento de la pila. Suma entera de un nmero de 2 4 bytes. Compara enteros de 2 4 bytes y saca de la pila. Compara entero de 2 4 bytes y saca de pila. Divisin entera. Diviisn entera invertida. Carga un entero de 2, 4 u 8 bytes en la pila.
06/09/2003 Pg.: 37/41

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

FIMUL mem FINCSTP FINIT FIST mem FISTP mem FISUB mem FISUBR mem FLD mem FLD1 FLDCW mem FLDENV mem FLDL2E FLDL2T FLDLG2 FLDLN2 FLDPI FLDZ FMUL MUL mem FMUL ST, ST(i) FMUL ST(i), ST FMULP ST, ST(i) FNCLEX FNDISI FNENI FNINIT FNOP FNSAVE mem FNSTCW mem FNSTENV mem FNSTSW mem FPATAN FPREM FPTAN FRNDINT FRSTOR mem FSAVE mem FSCALE FSQRT FST FST ST FST ST(i) FSTCW mem FSTENV mem FSTP mem FSTSW mem FSUB FSUB mem FSUB ST, ST(i) FSUB ST(i), ST FSUBP ST, ST(i) FSUBR

Multiplicacin entera de 2 4 bytes. Incrementa el apuntador de la pila. Inicializa el procesador despus de WAIT. Almacena entero de 2 4 bytes. Almacena entero de 2, 4 u 8 bytes y saca de la pila. Resta entero de 2 4 bytes. Resta entera de 2 4 bytes invertida. Carga real de 4, 8 10 bytes en la pila. Pone +1.0 en el tope de la pila. Carga la palabra de control. Carga entorno 8087 (14 bytes). Carga log2 e en el tope de la pila. Carga log2 10 en el tope de la pila. Carga log10 2 en el tope de la pila. Carga loge 2 en el tope de la pila. Carga en el tope de la pila. Carga +0.0 en el tope de la pila. Multiplicacin real. Multiplicacin real desde memoria. Multiplica real desde pila. Multiplica real a la pila. Multiplica real y saca de la pila. Borra excepciones sin WAIT. Inhabilita interrupciones sin WAIT. Habilita interrupciones sin WAIT. Inicializa procesador sin WAIT. Operacin nula. Salva estado 8087 (94 bytes) sin WAIT. Almacena la palabra de control sin WAIT. Guarda el entorno 8087 sin WAIT. Almacena el estado 8087 sin WAIT. Funcin arcotangente parcial. Residuo parcial. Funcin tangente parcial. Redondea a entero Restablece estado 8087 (94 bytes) Conserva el estado 8087 (94 bytes). Escala Raz cuadrada Almacena real. Almacena real desde el tope de la pila. Almacena real desde la pila. Almacena palabra de control con WAIT. Guarda el entorno 8087 despus de WAIT. Guarda real de 4, 8 10 bytes y saca de la pila. Almacena la palabra de estado depus de WAIT. Substrae real. Substrae real desde memora. Substrae real desde la pila. Substrae real a la pila. Substrae real y saca de pila. Substraccin real invertida.
06/09/2003 Pg.: 38/41

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

FSUBR mem FSUBR ST, ST(i) FSUBR ST(i), ST FSUBRP ST(i), ST FTST FWAIT FXAM FXCH FFREE ST FFREE ST(i) FXTRACT FYL2X FYL2PI

Substraccin real invertida desde memoria. Substraccin real invertida desde la pila. Substraccin real invertida a la pila. Substraccin real invertida a la pila y saca. Prueba el tope de la pila. Aguarda que la ltima operacin 8087 termine. Examina el elemento del tope de la pila. Intercambia contenido de los elementos de la pila. Intercambia el elemento del tope de la pila. Intercambia el elemento del tope de la pila y el i-simo elemento. Extrae el exponente y significando. Calcula Y log2 X. Calcula Y log2 (x+1)

80186/80188/80286 (modo no protegido)


BOUND reg, mem ENTER inmed16, inmed8 IMUL reg, inmed reg, r/m, inmed INS mem, DX INSB mem,DX INSW mem DX LEAVE OUTS DX, mem OUTSB DX, mem OUTSW DX, mem POPA PUSH inmed PUSHA RCL r/m, inmed RCR r/m, inmed ROL r/m, inmed ROR r/m, inmed SAL r/m, inmed SAR r/m, inmed SHL r/m, inmed SHR r/m, inmed Detecta valor fuera de rango. Hace elemento en la pila para llamada a procedimiento. Multiplicacin entera. Entrada de cadena desde el puerto DX. Entrada de cadena de bytes desde el puerto DX. Entrada de cadena de palabras desde el puerto DX. Deja procedimeinto. Salida de cadena de bytes o palabras al puerto DX. Salida de cadena de bytes al puerto DX. Salida de cadena de palabras al puerto DX. Saca todos los registros de la pila. Introduce a la pila Introduce todos los registros. Rotacin a la izquierda con acarreo Rotacin a la derecha con acarreo. Rotacin a la izquierda. Rotacin a la derecha. Desplazamiento aritmtico a la izquierda. Desplazamiento aritmtico a la derecha. Desplazamiento a la izquierda. Desplazamiento a la derecha.

80286 (modo protegido)


ARPL mem, reg CLTS LAR reg, mem LGDT mem LIDT mem LLDT mem LMSW mem LSL reg, mem LTR mem Ajusta peticin de nivel de privilegio. Limpia bandera de conmutacin de tareas. Carga derechos de acceso. Carga la tabla de descriptores globales (8 bytes). Carga tabla de descriptores de interrupciones (8 bytes). Carga la tabla de descriptores locales. Carga la palabra de estado. Carga el lmite del segmento. Carga registro de tareas.
06/09/2003 Pg.: 39/41

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

SGDT mem SIDT mem SMSW mem STR mem VERR mem VERW mem

Guarda la tabla de descriptores locales (8 bytes). Guarda tabla de descriptores de interrupciones (8 bytes). Guarda la palabra de estado. Guarda registro de tareas. Verifica acceso de lectura. Verifica acceso de escritura.

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

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 40/41

9:31

GNeT (Grupo de Trabajo en Nuevas Tecnologas)

UTS

APENDICE F.- INTERRUPCIONES.


DIRECCION (hex) 0-3 4-7 8-B C-F 10-13 14-17 18-1F 20-23 24-27 28-37 38-3B 3C-3F 40-43 44-47 48-4B 4C-4F 50-53 54-57 58-5B 5C-5F 60-63 64-67 68-6B 6C-6F 70-73 74-77 78-7B 7C-7F 80-83 84-87 88-8B 90-93 94-97 98-9B 9C-9F A0-FF 100-1FF 200-217 218-3C3 3C4-3FF INTERRUPCION (hex) 0 1 2 3 4 5 6,7 8 9 A,B,C,D E F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 24 25 26 27 28-3F 40-7F 80-85 86-F0 F1-FF FUNCION Division by zero Single step trace Nonmaskable interrupt Breakpoint instruction Overflow Print screen Reserved Timer Keyboard interrupt Reserved Diskette interrupt Reserved Video screen I/O Equipment check Memory size check Diskette I/O Communication I/O Cassete I/O Keyboard input Printer Output ROM Basic entry code Bootstrap loader Time of day Get control on keyboard break Get control on timer interrupt Pointer to video initialization table Pointer to diskette parameter table Pointer to table for graphics characters ASCII 128-255 DOS program terminate DOS function call DOS terminate address DOS fatal error vector DOS absolute disk read DOS absolute disk write DOS terminate, fix in storage Reserved for DOS Not used Reserved by BASIC Used by BASIC interpreter Not Used

Wilder Eduardo Castellanos I+D GNeT (Grupo de Trabajo en Nuevas Tecnologas)

06/09/2003

Pg.: 41/41

9:31

También podría gustarte