Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introducion Al Lenguaje Ensamblador
Introducion Al Lenguaje Ensamblador
MICROPROGRAMACION
UNIDAD I
Introduccin a Lenguaje Ensamblador
Conceptos bsicos
Al desarrollarse las primeras computadoras electrnicas, se vio la necesidad de
programarlas, es decir, de almacenar en memoria la informacin sobre la tarea que iban a
ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de
clculo, uno por uno.
John Von Neumann desarroll el modelo que lleva su nombre, para describir este concepto
de "programa almacenado". En este modelo, se tiene una abstraccin de la memoria como
un conjunto de celdas, que almacenan simplemente nmeros. Estos nmeros pueden
representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el
programa mismo.
Cmo es que describimos un programa como nmeros? Se tena el problema de
representar las acciones que iba a realizar la computadora, y que la memoria, al estar
compuesta por switches correspondientes al concepto de bit, solamente nos permita
almacenar nmeros ceros o unos (binarios).
La solucin que se tom fue la siguiente: a cada accin que sea capaz de realizar nuestra
computadora, asociarle un nmero, que ser su cdigo de operacin (opcode) . Por
ejemplo, una calculadora programable simple podra asignar los opcodes :
1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.
Supongamos que queremos realizar la operacin 5 * 3 + 2, en la calculadora descrita arriba.
En memoria, podramos "escribir" el programa de la siguiente forma:
Localidad Opcode Significado Comentario
0
Podemos ver que con esta representacin, es simple expresar las operaciones de las que es
capaz el hardware (en este caso, nuestra calculadora imaginaria), en la memoria.
La descripcin y uso de los opcodes es lo que llamamos lenguaje de mquina. Es decir, la
lista de cdigos que la mquina va a interpretar como instrucciones, describe las
capacidades de programacin que tenemos de ella; es el lenguaje ms primitivo, depende
directamente del hardware, y requiere del programador que conozca el funcionamiento de
la mquina al ms bajo nivel.
Cuando abstraemos los opcodes y los sustituimos por una palabra que sea una clave de su
significado, a la cual comnmente se le conoce como mnemnico, tenemos el concepto de
Lenguaje Ensamblador. As, podemos definir simplemente al Lenguaje Ensamblador de la
siguiente forma:
Lenguaje Ensamblador es la primera abstraccin del Lenguaje de Mquina, consistente en
asociar a los cdigos de operacin (opcodes) palabras clave que faciliten su uso por parte
del programador.
Como se puede ver, el Lenguaje Ensamblador es directamente traducible al Lenguaje de
Mquina, y viceversa; simplemente, es una abstraccin que facilita su uso para los seres
humanos. Por otro lado, la computadora no entiende directamente el Lenguaje
Ensamblador; es necesario traducirle a Lenguaje de Mquina. Originalmente, este proceso
se haca a mano, usando para ello hojas donde se escriban tablas de programa similares al
ejemplo de la calculadora que vimos anteriormente. Pero, al ser tan directa la traduccin,
pronto aparecieron los programas Ensambladores, que son traductores que convierten el
cdigo fuente (en Lenguaje Ensamblador) a cdigo objeto (es decir, a Lenguaje de
Mquina).
Una caracterstica que hay que resaltar, es que al depender estos lenguajes del
hay un distinto Lenguaje de Mquina (y, por consiguiente, un distinto
Ensamblador) para cada CPU. Por ejemplo, podemos mencionar tres
completamente diferentes, que sin embargo vienen de la aplicacin de los
anteriores:
hardware,
Lenguaje
lenguajes
conceptos
UES_MICROPROGRAMACION_JEIT
Para este curso, trabajaremos con el Lenguaje Ensamblador de la familia Intel 80x86, que
es el ms difundido junto con las computadoras personales compatibles con IBM; pero es
importante que se desarrollen las estructuras de programacin y la comprensin de los
conceptos, suficientes para poder usar otros ensambladores, teniendo una lista de
mnemnicos y su uso.
UES_MICROPROGRAMACION_JEIT
Tiempo de programacin
Programas fuente grandes
Peligro de afectar recursos inesperadamente
Falta de portabilidad
Velocidad
El proceso de traduccin que realizan los intrpretes, implica un proceso de cmputo
adicional al que el programador quiere realizar. Por ello, nos encontraremos con que un
intrprete es siempre ms lento que el realizar la misma accin en Lenguaje Ensamblador,
simplemente porque tiene el costo adicional de estar traduciendo el programa, cada vez que
lo ejecutamos.
De ah nacieron los compiladores, que son mucho ms rpidos que los intrpretes, pues
hacen la traduccin una vez y dejan el cdigo objeto, que ya es Lenguaje de Mquina, y se
puede ejecutar muy rpidamente. Aunque el proceso de traduccin es ms complejo y
costoso que el de ensamblar un programa, normalmente podemos despreciarlo, contra las
ventajas de codificar el programa ms rpidamente.
Sin embargo, la mayor parte de las veces, el cdigo generado por un compilador es menos
eficiente que el cdigo equivalente que un programador escribira. La razn es que el
compilador no tiene tanta inteligencia, y requiere ser capaz de crear cdigo genrico, que
sirva tanto para un programa como para otro; en cambio, un programador humano puede
aprovechar las caractersticas especficas del problema, reduciendo la generalidad pero al
mismo tiempo, no desperdicia ninguna instruccin, no hace ningn proceso que no sea
necesario.
Para darnos una idea, en una PC, y suponiendo que todos son buenos programadores, un
programa para ordenar una lista tardar cerca de 20 veces ms en Visual Basic (un
intrprete), y 2 veces ms en C (un compilador), que el equivalente en Ensamblador.
UES_MICROPROGRAMACION_JEIT
Tiempo de programacin
Al ser de bajo nivel, el Lenguaje Ensamblador requiere ms instrucciones para realizar el
mismo proceso, en comparacin con un lenguaje de alto nivel. Por otro lado, requiere de
ms cuidado por parte del programador, pues es propenso a que los errores de lgica se
reflejen ms fuertemente en la ejecucin.
UES_MICROPROGRAMACION_JEIT
UES_MICROPROGRAMACION_JEIT
Tipos "unsigned" de C
Representan solamente la magnitud, en forma binaria.
Permiten almacenar nmeros desde 0 hasta (2n) - 1
n se refiere al nmero de bits usados para representarlo
Complemento a uno
Complemento a dos
UES_MICROPROGRAMACION_JEIT
Representacin de caracteres
Es una abstraccin de datos
Punto flotante
Es una representacin de los nmeros reales. Utiliza para su representacin 32 bits (palabra
doble), 64 (palabra cudruple).
El formato precisin simple utiliza los 32 bits de la siguiente manera:
El rango de los nmeros a representar, en los positivos, es desde 1.18 x 10^-38 a 3.40 x
10^38). Y equivalentemente, en los negativos.
El formato precisin doble utiliza los 64 bits de la siguiente manera:
El rango de los nmeros a representar, en los positivos, es desde 2.23 x 10^-308 a 1.79 x
10^308). Y equivalentemente, en los negativos.
Arreglos
UES_MICROPROGRAMACION_JEIT
El arreglo es un tipo de datos estructurado formado por una coleccin finita de elementos
ordenados, todos del mismo tipo. El acceso se realiza mediante un ndice que permite
especificar cul es el elemento deseado dando su posicin en la coleccin.
Un byte es la unidad de memoria que se asigna para almacenar un valor. En el caso de un
arreglo las sentencias de declaracin le dicen al compilador cuntos bytes se necesitan para
representar el arreglo. Entonces el nombre del arreglo se asocia con las caracteristicas del
mismo, estas son:
La funcin de acceso utiliza esta informacin para determinar la posicin del elemento
deseado, usando una simple multiplicacin y una suma:
Posicin Elemento[i] = Direccin Base + (i - Limite Inferior) * Tamao Elemento
Cadenas
Una cadena es una secuencia de caracteres. Se utiliza para guardar textos. Dado que la
longitud es dinmica, se usan algunos bits extras con informacin sobre la longitud
mxima, la longitud real de la cadena o un indicador de fin de cadena.
Por ejemplo, Pascal almacena en el primer byte, el nmero de caracteres que contiene la
cadena. Por ello, la longitud mxima que permite es de 255 caracteres.
C permite cadenas de longitud indefinida, pues codifica la informacin desde el primer
byte, hasta encontrar un caracter nulo (cdigo ASCII 0), que funciona como terminador de
cadena.
UES_MICROPROGRAMACION_JEIT