Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


ensamblador, Apuntes de Informática

Asignatura: programación I, Profesor: , Carrera: Ingeniería en Informática, Universidad: UVIGO

Tipo: Apuntes

2015/2016

Subido el 24/11/2016

mellen-2
mellen-2 🇪🇸

5

(9)

31 documentos

1 / 70

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
TECNOLÓGICO DE ESTUDIOS SUPERIORES DE JOCOTITLÀN
INGENIERÍA EN SISTEMAS COMPUTACIONALES
ASIGNATURA:
SEMINARIO DE DESARROLLO DE PROYECTOS DE INVESTIGACIÓN
PROGRAMACIÓN EN
ENSAMBLADOR PARA
PROCESADORES 80x86
DOCENTE:
ISC. JUAN ALBERTO ANTONIO VELÁZQUEZ
PRESENTA:
ALVA HILARIO GUSTAVO
BECERRIL LÓPEZ NANCY
CRUZ MATIAS DEISY
GONZALEZ MALDONADO MARTHA YARELI
ROMERO ORTEGA FRANCISCO JAVIER
SANCHEZ CRUZ GUSTAVO
GRUPO:ISC-801
JOCOTITLÁN MÉXICO, 15 DE ABRIL DE 2008.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46

Vista previa parcial del texto

¡Descarga ensamblador y más Apuntes en PDF de Informática solo en Docsity!

TECNOLÓGICO DE ESTUDIOS SUPERIORES DE JOCOTITLÀN

INGENIERÍA EN SISTEMAS COMPUTACIONALES

ASIGNATURA:

SEMINARIO DE DESARROLLO DE PROYECTOS DE INVESTIGACIÓN

PROGRAMACIÓN EN

ENSAMBLADOR PARA

PROCESADORES 80x

DOCENTE:

ISC. JUAN ALBERTO ANTONIO VELÁZQUEZ

PRESENTA:

ALVA HILARIO GUSTAVO

BECERRIL LÓPEZ NANCY

CRUZ MATIAS DEISY

GONZALEZ MALDONADO MARTHA YARELI

ROMERO ORTEGA FRANCISCO JAVIER

SANCHEZ CRUZ GUSTAVO

GRUPO:ISC-

JOCOTITLÁN MÉXICO, 15 DE ABRIL DE 2008.

INDICE

III.-CREACIÓN Y DEPURACIÓN DE PROGRAMAS EN LENGUAJE ENSAMBLADOR

INTRODUCCION.

El presente trabajo, está enfocado al lenguaje ensamblador de los procesadores 8088, 8086, 80186, 80188 y 80286, asi como todo lo necesario para programar en lenguaje ensamblador y todas las herramientas que nos proporciona este para realizar programas.

Este documento trata de abarcar, de la forma más general, todo aquello que involucra el conocimiento y uso del lenguaje ensamblador.

Ha sido organizado en CUATRO partes importantes que describen detalladamente aspectos relevantes a considerar para el uso de lenguaje ensamblador.

La primera describe los conocimientos básicos que deben poseerse para una mejor comprensión e interpretación de lo que es el lenguaje ensamblador y cómo debe ser usado.

La segunda parte presenta una breve descripción de lo que es el lenguaje ensamblador, ventajas y desventajas de este, instrucciones generales, todo lo que nos proporciona el lenguaje ensamblador.

En el tercer apartado se mencionan los pasos para la creación y depuración ade un programa en lenguaje ensamblador.

En la última parte se explican los tipos de programación en lenguaje ensamblador asi como todas las instrucciones interrupciones, parámetros, procedimientos en cada uno de ellos..

OBJETIVOS

· Proporcionar información a la comunidad estudiantil que les sirva de apoyo

didáctico en la elaboración de investigaciones, realización de practicas y

exposición de proyectos en las distintas areas de conocimiento.

· Presentar un proyecto de calidad en la materia de SEMINARIO DE

DESARROLLO DE PROYECTOS DE INVESTIGACION EN EL TECNOLOGICO

DE ESTUDIOS SUPERIORES DE JOCOTITLAN.

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 código. Para facilitar la elaboración 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 máquina y las del lenguaje ensamblador. Cada uno de los valores numéricos del lenguaje de máquina tiene una representación simbólica de 3 a 5 letras como instrucción 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 información para que el programa ejecutable sea creado de determinada forma y en determinado lugar.

INTERPRETES, COMPILADORES Y ENSAMBLADORES.

Aun cuando el lenguaje ensamblador fue diseñado para hacer más fácil la programación de bajo nivel, esta resulta todavía complicada y muy laboriosa. Por tal motivo se desarrollaron los lenguajes de alto nivel, para facilitar la programación 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 máquina o lenguaje ensamblador.

La traducción 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 instrucción, se llama una determinada rutina de lenguaje de máquina que se encarga de realizar las operaciones asociadas, pero en ningún momento se genera un código objeto y mucho menos un código 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 máquina, éstos juntan esas rutinas para formar el código objeto que, después 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 versión 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 simbólica por la dirección 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 código.

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

Para crear un programa ejecutable a partir de un código objeto se require que se resulevan las llamadas a otros programas y a los servicios del sistema operativo, y agregar

las rutinas o información 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 través de un ligador o Linker que toma de entrada el código objeto y produce de salida el código ejecutable.

Las rutinas de run-time son necesarias, puesto que el sistema operativo requiere tener control sobre el programa en cualquier momento, además de que la asignación de recursos y su acceso deben hacerse sólamente a través del sistema operativo. Para los computadores personales, esto no es tan complejo como para otros computadores y sistemas operativos, pero es requerido.

ARQUITECTURA DE LOS MICROPROCESADORES.

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

Los microprocesadores matemáticos están diseñados exclusivamente para efectuar operaciones aritméticas de una manera más rápida y precisa bajo el control de otro procesador razón por la cual se denominan coprocesadores. Estos también poseen un juego de instrucciones de lenguaje de máquina propio.

La diferencia entre los diversos microprocesadores de uso general y los coprocesadores reside en el nuevo conjunto de instrucciones, registros y señalizadores agregados con cada nueva liberación de un procesador superior. Estas adiciones se hicieron con el fin de agregar un mayor poder de cómputo sin alterar la estructura básica, 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 están diseñados 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 más detalle en un tema posterior.

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 PC´s la memoria se clasifica en tres tipos:

- Convencional. Es la memoria de tipo básico 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).

Finalmente, en 1977, Intel anunció la aparición del 8085. Este era el último microprocesador de 8 bits y básicamente idéntico al 8080. Su principal mejora fue la incorporación del reloj temporizador dentro de la misma pastilla.

Microprocesadores de 16 bits En 1978, Intel lanzó al mercado el 8086 y un poco más tarde el 8088. Estos dos microprocesadores contaban con registros internos de 16 bits, tenían un bus de datos externo de 16 y 8 bits respectivamente y ambos eran capaces de direccionar 1Mb de memoria por medio de un bus de direcciones de 20 líneas. Otra característica importante fue que estos dos microprocesadores eran capaces de realizar la multiplicación y la división por hardware, cosa que los anteriores no podían. Finalmente apareció el 80286. Este era el último microprocesador de 16 bits, el cual era una versión mejorada del 8086. El 286 incorporaba una unidad adicional para el manejo de memoria y era capaz de direccionar 16Mb en lugar de 1Mb del 8086.

Microprocesadores de 32 bits El 80386 marco el inicio de la aparición de los microprocesadores de 32 bits. Estos microprocesadores tenían grandes ventajas sobre sus predecesores, entre las cuales se pueden destacar: direccionamiento de hasta 4Gb de memoria, velocidades de operación más altas, conjuntos de instrucciones más grandes y además contaban con memoria interna (caché) de 8Kb en las versiones más básicas. Del 386 surgieron diferentes versiones, las cuales se listan a continuación.

Modelo Bus de Datos Coprocesador matemático 80386DX 32 Si 80386SL 16 No 80386SX 16 No 80486SX 32 No 80486DX 32 Si

Terminales del microprocesador

En esta sección se realizará una breve descripción del conjunto de terminales del microprocesador más representativo de la familia 80x86.

El microprocesador 8086 puede trabajar en dos modos diferentes: el modo mínimo y el modo máximo. En el modo máximo el microprocesador puede trabajar en forma conjunta con un microprocesador de datos numérico 8087 y algunos otros circuitos periféricos. En el modo mínimo el microprocesador trabaja de forma más autónoma al no depender de circuitos auxiliares, pero esto a su vez le resta flexibilidad.

En cualquiera de los dos modos, las terminales del microprocesador se pueden agrupar de la siguiente forma:

· Alimentación · Reloj · Control y estado · Direcciones · Datos

El 8086 cuenta con tres terminales de alimentación: tierra (GND) en las terminales 1 y 20 y Vcc=5V en la terminal 40.

En la terminal 19 se conecta la señal de reloj, la cual debe provenir de un generador de reloj externo al microprocesador.

El 8086 cuenta con 20 líneas de direcciones (al igual que el 8088). Estas líneas son llamadas A0 a A19 y proporcionan un rango de direccionamiento de 1MB.

Para los datos, el 8086 comparte las 16 líneas más bajas de sus líneas de direcciones, las cuales son llamadas AD0 a AD15. Esto se logra gracias a un canal de datos y direcciones multiplexado.

En cuanto a las señales de control y estado tenemos las siguientes:

La terminal MX/MN controla el cambio de modo del microprocesador.

Las señales S0 a S7 son señales de estado, éstas indican diferentes situaciones acerca del estado del microprocesador.

La señal RD en la terminal 32 indica una operación de lectura.

En la terminal 22 se encuentra la señal READY. Esta señal es utilizada por los diferentes dispositivos de E/S para indicarle al microprocesador si se encuentran listos para una transferencia.

La señal RESET en la terminal 21 es utilizada para reinicializar el microprocesador.

La señal NMI en la terminal 17 es una señal de interrupción no enmascarable, lo cual significa que no puede ser manipulada por medio de software.

La señal INTR en la terminal 18 es también una señal de interrupción, la diferencia radica en que esta señal si puede ser controlada por software. Las interrupciones se estudian más adelante.

La terminal TEST se utiliza para sincronizar al 8086 con otros microprocesadores en una configuración en paralelo.

Las terminales RQ/GT y LOCK se utilizan para controlar el trabajo en paralelo de dos o mas microprocesadores. La señal WR es utilizada por el microprocesador cuando éste requiere realizar alguna operación de escritura con la memoria o los dispositivos de E/S.

Las señales HOLD y HLDA son utilizadas para controlar el acceso al bus del sistema.

DIAGRAMA DE COMPONENTES INTERNOS

Descripción de los componentes La figura 2 muestra la estructura interna del microprocesador 8086 con base en su modelo de programación. El microprocesador se divide en dos bloques principales: la unidad de interfaz del bus y la unidad de ejecución. Cada una de estas unidades opera de forma asíncrona para maximizar el rendimiento general del microprocesador.

Unidad de ejecución

Este elemento del microprocesador es el que se encarga de ejecutar las instrucciones. La unidad de ejecución comprende el conjunto de registros de propósito general, el registro de banderas y la unidad aritmético-lógica.

SP (Apuntador de pila) Se encarga de controlar el acceso de los datos a la pila de los programas. Todos los programas en lenguaje ensamblador utilizan una pila para almacenar datos en forma temporal.

BP (Apuntador Base) Su función es la de proporcionar direcciones para la transferencia e intercambio de datos.

Registros índices

Existen dos registros llamados SI y DI que están estrechamente ligados con operaciones de cadenas de datos.

SI (Índice Fuente) Proporciona la dirección inicial para que una cadena sea manipulada.

DI (Índice Destino) Proporciona la dirección de destino donde por lo general una cadena será almacenada después de alguna operación de transferencia.

Registros de segmento

El 8086 cuenta con cuatro registros especiales llamados registros de segmento.

CS (Segmento de código) Contiene la dirección base del lugar donde inicia el programa almacenado en memoria.

DS (Segmento de datos) Contiene la dirección base del lugar del área de memoria donde fueron almacenadas las variables del programa.

ES (Segmento extra) Este registro por lo general contiene la misma dirección que el registro DS.

SS (Segmento de Pila) Contiene la dirección base del lugar donde inicia el área de memoria reservada para la pila.

Registro apuntador de instrucciones

IP (Apuntador de instrucciones) Este registro contiene la dirección de desplazamiento del lugar de memoria donde está la siguiente instrucción que será ejecutada por el microprocesador.

Registro de estado

Conocido también como registro de banderas (Flags), tiene como función principal almacenar el estado individual de las diferentes condiciones que son manejadas por el microprocesador. Estas condiciones por lo general cambian de estado después de cualquier operación aritmética o lógica: CF (Acarreo) Esta bandera indica el acarreo o préstamo después de una suma o resta. OF (Sobreflujo) Esta bandera indica cuando el resultado de una suma o resta de números con signo sobrepasa la capacidad de almacenamiento de los registros. SF (Signo) Esta bandera indica si el resultado de una operación es positivo o negativo. SF=0 es positivo, SF=1 es negativo. DF (Dirección) Indica el sentido en el que los datos serán transferidos en operaciones de manipulación de cadenas. DF=1 es de derecha a izquierda y DF=0 es de izquierda a derecha. ZF (Cero) Indica si el resultado de una operación aritmética o lógica fue cero o diferente de cero. ZF=0 es diferente y ZF=1 es cero.

IF (interrupción) Activa y desactiva la terminal INTR del microprocesador. PF (paridad) Indica la paridad de un número. Si PF=0 la paridad es impar y si PF=1 la paridad es par. AF (Acarreo auxiliar) Indica si después de una operación de suma o resta ha ocurrido un acarreo de los bits 3 al 4. TF (Trampa) Esta bandera controla la ejecución paso por paso de un programa con fines de depuración.

Funcionamiento interno (ejecución de un programa) Para que un microprocesador ejecute un programa es necesario que éste haya sido ensamblado, enlazado y cargado en memoria.

Una vez que el programa se encuentra en la memoria, el microprocesador ejecuta los siguientes pasos:

1.- Extrae de la memoria la instrucción que va a ejecutar y la coloca en el registro interno de instrucciones.

2.- Cambia el registro apuntador de instrucciones (IP) de modo que señale a la siguiente instrucción del programa.

3.- Determina el tipo de instrucción que acaba de extraer.

4.- Verifica si la instrucción requiere datos de la memoria y, si es así, determina donde están situados.

5.- Extrae los datos, si los hay, y los carga en los registros internos del CPU. 6.- Ejecuta la instrucción.

7.- Almacena los resultados en el lugar apropiado.

8.- Regresa al paso 1 para ejecutar la instrucción siguiente.

Este procedimiento lo lleva a cabo el microprocesador millones de veces por segundo.

Manejo de memoria

Segmentación El microprocesador 8086, como ya se mencionó, cuenta externamente con 20 líneas de direcciones, con lo cual puede direccionar hasta 1 MB (00000h--FFFFFh) de localidades de memoria. En los días en los que este microprocesador fue diseñado, alcanzar 1MB de direcciones de memoria era algo extraordinario, sólo que existía un problema: internamente todos los registros del microprocesador tienen una longitud de 16 bits, con lo cual sólo se pueden direccionar 64 KB de localidades de memoria. Resulta obvio que con este diseño se desperdicia una gran cantidad de espacio de almacenamiento; la solución a este problema fue la segmentación.

La segmentación consiste en dividir la memoria de la computadora en segmentos. Un segmento es un grupo de localidades con una longitud mínima de 16 bytes y máxima de 64KB. La mayoría de los programas diseñados en lenguaje ensamblador y en cualquier otro lenguaje definen cuatro segmentos. El segmento de código, el segmento de datos, el segmento extra y el segmento de pila.

Mov Oper1,Oper

Esta instrucción copia el contenido de Oper2 en Oper1.

Direccionamiento directo

Este modo se conoce como directo, debido a que en el segundo operando se indica la dirección de desplazamiento donde se encuentran los datos de origen.

Ejemplo:

Mov AX,[1000h] ;Copia en AX lo que se encuentre almacenado en

; DS:1000h

Direccionamiento inmediato

En este modo, los datos son proporcionados directamente como parte de la instrucción.

Ejemplo:

Mov AX,34h ;Copia en AX el número 34h hexadecimal

Mov CX,10 ;Copia en CX el número 10 en decimal

Direccionamiento por registro

En este modo de direccionamiento, el segundo operando es un registro, el cual contiene los datos con los que el microprocesador ejecutará la instrucción.

Ejemplo:

Mov AX,BX ;Copia en AX el contenido del reg

Direccionamiento indirecto por registro

Finalmente, en el modo indirecto por registro, el segundo operando es un registro, el cual contiene la dirección desplazamiento correspondiente a los datos para la instrucción.

Ejemplo:

Mov AX,[BX] ; Copia en AX el dato que se encuentre en la localidad de

;memoria DS:[BX]

Los paréntesis cuadrados sirven para indicar al ensamblador que el número no se refiere a un dato, si no que se refiere a la localidad de memoria.

En los siguientes capítulos se muestran varios programas, en los cuales podrá identificar los diferentes modos de direccionamiento de datos.

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 están integrados sus servicios y la forma en

que se accesa a ellos. Esto es precisamente lo que el linker debe enlazar y resolver. Aquí nos enfocaremos exclusivamente en el sistema operativo MS-DOS, y lo que se mencione aquí será valido para las versiones 3.0 y superiores. Este sistema operativo está organizado de la siguiente manera:

· Comandos Internos (reconocidos y ejecutados por el COMMAND.COM) Comandos Externos ( .EXEs y .COMs ) Utilerías y drivers (programas de administración del sistema) Shell (Interfaz amigable, sólo versiones 4.0 o mayores) Servicios (Interrupciones)

Los servicios, más conocidos como interrupciones o vectores de interrupción, 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 específica. La manera de accesar a estas rutinas y a los servicios que ofrecen es mediante una instrucción que permite ejecutar una interrupción.

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

Programa DOS DOS ROM EXTERNO de usuario Alto nivel Bajo nivel petición de — IBMDOS.COM — IBMBIO.COM — BIOS — Dispositivo I/O

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 descripción de cada uno se propociona a continuación.

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 código ASCII, se procede a generar un programa objeto que es ligado y se genera un programa .EXE. Opcionalmente puede recurirse a la utilería EXE2BIN de MS-DOS para transformarlo a .COM. Es capaz de generar un listado con información del proceso de ensamble y referencias cruzadas.

Macro Ensamblador de Microsoft.- Dependiendo de la versión, este ensamblador es capaz de soportar el juego de instrucciones de distintos tipos de microprocesadores Intel de la serie 80xx/80x86. En su versión 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 código fuente creado a partir de un editor y grabado en formato ASCII. Este archivo es usado para el proceso de ensamble y

simbólico. Por cada ocurrencia en el código de esta macro, el ensamblador se encarga de substituir esa llamada por todas las instrucciones asociadas y, en caso de existir, se dejan los parámetros con los que se estaba llamando la macro y no con los que había sido definida. Es importante señalar que no se deja una llamada, como a una subrutina o procedimiento, sino que se incorporan todas las instrucciones que definen a la macro.

II.- EL LENGUAJE ENSAMBLADOR.

Importancia del lenguaje ensamblador El lenguaje ensamblador es la forma más básica de programar un microprocesador para que éste sea capaz de realizar las tareas o los cálculos que se le requieran.

El lenguaje ensamblador es conocido como un lenguaje de bajo nivel, esto significa que nos permite controlar el 100 % de las funciones de un microprocesador, así como los periféricos asociados a éste.

A diferencia de los lenguajes de alto nivel, por ejemplo “Pascal”, el lenguaje ensamblador no requiere de un compilador, esto es debido a que las instrucciones en lenguaje ensamblador son traducidas directamente a código binario y después son colocadas en memoria para que el microprocesador las tome directamente.

Aprender a programar en lenguaje ensamblador no es fácil, se requiere un cierto nivel de conocimiento de la arquitectura y organización de las computadoras, además del conocimiento de programación en algún otro lenguaje.

Ventajas del lenguaje ensamblador:

· Velocidad de ejecución de los programas · Mayor control sobre el hardware de la computadora Desventajas del lenguaje ensamblador:

· Repetición constante de grupos de instrucciones · No existe una sintaxis estandarizada · Dificultad para encontrar errores en los programas (bugs) UN EJEMPLO

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

; HOLA.ASM ; Programa clasico de ejemplo. Despliega una leyenda en pantalla. STACK SEGMENT STACK ; Segmento de pila DW 64 DUP (?) ; Define espacio en la pila STACK ENDS DATA SEGMENT ; Segmento de datos SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena DATA ENDS CODE SEGMENT ; Segmento de Codigo

ASSUME CS:CODE, DS:DATA, SS:STACK

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

La descripción 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 función de visualización de la cadena de MS-DOS. La cadena incluye los códigos para carriage-return y line-feed. 3.- La etiqueta START en el segmento de código marca el inicio de las instrucciones del programa. 4.- La declaracion DW en el segmento de pila define el espacio para ser usado por el stack del programa. 5.- La declaración ASSUME indica que registros de segmento se asociarán con las etiquetas declaradas en las definiciones de segmentos. 6.- Las primeras dos instrucciones cargan la dirección del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de código y stack puesto que la dirección del segmento de código siempre es cargado en el registro CS y la dirección de la declaración del stack segment es automáticamente cargada en el registro SS. 7.- Las últimas dos instrucciones del segmento CODE usa la función 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero ésta es la más recomendada. 8.- La directiva END indica el final del código fuente y especifica a START como punto de arranque.

EL FORMATO DEL ENSAMBLADOR. De acuerdo a las convenciones y notación seguidas en el manual del Microsoft Macro Assembler. Negritas Comandos , símbolos y parámetros a ser usados como se muestra. Itálicas Todo aquello que debe ser reemplazado por el usuario ð ð Indican un parámetro opcional ,,, Denota un parámetros que puede repetirse varias veces ¦ Separa dos valores mutuamente excluyentes letra chica Usada para ejemplos. Código y lo que aparece en pantalla.

Cada programa en lenguaje ensamblador es creado a partir de un archivo fuente de código 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 propósito especial. Las sentencias en ensamblador tienen la