Ir al contenido principal

Ensamblador (Teoría).


- ¿Qué es 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.

- Tipos de IDE para el lenguaje ensamblador:
Existen una gran variedad de ide's para dicho lenguje, algunos ejemplos son:


- Perspectiva histórica
     Los lenguajes ensambladores fueron primero desarrollados en los años 1950, cuando fueron referidos como lenguajes de programación de segunda generación.
Una vez fueron ampliamente usados para todo tipo de programación. Sin embargo, por los años 1980 (1990 en los microcomputadores), su uso había sido en gran parte suplantado por los lenguajes de alto nivel, en la búsqueda de una mejorada productividad en programación. Hoy en día, aunque el lenguaje ensamblador es casi siempre manejado y generado por los compiladores, todavía se usa para la manipulación directa del hardware, acceso a instrucciones especializadas del procesador, o para resolver problemas de desempeño crítico. Los usos típicos son drivers de dispositivo, sistemas embebidos de bajo nivel, y sistemas de tiempo real.
Los sistemas operativos fueron casi exclusivamente escritos en lenguaje ensamblador hasta la aceptación amplia del lenguaje de programación C en los años 1970 y principios de los 1980. También, muchas aplicaciones comerciales fueron escritas en lenguaje ensamblador, incluyendo una gran cantidad del software escrito por grandes corporaciones para mainframes de IBM. Los lenguajes COBOL y FORTRAN eventualmente desplazaron mucho de este trabajo, aunque un número de organizaciones grandes conservaran las infraestructuras de aplicaciones en lenguaje ensamblador hasta bien entrados los años 1990.

- Temas:
1.1 Importancia de la programación en lenguaje ensamblador.
   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 en él 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.
Caracteristica:
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.

Ventajas:

  • Trabaja directamente con el microprocesador al ejecutar un programa, ya que este lenguaje es el más cercano a la máquina, la computadora lo procesa más rápido.
  • 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.

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.
  • 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.
  • 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.
1.2 El procesador y sus registros internos:
     Registros del procesador: 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:
... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Los registros internos del procesador se pueden clasificar en 6 tipos diferentes:
1. Registros de segmento
2. Registros de propósito general
3. Registros de apuntadores
4. Registros de banderas
5. Registros de Puntero de instrucción
6. Registros de Pila

1. Registros de segmento:
Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocida como el segmento actual.
2. Registros de propósito general: 
Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del sistema. Son únicos en el sentido de que se puede direccionarlos como una palabra o como una parte de un byte. El último byte de la izquierda es la parte "alta", y el último byte de la derecha es la parte "baja". Por ejemplo, el registro CX consta de una parte CH (alta) y una parte Cl (baja), y usted puede referirse a cualquier parte por su nombre.
3. Registros 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.
4. Registro 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.
5. Registro de Apuntador de Instrucciones:
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se está ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP.
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.

Registro de puntero
Registro de Apuntador de Instrucciones:
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro del segmento de código que se está ejecutando actualmente. Los procesadores 80386 y posteriores tienen un IP ampliado de 32 bits, llamado EIP. En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la siguiente instrucción que será ejecutada, el procesador combina las direcciones en el CS y el IP:
Segmento de dirección en el registro CS: 25A40H Desplazamiento de dirección en el registro IP: + 412H Dirección de la siguiente instrucción: 25E52H.
  • Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor de desplazamiento que se refiere a la palabra actual que esta 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.
  • Registro BP. El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidos vía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.
  • Los registros SI y DI están disponibles para direccionamiento indexado y para sumas y restas.
  • Registro SI. El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el ESI.
  • Registro DI. El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres. En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso de un registro ampliado de 32 bits, el EDI.

Comentarios

Entradas populares de este blog

Juego del gato en python 2.7

Capturas: - Forma visual como se veria nuestro juego. - Para iniciarlo damos en el boton iniciar y te pedira el nombre de dos jugadores. - Muestra de como seria la partida e indica el turno de cada jugador. - Mensaje del ganador (juador 1). - Mensaje del ganador (jugador 2). - Hoy (11/09/2017) le he añadido mas diseño a la ventana del juego y este es el resultado. - El juego se puede reiniciar cuantas veces se quiera sin necesidad de estar abriendo y cerrando el programa, por sino lo notan el cursor cambia de diseño a un lapiz al ponerlo en los botones, espero les guste :3. Código: from Tkinter import * import tkMessageBox import tkSimpleDialog def bloq(): for i in range(0,9):    lisb[i].config(state="disable") def inij(): for i in range(0,9): lisb[i].config(state="normal") lisb[i].config(bg="lightgray") lisb[i].config(text="") tab[i] = "N" global nomj1,nomj2 #indica a q

IDE para python - brackets

La IDE que en lo personal me ha gustado mucho es brackets es open   source y muy como para trabajar, para descargar vamos a su pagina oficial:  http://brackets.io La descargamos y procedemos a intalarlo la IDE pero les saldra diferentes a ustedes porque yo ya le he hecho modificaciones que le mostrare mas adelante como se hacen Para hacer que funcione mejor la interfaz que maneja brackets usaremos distintos plugins que mejores la vista de brackets ya tengo una lista hecha de lo plugins ponermos donde dice buscar y el nombre del plugin y las que mas nos interesan son estas y ya con eso tendriamos nuestra IDE configurada y lista para usarla.

Videojuego en 3D en pygame

Capturas del juego 3D expusto en clase: Carpeta del videojuego dando click  Aquí .