Professional Documents
Culture Documents
Carrera:
Ingeniería en Sistemas Computacionales
Materia:
Lenguaje de Interfaz
Docente:
ISC Antonio Priego Clemente
1
Introducción:
La importancia del lenguaje ensamblador es principalmente que se trabaja
directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento
interno de este, tiene la ventaja de que se puede realizar cualquier tipo de programas
que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los
programas en ensamblador ocupan menos espacio en memoria.
Aunque la mayoría de los especialistas en Software desarrolla aplicaciones en
lenguajes de alto nivel, que son más fáciles de escribir y de dar mantenimiento, una
práctica común es re codificar en lenguaje ensamblador aquellas rutinas que han
causado cuellos de botella en el procesamiento.
2
1.1 Importancia de la programación en lenguaje ensamblador
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir
programas informáticos, y constituye la representación más directa del código máquina
específico para cada arquitectura de microprocesador.
Importancia
Otro punto sería que los programas en ensamblador ocupan menos espacio en
memoria.
Características
El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre
a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones
se corresponde con otra en código máquina.
El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre
a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones
se corresponde con otra en código máquina.
El programa escrito en lenguaje ensamblador se denomina código fuente (*.asm).
3
Ventajas
Desventajas
4
1.2 El procesador y sus registros internos
5
1.3 La memoria principal (RAM)
6
SRAM, Es la abreviatura de Static Random Access Memory y es la alternativa a la
DRAM. No precisa de tanta electricidad como la anterior para su refresco y movimiento
de las direcciones de memoria, por lo que funciona más rápida, aunque tiene un
elevado precio. (Volátiles y no volátiles, NVRAM(non-volatile random access memory),
MRAM(Magnetoresistive random-access memory))
Tag RAM, este tipo de memoria almacena las direcciones de memoria de cada uno de
los datos de la DRAM almacenados en la memoria caché del sistema. Así, si el
procesador requiere un dato y encuentra su dirección en la Tag RAM, va a buscarlo
inmediatamente a la caché, lo que agiliza el proceso.
7
1.4 El concepto de interrupciones
Definición 1:
Definición 2:
8
Dentro de una computadora existen dos clases de interrupciones:
Interrupciones por hardware: Son aquellas que son provocadas por dispositivos
externos al procesador su característica principal es que no son programadas, esto es,
pueden ocurrir en cualquier momento en el programa.
Las interrupciones por software se ejecutan con ayuda de las instrucciones: INT e
IRET, además se tiene 256 interrupciones: de la 00 a la FF.
9
Para cada una de las direcciones se utilizan 4 bytes, dos bytes para el segmento y 2
para el desplazamiento. La instrucción INT tipo, realiza las siguientes tareas:
A su vez, IRET, que regresa de la interrupción, ejecuta lo siguiente:
1.- Desempila los registros.
2.- Desempila la dirección de regreso.
3.- Desempila el registro de bandera.
10
Tabla de interrupciones del sistema.
Las interrupciones del BIOS siempre están disponibles al usuario, en cambio las del
sistema operativo, sólo si es sistema se ha cargado en memoria. BIOS permite realizar
entrada y salida a dispositivos, el acceso a éstas rutinas es también por medio de
interrupciones de software y enviando parámetros a través de los registros.
La interrupción 21h permite leer de teclado, escribir en vídeo, escribir en impresora,
leer y escribir de dispositivo auxiliar, además realizar cambios en el vector de
interrupciones, obtener y poner tanto la fecha como la hora.
11
1.5 Llamadas a servicios del sistema
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que
causa que el procesador transfiere el control a un código privilegiado, previamente
especificado por el mismo código. Esto permite al código privilegiado especificar donde
va a ser conectado así como el estado del procesador.
Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es
interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de Control
de Proceso), para poder continuar ejecutándose luego. El procesador entonces
comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para
realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y
continúa su ejecución. El retorno al proceso demandante no obligatoriamente es
inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo
de planificación de CPU.
12
Las llamadas al sistema para una ejecución y el control de programas, usualmente
incluyen un conjunto completo de los servicios accesibles por la vía de lenguajes de
órdenes, tales como: RUN, EXECUTE, ABORT y planificación relacionada con el
tiempo, además los usuarios con las llamadas del sistema pueden suspender,
establecer o cambiar atributos del tiempo de ejecución de uno o más programas.
También se proporcionan algunas facilidades muy extendidas en sistemas de tiempo
real, para comunicación entre programas y sincronización.
13
1.6 Métodos de Direccionamiento
Los llamados modos de direccionamiento son las diferentes maneras de especificar en
informática un operando dentro de una instrucción en lenguaje ensamblador.
Un modo de direccionamiento especifica la forma de calcular la dirección de memoria efectiva
de un operando mediante el uso de la información contenida en registros y / o constantes,
contenida dentro de una instrucción de la máquina o en otra parte.
Las arquitecturas de computadores varían mucho en cuanto al número de modos de
direccionamiento que ofrecen desde el hardware. Eliminar los modos de direccionamiento más
complejos podría presentar una serie de beneficios, aunque podría requerir de instrucciones
adicionales, e incluso de otro registro. Se ha comprobado que el diseño de CPUs segmentadas
es mucho más fácil si los únicos modos de direccionamiento que proporcionan son simples.
Implícito
En este modo de direccionamiento no es necesario poner ninguna dirección de forma explícita,
ya que en el propio código de operación se conoce la dirección de el/los operando/s al (a los)
que se desea acceder o con el/los que se quiere operar.
Inmediato
En la instrucción está incluido directamente el operando.
En este modo el operando es especificado en la instrucción misma. En otras palabras, una
instrucción de modo inmediato tiene un campo de operando en vez de un campo de dirección.
El campo del operando contiene el operando actual que se debe utilizar en conjunto con la
operación especificada en la instrucción. Las instrucciones de modo inmediato son útiles para
inicializar los registros en un valor constante.
Directo
El campo de operando en la instrucción contiene la dirección en memoria donde se encuentra
el operando.
En este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando
reside en la memoria y su dirección es dada directamente por el campo de dirección de la
instrucción. En una instrucción de tipo ramificación el campo de dirección especifica la dirección
de la rama actual.
14
Indirecto
El campo de operando contiene una dirección de memoria, en la que se encuentra la dirección
efectiva del operando.
Si hace referencia a un registro de la máquina, la dirección de memoria (dirección efectiva) que
contiene el dato estará en este registro y hablaremos de direccionamiento indirecto a registro;
si hace referencia a una posición de memoria, la dirección de memoria (dirección efectiva) que
contiene el dato estará almacenada en esta posición de memoria y hablaremos de
direccionamiento indirecto a memoria.
Absoluto
El campo de operando contiene una dirección en memoria, en la que se encuentra la
instrucción. Y no se cancela.
De registro
Sirve para especificar operandos que están en registros.
En este modo, los operandos están en registros que residen dentro de la CPU.
De desplazamiento
Combina el modo directo e indirecto mediante registros.
De pila
Se utiliza cuando el operando está en memoria y en la cabecera de la pila.
Este direccionamiento se basa en las estructuras denominadas Pila (tipo LIFO), las cuales
están marcados por el fondo de la pila y el puntero de pila (*SP). El puntero de pila apunta a la
última posición ocupada. Así, como puntero de direccionamiento usaremos el SP.
15
Relativo a un registro índice
Es similar al direccionamiento relativo a un registro base, excepto que es el contenido del
registro índice el que indica el desplazamiento que se produce a partir de una dirección de
memoria que se pasa también como argumento a la orden que utiliza este modo de
direccionamiento.
Direccionamiento paginado
En el paginado la memoria se encuentra actualmente dividida en páginas (bloques de igual
longitud).
Para obtener las direcciones se necesita:
● Indicador de página (IP): en un registro específico o de propósito general de la máquina.
● Dirección de la palabra (DP): en el campo CD de la instrucción.
Así, concatenando ambas partes se obtiene la dirección completa.
16
1.7 Proceso de ensamblado y ligado
EDICIÓN
Los archivos fuente de código ensamblador deben estar en formato ASCII standard. Para esto
puede usarse cualquier editor que permita crear archivos sin formato, e.g. Edlin, Edit, Write, El
editor del Turbo Pascal, Works, Word, WordStar, etcétera. Las declaraciones pueden ser
introducidas en mayúsculas y/o minúsculas. Una buena práctica de programación es poner
todas las palabras reservadas (directivas e instrucciones) en mayúsculas y todo lo del usuario
en minúsculas para fines de facilidad de lectura del código.
Las sentencias pueden comenzar en cualquier columna, no pueden tener más de 128
caracteres, no se permiten lineas múltiples ni códigos de control, y cada línea debe ser
terminada con una combinación de line-feed y carriage-return. Los comentarios se declaran
con; y terminan al final de la línea.
ENSAMBLADO
El ensamblado se lleva a cabo invocando al MASM. Este puede ser invocado, usando una línea
de comando, de la siguiente manera:
Dónde:
Dónde:
Objeto.- Es el nombre para el archivo .OBJ
Ejecutable.- Nombre del archivo .EXE
Mapa.- Nombre del archivo mapa
Librería.- Nombre del archivo biblioteca de rutinas
17
EJECUCIÓN
Para la ejecución 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.
18
1.8 Desplegado de mensajes en el monitor
En este momento podemos comenzar a escribir las verdaderas instrucciones que le indicarán a
la computadora que mensaje y como lo va a desplegar. Sugiero que comencemos por borrar la
pantalla. Esto se puede realizar de muy diversas formas, aquí lo haremos usando el BIOS, el
cual es un microchip que se encuentra dentro de toda PC y controla las funciones básicas de
entrada y salida (Basic Input Output Sy stem). Lo que haremos es decirle al chip "¡Hey! dime en
qué modo está trabajando la tarjeta de video", cuando obtengamos la respuesta le diremos:
"Dile a la tarjeta de video que deje de trabajar en ese modo y que comience a trabajar en el
modo de video que me diste". Una instrucción rara, pues lo que le estamos ordenando es que
deje de trabajar en el modo en el que está trabajando !y que comience a trabajar en ese mismo
modo! Así se lo decimos en su propio lenguaje:
principio:
mov ah, 0
int 10h
Lo primero que vemos es una "etiqueta", con ella le damos nombre a un punto dentro del
código, si más tarde dentro del programa deseamos repetir esta parte del código solo tenemos
que decir "salta a 'principio'" y ya está. El primer grupo de instrucciones después de la etiqueta
le dicen al BIOS que obtenga la modalidad en la que está trabajando el video. Aquí vemos por
primera vez una interrupción (int 10h). Las interrupciones son funciones ya incorporadas dentro
del BIOS y del sistema operativo MS-DOS que realizan tareas comunes como leer del disco,
mostrar un mensaje en el monitor, o ¡borrar la pantalla!. Enseguida, mediante una función de la
interrupción 10h, le decimos que cambie a la misma modalidad de video.
19
Bueno, ahora que la pantalla está limpia, podemos mostrar nuestro mensaje en el monitor. Aquí
está el código:
Con la primera instrucción le decimos al procesador "Carga en el registro DX, la dirección de
memoria de la variable llamada 'mensaje_a_mostrar'". Enseguida le decimos que la despliegue
en pantalla con la función 9h de la interrupción 21h.
Nuestra tarea está terminada, así que digámosle a la computadora que no hay más
instrucciones que procesar.
int 20h
Las instrucciones están terminadas, pero todavía tenemos que decirle a la computadora que
valor va a tener la variable 'mensaje_a_mostrar'.
El signo de pesos al final de la cadena, es necesario para que el sistema operativo sepa en
donde se acaba la cadena (una cadena es un grupo de caracteres) que va a desplegar.
Una vez que terminamos con las instrucciones y valores para la máquina, hay que marcar el
archivo para que el compilador sepa que ya terminamos de darle instrucciones a la máquina.
CODE SEGMENT ASSUME CS: CODE, DS: CODE, SS: CODE, ES: CODE
ORG 100h
Principio:
20
mov ah, 0
int 10h
int 20h
CODE ENDS
end principio
21
Conclusión:
Los lenguajes de bajo nivel as. como el lenguaje ensamblador es esencial como
ingenieros en sistemas computacionales que tengamos conocimiento profundo en ésta
.rea, de igual manera los componentes importantes y esenciales que hacen que
nuestro equipo de cómputo funcione, desde la memoria principal que es la memoria
RAM, comprender la jerarquia de las memorias y c.mo funciona cada uno, hasta los
conceptos de interrupciones y los m.todos de direccionamiento y los mensajes
enviados al monitor utilizando las interrupciones disponibles en el sistema, debemos
conocer los temas de manera descriptiva para poder desarrollarnos en las .reas
necesarias de la programaci.n utilizando los conocimientos b.sicos del lenguaje de
interfaz.
22