Ensamblador
arthureh24 de Mayo de 2012
10.108 Palabras (41 Páginas)528 Visitas
APUNTES DE CATEDRA
CARRERA: LICENCIATURA EN ANALISIS DE SISTEMAS –
INGENIERIA EN SISTEMAS
Cátedra: Procesamiento De Datos I
Profesor: Lic. Marcelo Martinez
AÑO: 2003
EL NIVEL DEL LENGUAJE ENSAMBLADOR
En los capítulos 4, 5 y 6 estudiamos tres niveles, los cuales están presentes en la
mayoría de las computadoras actuales. Este capítulo trata fundamentalmente de un cuarto
nivel que también está presente en casi todas las computadoras modernas: el nivel del
lenguaje ensamblador. Dicho nivel difiere considerablemente de los niveles de
microprogramación, de máquina convencional y del sistema operativo, debido a que se
implementa por traducción y no por interpretación.
Los programas que convierten un programa escrito de un lenguaje a otro lenguaje
distinto se llaman traductores. El lenguaje en que está escrito el programa original se llama
lenguaje fuente y al que se convierte se llama lenguaje objeto. Ambos lenguajes, el fuente
y el objeto, definen niveles. Si contáramos con un procesador que ejecutara directamente
los programas escritos en el lenguaje fuente, no habría ninguna necesidad de traducirlos al
lenguaje objeto.
La traducción se usa cuando se dispone de un procesador ( lo mismo da que sea físico
o un intérprete) para el lenguaje objeto, y no se cuenta con uno para el fuente. Si la
traducción se hace correctamente, la ejecución del programa traducido dará exactamente
los mismos resultados que daría la ejecución del programa fuente si dispusiéramos de un
procesador para él. Por tanto podemos fabricar un nuevo nivel, en el que no hay
procesador, si traducimos primero los programas escritos para dicho nivel a un nivel objeto
y luego ejecutamos los programas resultantes.
Es importante darse cuenta de la diferencia entre la traducción, por un lado, y la
interpretación por otro. En la traducción, el programa original, escrito en lenguaje fuente,
no se ejecuta directamente. Lo que se hace es convertirlo en un programa equivalente,
llamado programa objeto o módulo objeto, que se ejecuta después de que se ha terminado
la traducción. En la traducción hay dos pasos bien definidos:
1. Generación de un programa equivalente en lenguaje objeto.
2. Ejecución del nuevo programa que se ha generado.
Estos dos pasos no tienen lugar simultáneamente; el segundo no comienza hasta que
el primero ha terminado. En la interpretación, en cambio, hay sólo un paso: la ejecución del
programa fuente original. No se genera primero un programa equivalente. La interpretación
tiene la ventaja de que el programa suele ser más pequeño y de mayor flexibilidad, pero la
traducción suele producir programas más rápidos.
Cuando se está ejecutando el programa objeto, sólo hay tres niveles en acción: el de
microprogramación, el de máquina convencional y el de máquina del sistema operativo. Por
tanto, en tiempo de ejecución, sólo pueden encontrarse en la memoria de la computadora
tres programas: el programa objeto del usuario, el sistema operativo y el microprograma.
Toda traza del programa fuente original se ha desvanecido. Así, el número de niveles
presentes en tiempo de ejecución puede diferir del número de ellos presentes antes de la
traducción. Es importante recalcar que, aunque nosotros definamos un nivel por las
instrucciones y construcciones lingüísticas que tienen a su disposición los programadores (y
no por el método de implementación), otros autores hacen una mayor distinción entre
niveles realizados por intérpretes en tiempo de ejecución y niveles realizados por
traducción.
255
INTRODUCCIÓN AL LENGUAJE ENSAMBLADOR
Los traductores se pueden dividir a grandes rasgos en dos grupos, según la relación
que haya entre el lenguaje fuente y el objeto. Cuando el lenguaje fuente es, en esencia, una
representación simbólica de un lenguaje numérico de máquina, el traductor se llama
ensamblador y el lenguaje fuente se llama lenguaje ensamblador. Cuando el lenguaje
fuente es un lenguaje de alto nivel como el C o Pascal, y el lenguaje objeto es un lenguaje
de máquina numérico o una representación simbólica de uno de ellos, el traductor se llama
compilador.
¿Qué es un lenguaje ensamblador?
Un lenguaje ensamblador puro es aquel en que cada sentencia produce exactamente
una instrucción máquina. En otras palabras, hay una correspondencia biunívoca entre las
instrucciones de máquina y las sentencias del programa en ensamblador. Si cada línea de
un programa en ensamblador contuviera una sentencia ensamblador y si cada palabra de
máquina contuviera una instrucción de máquina, entonces un programa de n líneas escrito
en ensamblador produciría un programa en lenguaje máquina que ocuparía n palabras.
La razón por la que se usa el lenguaje ensamblador en lugar de programar el lenguaje
máquina (octal o hexadecimal) consiste en que es mucho más fácil programar en
ensamblador. Es muy diferente usar nombres y direcciones simbólicas que hacerlo en
binario u octal. La mayoría de la gente puede recordar que las abreviaturas para la adición,
la sustracción, la multiplicación y la división son ADD, SUB, MUL y DIV, pero pocos pueden
recordar que las instrucciones máquina (para la PDP-ll) son 24576..57344,28672 y 29184.
El programador en lenguaje ensamblador sólo tiene que recordar los nombres simbólicos...
ADD, SUB, MUL, DIV, ya que el ensamblador los traduce a las instrucciones máquina. Por el
contrario, el programador en lenguaje máquina debe recordar, o consultar constantemente,
los valores numéricos.
Los mismos comentarios se aplican a las direcciones. El programador en lenguaje
ensamblador puede dar nombres simbólicos a las posiciones de memoria y dejarle al
ensamblador la tarea de suministrar los valores numéricos correctos. El programador en
lenguaje máquina debe trabajar siempre con los valores numéricos de las direcciones. En
consecuencia, nadie programa hoy día en lenguaje máquina, aunque se hacía hace años,
antes de que se inventaran los ensambladores.
Los lenguajes ensambladores tienen otra propiedad, además de la Correspondencia
uno a uno entre las sentencias en ensamblador y las instrucciones máquina, que los
distinguen de los lenguajes de alto nivel. El programador en ensamblador tiene acceso a
todos los recursos e instrucciones de la máquina ala que se aplica, pero no el programador
en un lenguaje de alto nivel. Por ejemplo, si la máquina tiene un indicador de
desbordamiento, el programa en lenguaje ensamblador puede examinarlo; uno en Pascal no
puede hacerlo directamente. Si hay conmutadores en la consola del operador, un programa
en ensamblador puede leer su estado. Tal programa puede ejecutar todo el juego de
instrucciones de la máquina sobre la que se aplica, pero uno en lenguaje de alto nivel no
puede hacerlo. En resumen, todo lo que puede hacerse en lenguaje máquina puede hacerse
también en ensamblador, pero muchas instrucciones, registros y otras cosas por el estilo no
están disponibles para que el programador en lenguaje de alto nivel las use. Los lenguajes
para la programación de sistemas suelen ser un híbrido entre ambos tipos, con la sintaxis
de un lenguaje de alto nivel pero con las posibilidades de acceso a la máquina de un
lenguaje ensamblador.
Es conveniente hacer explícita una diferencia final, la cual consiste en que un
programa en lenguaje ensamblador sólo puede correr en una familia de máquinas, mientras
que un programa escrito en un lenguaje de alto nivel puede, en potencia, correr en muchas
máquinas. La habilidad de poder mover software de una maquina a otra, resulta de gran
importancia práctica para muchas aplicaciones.
256
Formato de una sentencia en lenguaje ensamblador
Aunque la estructura de una sentencia de un lenguaje ensamblador refleja muy de
cerca la estructura de la instrucción de máquina que representa, los lenguajes
ensambladores para máquinas y niveles diferentes se parecen lo suficiente como para
permitir una explicación detallada del lenguaje ensamblador en general. En la figura 7-1 se
presentan fragmentos de programas en lenguaje ensamblador para el 80386 y el 68030, los
cuales realizan el cálculo N = I + J + K. En ambos casos la cuenta lo realizan las
instrucciones colocadas arriba de los puntos. Las sentencias que están por debajo de los
puntos no son representaciones simbólicas de instrucciones de máquina, sino órdenes al
ensamblador para que reserve memoria para las variables I, J, K y N. Las sentencias que
son Órdenes al ensamblador se llaman seudo-instrucciones.
Campo etiqueta Campo operación Campo operando Campo de comentario
FORMULL: MOV EAX, I ;Guarda I en EAX
ADD EAX, J ;Suma J a EAX
ADD EAX, K ;Suma K a EAX
MOV N, EAX ;Almacena I + J + K en N
.
.
.
I: DD 2 ;Reserva 4 byte V inicial 2
J: DD 3 ;Reserva 4 byte V inicial 3
K: DD 4 ;Reserva 4 byte V inicial 4
L: DD 0 ;Reserva 4
...