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

   7.    BIBLIOGRAFIA O LINKOGRAFIA:







Comentarios

  1. 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

    ResponderEliminar
  2. LuckyLand Slot - Mapyro
    Find 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!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

LENGUAJE ENSAMBLADOR CON ARREGLOS

FASES PARA CREACIÓN DE UNA BASE DE DATOS

MODELO RELACIONAL