Vous êtes sur la page 1sur 41

LENGUAJE ENSAMBLADOR PARA

MICROPROCESADORES
INTEL 80XX/80X86
M. en C. Eduardo Ren Rodr!ue" #$%&a
Se'(%e)*re +,,-
Seccin de Estudios de Posgrado e Investigacin UPIICSA
TEMARIO
NTRODUCCON.
.- DEFNCONES Y CONCEPTOS PRELMNARES.
1.- CONCEPTOS BASCOS.
1.1.- EL LENGUAJE DE MAQUNA Y EL LENGUAJE ENSAMBLADOR.
1.2.- NTERPRETES, COMPLADORES Y ENSAMBLADORES.
1.3.- EL PROCESO DE LNK, LAS RUTNAS DE RUN-TME Y LOS
SERVCOS
DEL SSTEMA OPERATVO.
2.- LA ARQUTECTURA DE LAS COMPUTADORAS PERSONALES BM Y
COMPATBLES.
3.- LA ARQUTECTURA DE LOS MCROPROCESADORES NTEL.
4.- EL SSTEMA OPERATVO MS-DOS.
5.- ENSAMBLADORES Y MACROENSAMBLADORES.
.- EL LENGUAJE ENSAMBLADOR.
1.- UN EJEMPLO CLASCO.
2.- EL FORMATO DEL ENSAMBLADOR.
3.- DRECTVAS.
4.- CONJUNTO DE NSTRUCCONES.
5.- MACROS Y PROCEDMENTOS.
6.- NTERRUPCONES.
.- CREACON Y DEPURACON DE PROGRAMAS EN LENGUAJE ENSAMBLADOR
1.- EDCON.
2.- ENSAMBLADO.
3.- LNK.
4.- EJECUCON.
5.- DEPURACON.
6.- LA UTLERA EXE2BN Y LOS ARCHVOS .EXE Y .COM .
APENDCE A.- MODELO DE REGSTROS DEL 8086.
APENDCE B.- REGSTROS EXPANDDOS DEL 8087.
APENDCE C.- MODELO DE SEGMENTACON DE MEMORA.
APENDCE D.- DRECTVAS DEL MASM.
APENDCE E.- JUEGO DE NSTRUCCONES DEL 8086, 8087, 80186, 80286 Y 80287.
APENDCE F.- NTERRUPCONES.
APENDCE G.- EJEMPLOS ADCONALES.
BBLOGRAFA.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 2/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
INTRODUCCION.
El presente trabajo, tal y como lo indica su ttulo, est enfocado al lenguaje
ensamblador de los microprocesadores ntel, 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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 3/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
I.. DE/INICIONES 0 CONCEPTOS PRELIMINARES.
+.. CONCEPTOS BASICOS.
+.+.. EL LENGUAJE DE MA1UINA 0 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 ntel 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 ntel ejecute cdigo de un Motorola y
viceversa. Y esto no tiene nada que ver con la compaa, ya que ntel 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 En2a)*&adore2 y el Len!ua3e En2a)*&ador.
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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 4/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
+.4.. INTERPRETES5 COMPILADORES 0 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, BASC, 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.
+.6.. EL PROCESO DE LIGA5 LAS RUTINAS DE RUN.TIME 0 LOS SER7ICIOS DEL
SISTEMA OPERATI7O.
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 89d%!o o*3e(o y produce de salida el 89d%!o e3e8u(a*&e.
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.
4.. LA AR1UITECTURA DE LAS COMPUTADORAS PERSONALES IBM 0
COMPATIBLES.
Los computadores PC estn compuestos fsicamente por: monitor, teclado, CPU,
flopp drives, !ard disk drives, perifricos y componentes adicionales. Lgicamente estn compuestos por el
BOS (Basic nput-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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 5/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
La CPU est compuesta por la memoria RAM, memoria ROM (donde reside el BOS), 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 flopp 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 )ane3ador de )e)or%a e;(end%da, como HMEM.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).
6.. LA AR1UITECTURA 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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 6/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
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.
<.. EL SISTEMA OPERATI7O 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, XENX, 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 nternos (reconocidos y ejecutados por el COMMAND.COM)
Comandos Externos ( .EXEs y .COMs )
Utileras y drivers (programas de administracin del sistema)
Shell (nterfaz amigable, slo versiones 4.0 o mayores)
Servicios (nterrupciones)
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 BOS, 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 BOS) e
IBMDOS.COM (contiene un manejador de archivos y servicios para manejo de registros). En equipos
compatibles estos archivos tienen los nombres IO.S0S y MSDOS.S0S, respectivamente. El acceso a los
servicios del computador se realiza de la siguiente manera:
Pro!ra)a DOS DOS ROM E=TERNO
de u2uar%o A&(o n%$e& Ba3o n%$e&
peticin de BMDOS.COM BMBO.COM BOS Dispositivo
/O
>.. ENSAMBLADORES 0 MACROENSAMBLADORES.
Existen varios ensambladores disponibles para ambiente MS-DOS: el BM 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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 7/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
Ma8ro En2a)*&ador 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 ASC, se procede a generar un programa objeto que es ligado y se genera
un programa .EXE. Opcionalmente puede recurirse a la utilera EXE2BN de MS-DOS para transformarlo a
.COM. Es capaz de generar un listado con informacin del proceso de ensamble y referencias cruzadas.
Ma8ro En2a)*&ador de M%8ro2o?(.- Dependiendo de la versin, este ensamblador es capaz de soportar el
juego de instrucciones de distintos tipos de microprocesadores ntel 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 ASC. 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.
Tur*o Ed%(a22).- Este es desarrollado por Speddware, nc., 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.
Tur*o A22e)*&er.- De Borland ntl., 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 #escripcin
MASM.E=E Microsoft Macro Assembler
LIN@.E=E Microsoft 8086 object linker
S0MDEB.E=E Microsoft Symbolic Debuger Utility
MAPS0M.E=E Microsoft Symbol File Generator
CRE/.E=E Microsoft Cross-Reference Utility
LIB.E=E Microsoft Library Manager
MA@E.E=E Microsoft Program Maintenance Utility
E=EPAC@.E=E Microsoft EXE File Compression Utility
E=EMOD.E=E Microsoft EXE File Header Utility
COUNT.ASM Sample source file for S0MDEB session
README.DOC Updated information obtained after the manual
was printed.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 8/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 9/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
II.. EL LENGUAJE ENSAMBLADOR.
+.. 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 (sstem calls) para imprimir el mensaje Ao&a )undoBB 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
NCO: ; 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
NT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Funcion: Terminar
NT 21H
CODE ENDS
END NCO ; Marca fin y define NCO
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.
4.- La declaracion DC en el segmento de pila define el espacio para ser usado por el stack del programa.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 10/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
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 <CA 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.
4.. EL /ORMATO DEL ENSAMBLADOR.
De acuerdo a las convenciones y notacin seguidas en el manual del Microsoft
Macro $ssembler, y que usaremos nosotros tambin, tenemos:
No(a8%9n S%!n%?%8ado
Ne!r%(a2 Comandos, smbolos y parmetros a ser usados como se
muestra.
%tlicas Todo aquello que debe ser reemplazado por el usuario
[ ] ndican 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 arc!ivo 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:
DnombreE mnemnico DoperandosE D;comentariosE
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, 1 u O, D, o A. 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 .RADI=). As
nosotros podemos especificar un entero de la siguiente manera: digitos, digitosB, digitos1 o digitosO, digitosD,
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 11/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
digitosA. 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, D1, y DT con el
formato D+-Edigitos.digitosDED+-EdigitosE.
Las cadenas de carcter y constantes alfanumricas son formadas como FcaracteresF o GcaracteresG . 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..H I a.." J I $ I @ los caracteres
restantes pueden ser cualquiera de los permitidos, y solamente los 31 primeros caracteres son reconocidos.
6.. DIRECTI7AS.
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.
K Con3un(o de %n2(ru88%one2.- 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.
.808-(default).- Activa instrucciones para el 8087 y desactiva las del 80287.
.+86.- Activa las instrucciones del 80186.
.4868.- Activa instrucciones del 80286 en modo no protegido.
.48,'.- Activa instrucciones del 80286 en modo protegido y no protegido.
.48-.- Activa las instrucciones para el 80287.
K De8&ara8%9n de 2e!)en(o2.- 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 DalineacinE DcombinacinE DFclaseFE
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 LIN@
sobre cmo ajustar los segmentos. Para alineacin tenemos los siguientes valores: *L(e (usa cualquier byte de
direccin), Mord (usa cualquier palabra de direccin, 2 bytes/word), 'ara (usa direcciones de parrfos, 16
bytes/parrfo, deafult), y 'a!e (usa direcciones de pgina, 256 bytes/page). combinacin define cmo se
combinarn los segmentos con el mismo nombre. Puede asumir valores de: 'u*&%8 (concatena todos los
segmentos en uno solo), 2(a8N (igual al anterior, pero con direcciones relativas al registro SS, 8o))on (crea
segmentos sobrepuestos colocando el inicio de todos en una misma direccin), )e)orL (indica al LIN@ tratar
los segmentos igual que MASM con 'u*&%8, a( 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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 12/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
K /%n de 89d%!o ?uen(e.- 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 De&presinE
la opcin e&presin permite definir la direccin en la cual el programa iniciar.
K A2%!na8%9n de 2e!)en(o2.- 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:nombre555
ASSUME NOTAING
NOTAING cancela valores previos.
K E(%Oue(a2.- Las etiquetas son declaradas
nombre:
donde nombre constituye una cadena de caracteres.
K De8&ara8%9n de da(o2.- Estos se declaran segn el tipo, mediante la regla
DnombreE directiva valor555
donde directiva puede ser DB (bytes), DC (palabras), DD (palabra doble), D1 (palabra cudruple), DT (diez
bytes). Tambin pueden usarse las directivas LABEL (crea etiquetas de instrucciones o datos), E1U (crea
smbolos de igualdad) , y el smbolo P ( asigna absolutos) para declarar smbolos. Estos tienen la siguiente
sintaxis:
nombre P e&presion
nombre E1U e&presin
nombre LABEL tipo
donde tipo puede ser B0TE, CORD, DCORD, 1CORD, TB0TE, NEAR, /AR.
K De8&ara8%9n de e2(ru8(ura2.- Para la declaracin de estructuras de datos se emplea la directiva STRUC. Su
sintaxis es:
nombre STRUC
campos
nombre ENDS
<.. 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 e&presiones 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:
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 13/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
Con2(an(e2.- Pueden ser n'meros, cadenas o e&presiones que representan un valor fijo. Por ejemplo, para
cargar un registro con valor constante usaramos la instruccin MO7 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 E1U.
D%re8(o2.- 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
Re&o8a&%"a*&e2.- Por medio de un s(mbolo 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 DC.
Con(ador de &o8a&%"a8%9n.- Usado para indicar la actual localizacin en el actual segmento durante el
ensamblado. Representado con el smbolo Q y tambin conocido como centinela.
help DB OPCONES,13,10
F1 DB F1 salva pantalla,13,10
.
.
.
F10 DB F10 exit,13,10,$
DSTANCA = $-help
Re!%2(ro2.- Cuando se hace referencia a cualquiera de los registros de propsito general, apuntadores,
ndices, o de segmento.
Ba2ado2.- Un operador basado representa una direccin de memoria relativa a uno de los registros de base
(BP o B=). Su sintaxis es:
despla)amiento[BP]
despla)amiento[B=]
[despla)amiento][BP]
[BP+despla)amiento]
[BP].despla)amiento
[BP]+despla)amiento
en cada caso la direccin efectiva es la suma del desplazamiento y el contenido del registro.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 14/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
mov ax,[BP]
mov al,[bx]
mov bx,12[bx]
mov bx,fred[bp]
Inde;ado.- Un operador indexado representa una direccin de memoria relativa a uno de los registros ndice
(SI o DI). Su sintaxis es:
despla)amiento[DI]
despla)amiento[SI]
[despla)amiento][DI]
[DI+despla)amiento]
[DI].despla)amiento
[DI]+despla)amiento
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]
Ba2e.%nde;ado2.- Un operador base-indexado representa una direccin de memoria relativa a la combinacin
de los registros de base e ndice. Su sintaxis es:
despla)amiento[BP][SI]
despla)amiento[B=][DI]
despla)amiento[B=][SI]
despla)amiento[BP][DI]
[despla)amiento][BP][DI]
[BP+DI+despla)amiento]
[BP+DI].despla)amiento
[DI]+despla)amiento+[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]
E2(ru8(ura2.- 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
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 15/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
mov actual.aa, 85
O'eradore2 L e;'re2%one2.- Se cuenta con los siguientes operadores:
-aritmticos
e&presin* K e&presin+
e&presin* / e&presin+
e&presin* MOD e&presin+
e&presin* R e&presin+
e&presin* . e&presin+
+ e&presin
. e&presin
-de corrimiento
e&presin* SAR contador
e&presin* SAL contador
-relacionales
e&presin* E1 e&presin+
e&presin* NE e&presin+
e&presin* LT e&presin+
e&presin* LE e&presin+
e&presin* GT e&presin+
e&presin* GE e&presin+
- de bit
NOT e&presin
e&presin* AND e&presin+
e&presin* OR e&presin+
e&presin* =OR e&presin+
-de ndice
De&presin*E [e&presin+]
ejemplos:
mov al, string[3]
mov string[last],al
mov cx,dgroup:[1] ; igual a mov cx,dgroup:1
-de apuntador
tipo PTR e&presin
tipo puede ser B0TE +, CORD 4, DCORD <, 1CORD 8, TB0TE +0, NEAR 0////S, /AR
0///ES. 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
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 16/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
mov time.min,0
mov [bx].dest
-de propsito especial.
O//SET e&presion.- Regresa el desplazamiento del operando
mov bx, OFFSET dgroup:array
mov bx, offset subrout3
SAORT etiqueta,- Para un salto de menos de 128 bytes
jmp SHORT loop
LENGTA variable.- Regresa el nmero de elementos de variable segn su tipo
mov cx,length array
SIHE variable.- Regresa el tamao en bytes alojados para variable
mov cx,size array
SEG e&presin.- Regresa el valor del segmento para e&presin
mov ax, SEG saludo
>.. MACROS 0 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 nombre555 que hace la variable, etiqueta o smbolo absoluto disponible para todos los programas.
E=TRN nombre:tipo555 que especifica una variable, etiqueta o smbolo externos identificados por nombre y
tipo (que puede ser B0TE, CORD, DCORD, 1CORD, TB0TE, NEAR, /AR, 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
PUBLC 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
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 17/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
jmp print ; va a PRNT en el otro modulo
exit:
mov ah,4ch
int 21h
code ENDS
END start
SUBMODULO: TAS@.ASM
NAME task
PUBLC 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 Dparmetros555E
declaraciones
ENDM
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 DdistanciaE
sentencias
nombre ENDP
distancia, que puede ser NEAR (default) o /AR permiten indicar el tipo de acciones a realizar en brincos y
llamados a subrutinas. nombre se puede usar como direccin en llamados o brincos.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 18/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
6.. INTERRUPCIONES.
Como se mencion anteriormente la PC esta constituida lgicamente por su BOS y
sistema operativo. La mayora de las rutinas que controlan al computador estn grabadas en el ROM del
BOS, 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 n'mero. 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 P. 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 BOS y de 20h a FFh son del DOS y BASC. El apndice F proporciona una lista de las
interrupciones para equipo XT.
III.. CREACION 0 DEPURACION DE PROGRAMAS EN LENGUAJE ENSAMBLADOR
+.. EDICION.
Los archivos fuente de cdigo ensamblador deben estar en formato ASC 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 T y terminan al final de la lnea.
4.. ENSAMBLADO.
El ensamblado se lleva a cabo invocando al MASM. Este puese ser invocado,
usando una lnea de comando, de la siguiente manera:
MASM arc!ivo D5DobjetoED5DlistadoED5DcrossEEEEEDopcionesEDTE
donde:
arc!ivo.- 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
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 19/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
/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
/Dsm define un smbolo que puede usarse en el ensamble
/Ipat! fija path para bscar archivos a incluir
/ML mantiene sensitividad de letras (mays./mins) en nombres
/M= 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
/7 despliega estadsticas adicionales en pantalla
/= incluir condicionales falsos en pantalla
/H despliega lneas de error en pantalla
si el T 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.
6.. LIN@.
De la misma forma que el ensamblado, la fase de liga se lleva a cabo con el LIN@.
Este puede ser invocado de la misma forma que el MASM. Los parmetros que este requiere son:
LIN@ objeto D5DejecutableED5DmapaED5Dlibrer(aEEEEEDopcionesEDTE
donde:
objeto.- Es el nombre para el archivo .OBJ
ejecutable.- Nombre del archivo .E=E
mapa.- Nombre del archivo mapa
librer(a.- Nombre del archivo biblioteca de rutinas
opciones.- Pueden ser:
/AELP muestra lista de opciones
/PAUSE pausa en el proceso
/E=EPAC@ empaca archivo ejecutable
/MAP crea mapa se smbolos pblicos
/LINENUMBERS copia nmero de lineas al mapa
/NOIGNORECASE mantiene sensitividad en nombres
/NODE/AULTLIBRAR0SEARCA no usa bibliotecas por default
/STAC@:si)e fija el tamao del stack a usar
/CPARMA=ALLOC:n'mero fija alojacin mxima de espacio
/AIGA fija la direccin de carga ms alta
/DSALLOCATE aloja grupo de datos
/NOGROUPASSOCIATION ignora asociaciones para direcciones
/O7ERLA0INTERRUPT:n'mero asigan nuevo n'mero a la NT 03Fh
/SEGMENTS:n'mero procesa un n'mero de segmentos
/DOSSEG sigue la convencin de orden de DOS
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 20/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
<.. 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.
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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 21/41
7/10/2014
program
a
'I()
programa
MASM programa Creacin de un
archivo sin
formato
!"C##$
.e*e .o+, .as-
E,ecucin 'iga Ensa-+le Edicin del
Arc.ivo
Seccin de Estudios de Posgrado e Investigacin UPIICSA
Run File [MAN.EXE]:
List File [NUL.MAP]:
Libraries [.LB]:
C:\DATA\PROGRAMS\ASM>main
Entrando a un submodulo....
.......saliendo del submodulo.
C:\DATA\PROGRAMS\ASM>
>.. 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.E=E) y por otro lado
tenemos el que nos proporciona Microsoft (S0MDEB.E=E). 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 E=E4BIN 0 LOS ARCAI7OS .E=E 0 .COM .
Para MS-DOS slo existen dos tipo de archivos ejecutables los .COM y .E=E. 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 E=E4BIN.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.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 22/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE A.. MODELO DE REGISTROS DEL 8086
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 23/41
7/10/2014
/I 0Indice de destino1
2P 0A3untador de +ase1
SI 0Indice a 4uente1
SP 0A3untador de 3ila1
/5 0/atos1
25 02ase1
C5 0Contador1
A5 0Acu-ulador1
%it 0 %it 0 %it 7 %it 7
%it 1 %it 15
2' 26
/'
C6 C'
/6
A' A6
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE B.. REGISTROS E=PANDIDOS DEL 808-.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 24/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 25/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 26/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE C.. MODELO DE SEGMENTACION DE MEMORIA.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 27/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE D.. DIRECTI7AS DEL MASM.
.+86
Permite reconocer instrucciones para microprocesadores 8086 y 80186.
.4868
Permite ensamblar instrucciones 80286 en modo no protegido, 8086 y 80186.
.486'
Activa el ensamble de instrucciones 80286 en modo protegido, 80186, 8086.
.48-
Ensamblar instrucciones 80287 y 8087.
.8086
Modo por defecto. Activa el ensamble de instrucciones 8086 (idnticas para el 8088).
.808-
Activa el ensamble de instrucciones 8087. Modo por defecto.
nombrePe&presin
Asigna el valor de e&presin 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 NOTAING, ningn registro es seleccionado.
COMMENT delimitador te&to delimitador
Trata como un comentario a todo te&to dado entre delimitador y delimitador,
.CRE/
Restablece el listado de referencia cruzada de smbolos.
DnombreE DB valor,,,
DnombreE DC valor,,,
DnombreE DD valor,,,
DnombreE D1 valor,,,
DnombreE DT valor,,,
Aloja e inicializa un byte (DB), una palabra (DC, 2 bytes), una palabra doble (DD), una palabra
cudruple (D1), y 10 bytes ( (DT) de almacenamiento para cada valor.
ELSE
Seala el inicio de un bloque alterno dentro de un bloque condicional.
END De&presinE
Seala el fin de un bloque y, opcionalmente, fija el punto de entrada a e&presin.
ENDI/
Termina un bloque condicional.
ENDM
Termina una macro.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 28/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
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 E1U e&presin
Asigna e&presin a nombre.
.ERR
Genera error.
.ERR+
Genera error en el paso 1 nicamente.
.ERR4
Genera error en el paso 2 nicamente.
.ERRB Uargumento>
Genera error si argumento es blanco.
.ERRDE/ nombre
Genera error si nombre ya ha sido definido.
.ERRDI/ Ucadena*V5Ucadena+V
Genera error si los nombres son diferentes.
.ERRE e&presin
Genera error si e&presin es falsa (o)
.ERRIDN Ucadena*V5Ucadena+V
Genera error si las cadenas son idnticas.
.ERRNB UargumentoV
Genera error si el argumento no es blanco.
.ERRNDE/ nombre
Genera error si nombre no se ha definido.
.ERRNH e&presin
Genera error si e&presin no es cero (verdadera).
E7EN
Si es necesario, incrementa el contador de localidad a un nmero par y genera una instruccin NOP.
E=ITM
Termina la expansin del bloque de repeticin o macro y comienza a ensamblar la siguiente
declaracin fuera del bloque.
E=TRN nombre:tipo...
Declaracin de una variable, etiqueta o smbolo externo.
nombre GROUP segmentname...
Asocia el nombre de un grupo con uno o ms segmentos.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 29/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
I/ e&presin
Permite el ensamble si e&presin es verdadera (no cero).
I/+
Ensambla slo en el paso 1.
I/4
Ensambla slo en el paso 2.
I/B UargumentoV
Ensambla si argumento es blanco.
I/DE/ nombre
Ensambla si nombre ya ha sido definido.
I/DI/ Uargumento*V5Uargumento+V
Ensambla slo si los argumentos son diferentes.
I/E e&presin
Ensambla si e&presin es falsa (0).
I/IDN Uargumento*V5Uargumento+V
Ensambla si los argumentos son idnticos.
I/NB UargumentoV
Ensambla si el argumento no es blanco.
I/NDE/ nombre
Si nombre no ha sido definido permite el ensamble
INCLUDE filename
nserta cdigo fuente desde el archivo indicado
IRP nombre5Uparmetro...V
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 nombre5Ucadena>
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 ETI1UETA 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.
.L/COND
Restablece el listado de bloques condicionales.
.LIST
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 30/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
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 e&presin
Fija el contador de localidades e&presin.
WOUT te&to
Despliega te&to en pantalla.
nombre PROC tipo
Seala el inicio de un procedimiento de determinado tipo.
PAGE longitud,anc!o
Fija los mrgenes para el listado del programa (en caracteres).
PAGER
ncrementa 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.
.RADI= e&presin
Fija la base a e&presin para la introducin de nmeros.
nombre RECORD campo:anc!o[Pe&presin]...
Define una estructura para un registro de 8 16 bits que contiene uno o ms campos.
REPT e&presin
Marca el incio de un bloque ser repetido el nmero de veces indicado por e&presin.
.SALL
Suprime el listado de las expansiones de macros.
nombre SEGMENT [alineacin][combine][XclaseX]
Marca el inicio de un segmento del programa llamado nombre y que posee los atributos indicados.
.S/COND
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 31/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
Suprime el listado de cualquier bloque condicional subsecuente cuya condicin I/ sea falsa.
nombre STRUC
Marca el comienzo en la defincin de una estructura.
SUBTTL [te&to]
Define un subttulo para el listado.
.T/COND
Fija por defecto el listar los bloques condicionales.
TITLE te&to
Ttulos para los listados de los programas.
.=ALL
Lista slo aquellas macros que generen cdigo o datos.
.=CRE/ [nombre...]
Suprime el listado de las referencias cruzadas.
.=LIST
Suprime el listado de las lneas que sigan.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 32/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE E.. JUEGO DE INSTRUCCIONES DEL 80865 808-5 80+865 80486 0 8048-.
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 ASC para adicin.
AAD Ajuste ASC para divisin.
AAM Ajuste ASC para multiplicacin.
AAS Ajuste ASC para divisin.
ADC acum, inmed Suma con acarreo.
r/m,inmed
r/m, reg
reg, r/m
ADD acum,inmed Suma.
r/m,inmed
r/m, reg
reg, r/m
AND acum,inmed Operacin AND a nivel bit.
r/m,inmed
r/m, reg
reg, r/m
CALL etiqueta Llamado.
r/m
CBC Convierte byte a palabra.
CLC Limpia bandera de acarreo.
CLD Limpia bandera de direccin.
CLI Limpia bandera de interrupcin.
CMC Complementa bandera de acarreo.
CMP acum,inmed Comparacin
r/m,inmed
r/m, reg
reg, r/m
CMPS src,dest Comparacin de cadenas.
CMPSB Compara cadenas byte por byte.
CMPSC Compara cadenas palabra por palabra.
CCD Convierte palabra a palabra doble.
DAA Ajuste decimal para adicin.
DAS Ajuste decimal para substraccin.
DEC r/m Decremento.
reg
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 33/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
DI7 r/m Divisin.
ESC inmed, r/m Escape con 6 bits.
ALT Alto.
IDI7 r/m Divisin entera.
IMUL r/m Mutiplicacin entera.
IN accum,inmed Entrada desde puerto.
acum, D=
INC r/m ncremento.
reg
INT 6 nterrupcion 3 codificada como un byte.
INT inmed nterrupcin 0-255.
INTO nterrupcin en overflo-.
IRET Retorno de interrupcin.
JMP etiqueta Brinco incondicional.
r/m
J(condicin) etiqueta Brinca de acuerdo a las condiciones: A (arriba), AE (arriba o igual), B (siguiente), BE
(siguiente o igual), C (acarreo), C=H (C= 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), NH (no cero), O (sobreflujo), P (paridad),
PE (paridad par), PO (paridad impar), S (signo), H (cero).
LAA/ Carga AA con las banderas.
LDS r/m Carga DS.
LEA r/m Carga la direccin.
LES r/m Carga ES.
LOC@ Cierra bus.
LODS src Carga cadena.
LODSB Carga byte de cadena en AL.
LODSC Carga palabra de la cadena en A=.
LOOP etiqueta Ciclo.
LOOPE etiqueta Ciclo mientras igual.
LOOPNE etiqueta Ciclo mientras no igual.
LOOPNH etiqueta Ciclo mientras no cero.
LOOPH etiqueta Ciclo mientras cero.
MO7 acum,mem Mueve un valor del segundo al primer operando
r/m,inmed
mem, acum
r/m, reg
r/m,segreg
reg, inmed
reg,r/m
segreg,r/m
MO7S dest, src Mueve cadena.
MO7SB Mueve cadena byte por byte.
MO7SC Mueve cadena palabra por palabra.
MUL r/m Multiplicacin.
NEG r/m Niega (complemento a 2).
NOP Operacin ociosa.
NOT r/m nvierte valores de bits (complemento a 1).
OR acum, inmed Operacin OR a nivel de bit.
r/m,inmed
r/m, reg
reg,r/m
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 34/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
OUT D=, accum Salida por el puerto dado por el primer operando.
inmed, acum (inmediato de 8 bits)
POP r/m Recupera valor de la pila.
reg
segreg
POP/ Recupera banderas.
PUSA r/m Guarda valor en la pila.
reg
segreg
PUSA/ Guarda banderas.
RCL r/m,+ Rotacin a la izquierda con acarreo.
r/m,CL
RCR r/m, + Rotacin a la derecha con acarreo.
r/m, CL
REP Repite.
REPE Repite si igual.
REPNE Repite si no igual.
REPNH Repite si no cero.
REPH Repite si cero.
RET DinmedE Regresa despus de recuperar bytes de la pila.
ROL r/m,+ Rotacin a la izquierda.
r/m, CL
ROR r/m,+ Rotacin a la derecha.
r/m, CL
SAA/ Carga banderas con el valor de AA.
SAL r/m, + Desplazamiento aritmtico a la izquierda.
r/m, CL
SAR r/m, + Desplazamiento aritmtico a la derecha.
r/m, CL
SBB acum, inmed Subtraccin con acarreo.
r/m,inmed
r/m, reg
reg,r/m
SCAS dest Explora cadena.
SCASB Explora cadena para el byte en AL.
SCASC Explora cadena por la palabra en A=.
SAL r/m, + Dezplazamiento a la izquierda.
r/m, CL
SAR r/m, + Dezplazamiento a la derecha.
r/m, CL
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.
STOSC Guarda palabra en A= en la cadena.
SUB accum, inmed Substraccin.
r/m,inmed
r/m, reg
reg,r/m
TEST acum, inmed Comparacin.
r/m,inmed
r/m, reg
reg,r/m
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 35/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
CAIT Aguarda.
=CAG acum, reg ntercambio.
r/m,inmed
r/m, reg
reg,r/m
=LAT Traduce.
=OR acum, reg Operacin XOR a nivel bit.
r/m,inmed
r/m, reg
reg,r/m
808-
/4=M+ Calcula 2
x
-1.
/ABS Toma valor absoluto del tope de la pila.
/ADD mem Suma real.
/ADD ST5 STY%Z Suma real desde la pila.
/ADD STY%Z5 ST Suma real a la pila.
/ADDP STY%Z5 ST Suma real y saca de pila.
/BLD mem Carga un decimal empacado de 10 bytes en la pila.
/BSTP mem Almacena un decimal empacado de 10 bytes y saca de pila.
/CAS Cambia signo del valor en el tope de la pila.
/CLE= Borra las excepciones despus de un CAIT.
/COM Compara real.
/COM ST Compara real con el tope de la pila.
/COM STY%Z Compara real con la pila.
/COMP Compara real y saca de pila.
/COMP ST Compara real con el tope de la pila y saca de pila.
/COMP STY%Z Compara real con el tope de la pila y saca.
/COMPP Compara real y saca dos valores de la pila.
/DECSTP Decrementa el apuntador de la pila.
/DISI Deshabilita las interrupciones depus de un CAIT.
/DI7 mem Divisin real.
/DI7 ST5 STY%Z Divisin real desde la pila.
/DI7 STY%Z5 ST Divisin real en la pila.
/DI7P STY%Z5 ST Divisin real sacando valor de la pila.
/DI7R Divisin real invertida.
/DI7R mem Divisin real invertida desde memoria.
/DI7R ST5 STY%Z Divisin real invertida desde la pila.
/DI7R STY%Z5 ST Divisin real invertida desde la pila.
/DI7RP STY%Z5 ST Divisin con un real invertido y sacando valor de la pila.
/ENI Habilita interrupciones despus de un CAIT.
//REE Libera elemento de la pila.
/IADD mem Suma entera de un nmero de 2 4 bytes.
/ICOM mem Compara enteros de 2 4 bytes y saca de la pila.
/ICOMP mem Compara entero de 2 4 bytes y saca de pila.
/IDI7 mem Divisin entera.
/DI7R mem Diviisn entera invertida.
/ILD mem Carga un entero de 2, 4 u 8 bytes en la pila.
/IMUL mem Multiplicacin entera de 2 4 bytes.
/INCSTP ncrementa el apuntador de la pila.
/INIT nicializa el procesador despus de CAIT.
/IST mem Almacena entero de 2 4 bytes.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 36/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
/ISTP mem Almacena entero de 2, 4 u 8 bytes y saca de la pila.
/ISUB mem Resta entero de 2 4 bytes.
/ISUBR mem Resta entera de 2 4 bytes invertida.
/LD mem Carga real de 4, 8 10 bytes en la pila.
/LD+ Pone +1.0 en el tope de la pila.
/LDCC mem Carga la palabra de control.
/LDEN7 mem Carga entorno 8087 (14 bytes).
/LDL4E Carga log
2
e en el tope de la pila.
/LDL4T Carga log
2
10 en el tope de la pila.
/LDLG4 Carga log
10
2 en el tope de la pila.
/LDLN4 Carga log
e
2 en el tope de la pila.
/LDPI Carga en el tope de la pila.
/LDH Carga +0.0 en el tope de la pila.
/MUL Multiplicacin real.
MUL mem Multiplicacin real desde memoria.
/MUL ST5 STY%Z Multiplica real desde pila.
/MUL STY%Z5 ST Multiplica real a la pila.
/MULP ST5 STY%Z Multiplica real y saca de la pila.
/NCLE= Borra excepciones sin CAIT.
/NDISI nhabilita interrupciones sin CAIT.
/NENI Habilita interrupciones sin CAIT.
/NINIT nicializa procesador sin CAIT.
/NOP Operacin nula.
/NSA7E mem Salva estado 8087 (94 bytes) sin CAIT.
/NSTCC mem Almacena la palabra de control sin CAIT.
/NSTEN7 mem Guarda el entorno 8087 sin CAIT.
/NSTSC mem Almacena el estado 8087 sin CAIT.
/PATAN Funcin arcotangente parcial.
/PREM Residuo parcial.
/PTAN Funcin tangente parcial.
/RNDINT Redondea a entero
/RSTOR mem Restablece estado 8087 (94 bytes)
/SA7E mem Conserva el estado 8087 (94 bytes).
/SCALE Escala
/S1RT Raz cuadrada
/ST Almacena real.
/ST ST Almacena real desde el tope de la pila.
/ST STY%Z Almacena real desde la pila.
/STCC mem Almacena palabra de control con CAIT.
/STEN7 mem Guarda el entorno 8087 despus de CAIT.
/STP mem Guarda real de 4, 8 10 bytes y saca de la pila.
/STSC mem Almacena la palabra de estado depus de CAIT.
/SUB Substrae real.
/SUB mem Substrae real desde memora.
/SUB ST5 STY%Z Substrae real desde la pila.
/SUB STY%Z5 ST Substrae real a la pila.
/SUBP ST5 STY%Z Substrae real y saca de pila.
/SUBR Substraccin real invertida.
/SUBR mem Substraccin real invertida desde memoria.
/SUBR ST5 STY%Z Substraccin real invertida desde la pila.
/SUBR STY%Z5 ST Substraccin real invertida a la pila.
/SUBRP STY%Z5 ST Substraccin real invertida a la pila y saca.
/TST Prueba el tope de la pila.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 37/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
/CAIT Aguarda que la ltima operacin 8087 termine.
/=AM Examina el elemento del tope de la pila.
/=CA ntercambia contenido de los elementos de la pila.
//REE ST ntercambia el elemento del tope de la pila.
//REE STYiZ ntercambia el elemento del tope de la pila y el i-simo elemento.
/=TRACT Extrae el exponente y significando.
/0L4= Calcula Y log
2
X.
/0L4PI Calcula Y log
2
(x+1)
80+86/80+88/80486 Y)odo no 'ro(e!%doZ
BOUND reg, mem Detecta valor fuera de rango.
ENTER inmed16, inmed8 Hace elemento en la pila para llamada a procedimiento.
IMUL reg, inmed Multiplicacin entera.
reg, r/m, inmed
INS mem, D= Entrada de cadena desde el puerto D=.
INSB mem,D= Entrada de cadena de bytes desde el puerto D=.
INSC mem D= Entrada de cadena de palabras desde el puerto D=.
LEA7E Deja procedimeinto.
OUTS D=5 mem Salida de cadena de bytes o palabras al puerto D=.
OUTSB D=5 mem Salida de cadena de bytes al puerto D=.
OUTSC D=5 mem Salida de cadena de palabras al puerto D=.
POPA Saca todos los registros de la pila.
PUSA inmed ntroduce a la pila
PUSAA ntroduce 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.
SAL r/m, inmed Desplazamiento a la izquierda.
SAR r/m, inmed Desplazamiento a la derecha.
80486 Y)odo 'ro(e!%doZ
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.
LMSC 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).
SMSC mem Guarda la palabra de estado.
STR mem Guarda registro de tareas.
7ERR mem Verifica acceso de lectura.
7ERC mem Verifica acceso de escritura.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 38/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
8048-
/SETPM Fija modo protegido.
/STSC A= Almacena palabra de estado en A= (aguarda).
/NSTSC A= Almacena palabra de estado en A= (no aguarda).
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 39/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
APENDICE /.. INTERRUPCIONES.
DRECCON NTERRUPCON FUNCON
(hex) (hex)
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 /O
44-47 11 Equipment check
48-4B 12 Memory size check
4C-4F 13 Diskette /O
50-53 14 Communication /O
54-57 15 Cassete /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 ASC 128-255
80-83 20 DOS program terminate
84-87 21 DOS function call
88-8B 22 DOS terminate address
90-93 24 DOS fatal error vector
94-97 25 DOS absolute disk read
98-9B 26 DOS absolute disk write
9C-9F 27 DOS terminate, fix in storage
A0-FF 28-3F Reserved for DOS
100-1FF 40-7F Not used
200-217 80-85 Reserved by BASC
218-3C3 86-F0 Used by BASC interpreter
3C4-3FF F1-FF Not Used
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 40/41
7/10/2014
Seccin de Estudios de Posgrado e Investigacin UPIICSA
BIBLIOGRA/IA.
Murray, Williams H. & Papas, Chris H.; 80286/80386. PROGRAMACON EN LENGUAJE ENSAMBLADOR;
Osborne/McGraw-Hill, 1989.
Shildt, Herbert; TURBO PASCAL AVANZADO. PROGRAMACON Y TECNCAS; Osborne/McGraw-Hill, 1987.
---------------; DOS 5 A SU ALCANCE; Osborne/McGraw-Hill, 1992.
MCROSOFT MS-DOS VERSON 5.0. GETTNG STARTED, USERS GUDE & REFERENCE; Microsoft
Corporation, 1991.
MCROSOFT MACROASSEMBLER VERSON 4.0 FOR THE MS-DOS OPERATNG SYSTEM. USERS
GUDE & REFERENCE MANUAL; Microsoft Corporation, 1985.
M. en C. Eduardo Ren Rodrguez vila 7!"#"!$ P%g.& 41/41
7/10/2014

Vous aimerez peut-être aussi