El post que buscas se encuentra eliminado, pero este también te puede interesar

Si entras,no sales del post sin aprender ensamblador,parte 1

Anuncios

Lenguaje Ensamblador


Definición

El lenguaje ensamblador, o assembler (assembly language en inglés ) es un lenguaje de programación de bajo nivel 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 dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente 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 a 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 portables.

Indice:

-INTRODUCCION AL LENGUAJE ENSAMBLADOR

1.1. Lenguaje de Bajo Nivel.
1.2. Ventajas de los Lenguajes Ensambladores.

-EL PROCESADOR

2.1. Unidades Funcionales Básicas.

2.1.1. Unidad Central de Procesos.
2.1.2. Unidad de Memoria Principal.
2.1.3. Unidad de Entradas y Salidas.
2.1.4. Interconexión de las Unidades Funcionales.


2.2. Registros Internos del Procesador.

-LA MEMORIA PRINCIPAL

3.1. Segmento.
3.2. Desplazamiento.
3.3. Métodos de Direccionamiento.

-INTRODUCCION A LOS SERVICIOS DE INTERRUPCION

4.1. Concepto de Interrupción.
4.2. Tabla de Servicios de Interrupción.
4.3. Eventos de una Interrupción.
4.5. Interrupción de BIOS.
4.6. Interrupción de DOS.

-ESTRUCTURA DE UN PROGRAMA EN LENGUAJE ENSAMBLADOR

5.1. Elementos Básicos.
5.2. Directivas de Segmento.

-INTRUCCIONES BASICAS

6.1. Transferencia de Datos.
6.2. Suma y Resta.
6.3. Operaciones Lógicas.
6.4. Corrimiento y Rotación.
6.5. Multiplicación y División.
6.6. Comparación.
6.7. Saltos Condicionales e Incondicionales.

-PROCEDIMIENTOS

7.1. Definición.
7.2. Llamada.

-MACROS

8.1. Introducción.
8.2. Definición de una Macro.
8.3. Manejo de Paramétros.
8.4. Manejo de Etiquetas Locales.
8.5. Bibliotecas de Macros.



Empezando...

UNIDAD I

INTRODUCCION AL LENGUAJE ENSAMBLADOR

1.1. Lenguaje de Bajo Nivel.

Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar.

Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.

La información que hace que el hardware de la computadora realice una determinada actividad de llama instrucción. Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina.

El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse de la siguiente forma:


0110110010100100111 10110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aun mas difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas.

La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que:


<<Traslade el contenido de la posición de memoria X a la posición de memoria Y.>>


Si lo vemos escrito de esta forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, pero la máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra.


Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje máquina. En este caso el traductor era el programador; pero vimos también los problemas que esto causaba.

Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina para ayudar en la traducción de estos programas. Es decir, que si a una máquina elemental se le dotaba de un programa, también elemental, que tradujera un número determinado de caracteres de caracteres alfabéticos en una secuencia de unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos, en la que cada uno de los grupos indicaría una acción a realizar por el ordenador y, una vez escrito el programa, sería la propia máquina la que pasaría los grupos de caracteres a bits.

Las ventajas de esto son evidentes, ya que para el hombre resulta mas fácil manipular grupos de caracteres y la traducción se haría de manera automática. Por ejemplo, se podría escribir:


TRASLADAR 11010110, 00011101


Esto indicaría que el contenido de la posición 11010110 había que pasarlo a la posición 00011101 si se sabe que al grupo alfabético TRASLADAR le corresponde la secuencia de bits 11110101. La máquina traduciría la anterior instrucción como:


11110101 11010110 00011101


Al grupo alfabético se le denomina mnemotécnico, y existirá un mnemotécnico por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina.

De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que, además de los mnemotécnicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instrucción se podría escribir de la siguiente forma:


TRASLADAR POS-A POS-B


Que nos resulta de más fácil comprensión.


También se introdujo la posibilidad de indicar a la computadora la dirección de un salto en la secuencia de ejecución de un programa mediante la utilización de etiquetas.


A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez más para que la labor del programador fuera más fácil, incluyendo los denominados directivos del ensamblador, que son órdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje máquina.

Aun con todas estas sofisticaciones y ayudas, el programador de lenguaje ensamblador debe conocer perfectamente el sistema físico (Hardware) de la máquina con que trabaja, pues aunque emplee mnemotécnicos, etiquetas, etc., éstas sirven para indicar una posición de memoria determinada, un registro o cualquier otra parte de la máquina.

Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el <<hard>> concreto de una determinada máquina. Aquí radica la diferencia importante con los lenguajes más complejos, llamados de alto nivel, como el Basic, Pascal, Cobol, etc., ya que en éstos el programador no tiene porque reconocer el <<hard>> de la máquina. Trabaja con variables, constantes e instrucciones simbólicas, y es el traductor quien las transforma en las direcciones apropiadas.

1.2. Ventajas de los Lenguajes Ensambladores.

El corazón de la computadora es el microprocesador, éste maneja las necesidades aritméticas, de lógica y de control de la computadora.

El microprocesador tiene su origen en la década de los sesenta, cuando se diseño el circuito integrado (IC por sus siglas en ingles) al combinar varios componentes electrónicos en un solo componente sobre un "chip" de silicio.

Los fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempiés y lo conectaron a un sistema en funcionamiento. A principios de los años setenta Intel introdujo el chip 8008 el cual, instalado en una computadora terminal, acompaño a la primera generación de microprocesadores.

En 1974 el 8008 evoluciono en el 8080, un popular microprocesador de la segunda generación para propósitos generales. En 1978 Intel produjo la tercera generación de procesadores 8086, para proporcionar alguna compatibilidad con el 8080 y que representan un avance significativo de diseño.

Después, Intel desarrollo una variación del 8086 para ofrecer un diseño sencillo y compatibilidad con los dispositivos de entrada/salida de ese momento. Este nuevo procesador, el 8088, fue seleccionado por IBM para su computadora personal en 1981. Una versión mejorada del 8088 es el 80188, y versiones mejoradas del 8086, son los 80186, 80286, 80386, 80486 y el Pentium, cada uno de ellos permite operaciones adicionales y más procesamiento.

La variedad de microcomputadoras también ocasiono un renovado interés en el lenguaje ensamblado, cuyo uso conlleva a diferentes ventajas:


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

* El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy técnicas que serian difíciles, si no es que imposibles de realizar en un lenguaje de alto nivel.

* El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la maquina que ningún lenguaje de alto nivel puede ofrecer.

* 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 practica 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 lenguajes de alto nivel fueron diseñados para eliminar las particularidades de una computadora especifica, mientras que un lenguaje ensamblador esta diseñado para una computadora especifica, o, de manera más correcta, para una familia especifica de microprocesadores.

A continuación se listan los requisitos para aprender el lenguaje ensamblador de la PC:


* Tener acceso a una computadora personal de IBM (cualquier modelo) o una compatible.

* Una copia del sistema operativo MS-DOS o PC-DOS y estar familiarizados con su uso.

* Una copia de un programa ensamblador. Las versiones de Microsoft son conocidas como MASM y QuickAssembler: TASM es de Borland y OPTASM es de System.


Para el aprendizaje de lenguaje ensamblador no es necesario lo siguiente:


* Conocimiento previo de un lenguaje de programación, aunque tenerlo puede ayudarle a comprender algunos conceptos de programación más rápido.

* Conocimiento previo de electrónica o circuiteria.

Hasta aqui llegamos con la primera parte, espero que les haya sido de utilidad, siganme para estar al tanto de las actualizaciones del curso, un saludo.

8 comentarios - Si entras,no sales del post sin aprender ensamblador,parte 1

@ocaransin +2
Interesante !
espero la segunda parte
Gracias !
@Thierry +1
+2 , me viene al pelo , uno de los lenguaje que siempre quise aprender
@andres30x
Buena info espera las demas partes
@MyHacking
Me pueden dar el link de la segunda parte
@szk1509
esta genial la info! y bueno como los demas estoy a la expectativa de la segunda parte!