LENGUAJE ENSAMBLADOR
1.
CONTENIDO:
ð
Definición:
Consiste en un
conjunto de mnemónicos que representan instrucciones básicas para los
computadores, microprocesadores, microcontroladores y otros circuitos
integrados programables. Implementa una representación simbólica de los códigos
de máquina binarios y otras constantes necesarias para programar una
arquitectura de procesador y constituye la representación más directa del
código máquina específico para cada arquitectura legible por un programador. Cada arquitectura de
procesador tiene su propio lenguaje ensamblador que usualmente es definida por
el fabricante de hardware, y está basada en los mnemónicos que simbolizan los
pasos de procesamiento (las instrucciones), los registros del procesador, las
posiciones de memoria y otras características del lenguaje.
Un lenguaje
ensamblador es por lo tanto específico de cierta arquitectura de computador
física (o virtual). Esto está en contraste con la mayoría de los lenguajes de
programación de alto nivel, que idealmente son portátiles.
ð
Características:
ü
El código
escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya
que su estructura se acerca al lenguaje máquina, es decir, es un lenguaje de
bajo nivel.
ü
El
lenguaje ensamblador es difícilmente portable, es decir, un código escrito para
un microprocesador, puede necesitar ser modificado, para poder ser usado en
otra máquina distinta. Al cambiar a una máquina con arquitectura diferente,
generalmente es necesario reescribirlo completamente.
ü
Los programas
hechos por un programador experto en lenguaje ensamblador son generalmente
mucho más rápidos y consumen menos recursos del sistema (memoria RAM y ROM) que
el programa equivalente compilado desde un lenguaje de alto nivel. Al programar
cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan más rápidamente y ocupan menos espacio que con lenguajes de alto
nivel.
ü
Con el
lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas
por un microprocesador por lo que se pueden crear segmentos de código difíciles
y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre
otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que
generalmente no están disponibles en los lenguajes de alto nivel.
ü
También
se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir
que se interrumpa durante su ejecución.
ð
Ventajas:
ü
Velocidad.
- Como trabaja directamente con el microprocesador al ejecutar un programa,
pues como este lenguaje es el más cercano a la máquina la computadora lo
procesa más rápido.
ü
Eficiencia
de tamaño. - Un programa en ensamblador no ocupa mucho espacio en memoria porque
no tiene que cargan librerías y demás como son los lenguajes de alto nivel.
ü
Flexibilidad.
- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse
en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen
en una u otra forma limitantes para explotar al máximo los recursos de la
máquina. O sea que en lenguaje ensamblador se pueden hacer tareas específicas
que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen
ciertas limitantes que no se lo permiten.
ð
Desventajas:
ü
Tiempo de
programación. - Como es un lenguaje de bajo nivel requiere más instrucciones
para realizar el mismo proceso, en comparación con un lenguaje de alto nivel.
Por otro lado, requiere de más cuidado por parte del programador, pues es
propenso a que los errores de lógica se reflejen más fuertemente en la
ejecución.
ü
Programas
fuente grandes. - Por las mismas razones que aumenta el tiempo, crecen los
programas fuentes; simplemente requerimos más instrucciones primitivas para
describir procesos equivalentes. Esto es una desventaja porque dificulta el
mantenimiento de los programas, y nuevamente reduce la productividad de los
programadores.
ü
Peligro
de afectar recursos inesperadamente. - Que todo error que podamos cometer, o
todo riesgo que podamos tener, podemos afectar los recursos de la máquina,
programar en este lenguaje lo más común que pueda pasar es que la máquina se
bloquee o se reinicialice. Porque con este lenguaje es perfectamente posible (y
sencillo) realizar secuencias de instrucciones inválidas, que normalmente no
aparecen al usar un lenguaje de alto nivel.
ü
Falta de portabilidad.
- Porque para cada máquina existe un lenguaje ensamblador; por ello,
evidentemente no es una selección apropiada de lenguaje cuando deseamos
codificar en una máquina y luego llevar los programas a otros sistemas
operativos o modelos de computadoras.
ð
Instrucciones:
Instrucciones de
transferencia Son utilizadas para mover los contenidos de los operandos. Cada
instrucción se puede usar con diferentes modos de direccionamiento.
MOV
MOVS (MOVSB) (MOVSW)
Instrucciones de
carga Son instrucciones específicas de los registros. Son usadas para cargar en
algún registro bytes o cadenas de bytes.
LODS (LODSB) (LODSW)
LAHF
LDS
LEA
LES
Instrucciones de la
pila Estas instrucciones permiten el uso de la pila para almacenar y extraer
datos.
POP
POPF
PUSH
PUSHF
Instrucción MOV
Propósito:
Transferencia de datos entre celdas de memoria, registros y acumulador.
Sintaxis:
MOV Destino, Fuente
Donde Destino es el
lugar a donde se moverán los datos y fuente es el lugar donde se encuentran
dichos datos.
Los diferentes
movimientos de datos permitidos para esta instrucción son:
Destino: memoria.
Fuente: acumulador
Destino: acumulador.
Fuente: memoria
Destino: registro de
segmento. Fuente: memoria/registro
Destino: memoria/registro.
Fuente: registro de segmento
Destino: registro.
Fuente: registro
Destino: registro.
Fuente: memoria
Destino: memoria.
Fuente: registro
Destino: registro.
Fuente: dato inmediato
Destino: memoria.
Fuente: dato inmediato
Ejemplo:
MOV AX,0006h
MOV BX, AX
MOV AX,4C00h
INT 21H
Este pequeño programa
mueve el valor 0006H al registro AX, luego mueve el contenido de AX (0006h) al
registro BX, por último, mueve el valor 4C00h al registro AX para terminar la
ejecución con la opción 4C de la interrupción 21h.
Instrucción MOVS (MOVSB) (MOVSW)
Propósito: Mover
cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el
destino direccionado por DI.
Sintaxis:
MOVS
Este comando no
necesita parámetros ya que toma como dirección fuente el contenido del registro
SI y como destino el contenido de DI. La secuencia de instrucciones siguiente
ilustran esto:
MOV SI, OFFSET VAR1
MOV DI, OFFSET VAR2
MOVS
Primero inicializamos
los valores de SI y DI con las direcciones de las variables VAR1 y VAR2
respectivamente, después al ejecutar MOVS se copia el contenido de VAR1 a VAR2.
Los comandos MOVSB y
MOVSW se utilizan de la misma forma que MOVS, el primero mueve un byte y el
segundo una palabra.
Instrucción LODS (LODSB)
(LODSW)
Propósito: Cargar
cadenas de un byte o palabra al acumulador.
Sintaxis:
LODS
Esta instrucción toma
la cadena que se encuentre en la dirección especificada por SI, la carga al
registro AL (o AX) y suma o resta 1 (según el estado de DF) a SI si la
transferencia es de bytes o 2 si la transferencia es de palabras.
MOV SI, OFFSET VAR1
LODS
La primera línea
carga la dirección de VAR1 en SI y la segunda línea lleva el contenido de esa
localidad al registro AL.
Los comandos LODSB y
LODSW se utilizan de la misma forma, el primero carga un byte y el segundo una
palabra (utiliza el registro completo AX).
Instrucción LAHF
Propósito: Transfiere
al registro AH el contenido de las banderas
Sintaxis:
LAHF
Esta instrucción es
útil para verificar el estado de las banderas durante la ejecución de nuestro
programa.
Las banderas quedan
en el siguiente orden dentro del registro:
SF ZF ¿? AF ¿? PF ¿?
CF
El símbolo
"¿?" significa que en esos bits habrá. un valor indefinido.
Instrucción LDS
Propósito: Cargar el
registro del segmento de datos
Sintaxis:
LDS destino, fuente
El operando fuente
debe ser una palabra doble en memoria. La palabra asociada con la dirección más
grande es transferida a DS, o sea que se toma como la dirección del segmento.
La palabra asociada con la dirección menor es la dirección del desplazamiento y
se deposita en el registro señalado como destino.
Instrucción LEA
Propósito: Carga la
dirección del operando fuente.
Sintaxis:
LEA destino, fuente
El operando fuente
debe estar ubicado en memoria, y se coloca su desplazamiento en el registro
índice o apuntador especificado en destino.
Para ilustrar una de
las facilidades que tenemos con este comando pongamos una equivalencia:
MOV SI, OFFSET VAR1
Equivale a:
LEA SI, VAR1
Es muy probable que
para el programador sea más sencillo crear programas extensos utilizando este
último formato.
Instrucción LES
Propósito: Carga el
registro del segmento extra
Sintaxis:
LES destino, fuente
El operando fuente
debe ser un operando en memoria de palabra doble. El contenido de la palabra
con la dirección mayor se interpreta como la dirección del segmento y se coloca
en ES. La palabra con la dirección menor es la dirección del desplazamiento y
se coloca en el registro especificado en el parámetro destino.
Instrucción POP
Propósito: Recupera
un dato de la pila
Sintaxis:
POP destino
Esta instrucción
transfiere el último valor almacenado en la pila al operando destino, despues
incrementa en dos el registro SP. Este incremento se debe a que la pila va
creciendo desde la dirección más alta de memoria del segmento hacia la más
baja, y la pila solo trabaja con palabras (2 bytes), entonces al incrementar en
dos el registro SP realmente se le está restando dos al tamaño real de la pila.
Instrucción POPF
Propósito: Extrae las
banderas almacenadas en la pila.
Sintaxis:
POPF
Este comando
transfiere bits de la palabra almacenada en la parte superior de la pila hacia
el registro de banderas.
La forma de
transferencia es la siguiente:
BIT BANDERA
0 CF
2 PF
4 AF
6 ZF
7 SF
8 TF
9 IF
10 DF
11 OF
Estas localizaciones
son las mismas para el comando PUSHF
Una vez hecha la
transferencia se incrementa en 2 el registro SP disminuyendo así el tamaño de
la pila.
Instrucción PUSH
Propósito: Coloca una
palabra en la pila.
Sintaxis:
PUSH fuente
La instrucción PUSH
decrementa en dos el valor de SP y luego transfiere el contenido del operando
fuente a la nueva dirección resultante en el registro recién modificado.
El decremento en la
dirección se debe a que al agregar valores a la pila ésta crece de la dirección
mayor a la dirección menor del segmento, por lo tanto, al restarle 2 al valor
del registro SP lo que hacemos es aumentar el tamaño de la pila en dos bytes,
que es la única cantidad de información que puede manejar la pila en cada
entrada y salida de datos.
Instrucción PUSHF
Propósito: Coloca el
valor de las banderas en la pila
Sintaxis:
PUSHF
Este comando
decrementa en 2 el valor del registro SP y luego se transfiere el contenido del
registro de banderas a la pila, en la dirección indicada por SP.
Las banderas quedan
almacenadas en memoria en los mismos bits indicados en el comando POPF.
ð
Registros:
Los registros del
procesador se emplean para controlar instrucciones en ejecución, manejar
direccionamiento de memoria y proporcionar capacidad aritmética. Los registros
son direccionables por medio de un nombre. Los bits por convención, se numeran
de derecha a izquierda, como en:
Los registros
internos del procesador se pueden clasificar en 6 tipos diferentes.
1.Registros de segmento: Estos registros permiten direccionar la memoria. Los
registros de segmento se utilizan para referenciar áreas de memoria. La
plataforma IA-32 permite direccionar la memoria según el modelo de memoria
lineal o el modelo de memoria segmentada. El modelo de memoria lineal presenta
todo el espacio de direcciones de la memoria como un espacio contiguo. Todas
las instrucciones, los datos y la pila se encuentran en el mismo espacio de
direcciones de memoria. Cada posición de memoria se referencia mediante una
dirección específica llamada "dirección lineal".
2.Registros de propósito general: Almacenan datos y están disponibles para ser usados por
el programador. Los registros de propósito general se utilizan para almacenar
datos temporalmente. Debido a que estos registros han evolucionado desde una
máquina de 8 bits (el 8080) un grupo de registros aún se puede utilizar con un
tamaño de 8 bits para mantener compatibilidad con toda la línea de
procesadores.
3.Registros de apuntadores: Los registros SP (apuntador de la pila) Y BP (apuntador
de base) están asociados con el registro SS y permiten al sistema accesar datos
en el segmento de la pila. Registro SP. El apuntador de la pila de 16 bits está
asociado con el registro SS y proporciona un valor de desplazamiento que se
refiere a la palabra actual que está siendo procesada en la pila. Los procesadores
80386 y posteriores tienen un apuntador de pila de 32 bits, el registro ESP. El
sistema maneja de forma automática estos registros.
4.Registros de banderas: De los 16 bits del registro de banderas, nueve son
comunes a toda la familia de procesadores 8086, y sirven para indicar el estado
actual de la máquina y el resultado del procesamiento. Muchas instrucciones que
piden comparaciones y aritmética cambian el estado de las banderas, algunas
cuyas instrucciones pueden realizar pruebas para determinar la acción
subsecuente. Las banderas más importantes para la programación en ensamblador
son O, S, Z y C, para operaciones de comparación y aritméticas, y D para
operaciones de cadenas de caracteres. Los procesadores 80286 y posteriores
tienen algunas banderas usadas para propósitos internos, en especial las que
afectan al modo protegido. Los procesadores 80286 y posteriores tienen un
registro extendido de banderas conocido como Eflags.
5.Registros de Puntero de instrucción: El registro apuntador de instrucción
(eip) o contador de programa contiene la dirección de la próxima instrucción a
ejecutarse.
6.Registros de Pila: La pila es un área de memoria importante y por ello
tiene, en vez de uno, dos registros que se usan como desplazamiento (offset)
para apuntar a su contenido. Se usan como complemento al registro y son:
-SP- Stack Pointer:
Se traduce como puntero de pila y es el que se reserva el procesador para uso
propio en instrucciones de manipulado de pila. Por lo general, el programador
no debe alterar su contenido.
-BP- Base pointer: Se
usa como registro auxiliar. El programador puede usarlo para su provecho.
ð
Ejemplos:
;Programa HOLA MUNDO
DATOS SEGMENT
MENSAJE DB "HOLA
MUNDO$"
DATOS ENDS
PILA SEGMENT STACK "STACK"
DB 200 DUP(0)
PILA ENDS
CODIGO SEGMENT
ASSUME
CS:CODIGO,DSATOS,SSILA
PRINCIPAL PROC
MOV AX,DATOS
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MENSAJE
INT 21H
MOV AH,4CH
INT 21H
PRINCIPAL ENDP
CODIGO ENDS
END PRINCIPAL
2.
RESUMEN:
A los programas que permiten pasar del programa escrito
con instrucciones simbólicas del lenguaje maquina (programa fuente, en
ensamblador) al lenguaje máquina también se les denomina normalmente
ensambladores. Un programa escrito en el lenguaje ensamblador requiere
considerablemente menos memoria y tiempo de ejecución que un programa escrito
en los conocidos lenguajes de alto nivel, como Pascal y C.
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 recodificar en lenguaje
ensamblador aquellas rutinas que han causado cuellos de botella en el
procesamiento. Los programas residentes y rutinas de servicio de interrupción
casi siempre son desarrollados en el lenguaje ensamblador, los sistemas de
cómputo están conformados por: Hardware, software.
3.
SUMMARY:
A pass programs that allow the written program with
symbolic machine language instructions (source program in assembler) into
machine language are also commonly called assemblers. A program written in
assembly language requires considerably less memory and runtime that a program
written in the known high-level languages such as Pascal and C.
Although most specialists Software develops applications
in high-level languages, which are easier to write and maintain, a common
practice is to recode those routines in assembly language that have caused
bottlenecks in processing. Resident programs and interrupt service routines are
almost always developed in assembly language, computer systems are comprised
of: Hardware, software.
4.
RECOMENDACIONES:
ü
Diseñar
un ensamblador en línea para que reconozca los tokens en el momento que se
edita el programa.
ü
Mejorar
el editor para que al reconocer un token lo resalte con un color
ü
determinado,
por ejemplo, las palabras reservadas de azul, las etiquetas de rojo, los
números de verde, etc.
ü
Modificar
el ensamblador para que permita ensamblar y ejecutar procedimientos.
ü
Mejorar
el manejador de errores haciendo más descriptivos los mensajes de error.
ü
Diseñar
un lenguaje de alto nivel que al ser compilado genere el código de máquina para
esta computadora básica.
5.
CONCLUSIONES:
ü
Como
conclusión podemos decir que el lenguaje ensamblador es más que un tipo de
lenguaje de bajo nivel en el cual es empleado para crear programas
informáticos.
ü
Este
lenguaje es creado a base de instrucciones para intentar sustituir al lenguaje
maquina por uno similar utilizado por el hombre.
ü
La
importancia de este es que en él se pueden hacer cualquier tipo de programas
que en otros lenguajes de alto nivel no, al igual que ocupan menos espacio en
la memoria.
ü
Una de
las cosas importantes es que está ocupado al diseño de las tarjetas madres,
cosa que un programa común no podría hacer.
6.
APRECIACION DEL EQUIPO:
Como equipo nuestro aporte es que nos damos cuenta que el
lenguaje ensamblador sirve para comunicarnos con la maquina esto nos ayuda en
programación en donde la mayoría de las cosas lo hacemos con comando que la
maquina entiende todo lo que conocemos a nivel tecnología este vasado a
lenguaje máquina.
DIAPOSITIVA:
http://es.slideshare.net/JorgeParedesToledo/lenguaje-ensamblador-67232144
DIAPOSITIVA:
http://es.slideshare.net/JorgeParedesToledo/lenguaje-ensamblador-67232144
7.
BIBLIOGRAFIA O LINKOGRAFIA:
ü
http://www.angelfire.com/ak5/seccion-academica/Ventajas_y_desventajas_del_Lenguaje_Ensamblador.htm
ü
http://www.taringa.net/post/hazlo-tu-mismo/14201465/Lenguaje-Ensamblador-Lo-basico-con-ejemplos.html
Bien elaborada la PRESENTACION. Defina claramente las CONCLUSIONES y RECOMENDACIONES. Detalle la APRECIACION con sus propias palabras. Trabajo bien desarrollado y explicado. Proponga un foro de discusión sobre el tema.Gracias por su investigación.Saludos
ResponderEliminarLuckyLand Slot - Mapyro
ResponderEliminarFind the best LuckyLand Slot, open now, with Mapyro and other online 당진 출장샵 casinos! 시흥 출장샵 Play LuckyLand, the 대전광역 출장샵 7×5, 1024 ways to win video 광주광역 출장안마 slot 청주 출장마사지 from Mapyro and more!