jueves, 14 de agosto de 2008

HERRAMIENTAS NECESARIAS PARA PROGRAMAR EN LENGUAJE ENSAMBLADOR.


Hola a todos, y Bienvenidos antes que nada, este es un blog que he creado con la finalidad de poner al alcance de todos ustedes algunas herrameintas necesarias para poder iniciarse en el arte de la programacion en Lenguaje Ensamblador, es decir en el lennguaje maquina o lo que es lo mismo lenguaje de bajo nivel y no por que sea bajo su nivel sino porque es en este lenguaje en el que se programa a nivel de la maquina utilizando las instrucciones y las interrupciones para trabajar directamente con el hardware por medio de el microprocesador.

Es por eso que les pondré algunas herramientas para poder empezar, esto lo hago principalmente para los que llevarán Lenguaje Ensamblador este semestre , espero que les sirva de mucha ayuda, así que no dejen de descargarlos.

*Primero que nada les pongo un manual de interrupciones, así como un repertorio de todas las instrucciones del 8086 que como sabrán a lo largo del curso necesitarán 2 cosas muy importantes, conocer las instrucciones y las interrupciones, y pues son muchisimas, no se podrían aprender todas de memoria, estas se basan en el microprocesador 8086 que es el estandar de los procesadores.

*En Segundo Lugar les pongo un programa "El Emu8086" con su respectivo serial, este programa es uno de los ultimos que ha salido, y pues lo tiene todo, es un emulador, es editor, ensambla y enlaza, aunque les recomiendo hacerlo a la antigüita pero ahi esta para que lo prueben

*En tercer lugar les pongo el TurboDebug que más que nada es un depurador, es decir, con este programa no se puede ensamblar ni enlazar, si no que más que nada sirve para abrir archivos con extension .exe o sea el ejecutable que resulta al final, y al abrir sirve para depurar errores , ir viendo paso a paso el programa. Es de mucha ayuda para poder encontrar errores o ver el funcionamiento linea por linea del programa.

Y en cuarto lugar les pongo esta descarga "MASM", que es fundamental, muy pero muy fundamental para poder ensamblar y enlazar los programas pues sin ellos simplemente no se puede, les explico de otra forma, cuando ustedes editan o crean un programa en Lenguaje Ensamblador, ese archivo lo deben de guardar con la extension .ASM en una carpeta en la cual deben de tener ya descomprimido lo que contenga esta descarga, luego les explico por qué.

De una vez les pongo también el programa de esta materia , el calendario del periodo Agosto-Diciembre 2008 y el cuadro de las materias de la carrera de Ingenieria en Sistemas Computacionales por si alguien los quiere.


-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

¿COMO ENSAMBLAR?, ¿COMO ENLAZAR?,¿QUE NECESITO PARA HACERLO?....PUES EMPECEMOS DE UNA VEZ...

Bueno pues creo que es demasiado prematuro iniciar con esto pero considero que es lo más emocionante del curso, es decir, saber como se ensambla y enlaza un programa, todo lo que les digo a continuacion lo prendí con mi profesor de Lenguaje Ensamblador , DANIEL RÍOS GARCÍA.

Primero que nada hay que ver de que manera vamos a editar, ensamblar y enlazar.
Se puede crear el programa directamente en el debug de windows que es la herraminta que ya viene en el MS-DOS por de faul, se accede a el escribiendo en una sesion de ms-dos la palabra "debug" y enter pero resulta muy tedioso porque pues basicamente no hay interfaz grafica y hay que aprenderse muchos comando, así que no se los recomiendo.

Tambien se puede hacer utilizando el "Emu8086", pero aqui todo es automatico, solo se escribe el codigo en el edidor y presionar botones y mas botones todo resulta facil, de manera muy personal creo que se pierde la esencia, por eso para mi gusto es mejor hacerlo a la antigüita,la manera original es decir en el bloc de notas y ensamblar en el MS-DOS:

A continuacion les pongo una descarga donde explico de manera rapida los tres entornos de programacion , el debug, el turbodebug y el emu8086 (Es una exposicion que realicé en clases esperoles sirva) ,y posteriormente les explico paso a paso como ensamblar un programa.

Entornos de Programacion del Lenguaje Ensamblador.

PASOS PARA ENSAMBLAR Y ENLAZAR UN PROGRAMA:

  1. Editar el Codigo Fuente en el Blog de Notas, para lo cual es necesario conocer la estructura de un programa en ensamblador(Adelante les pondre la estructura larga), es decir el Segmento de Pila, el Segmento de Datos y el Segmento de Codigo, Ademas deben de conocer las instrucciones y las interrupciones , ademas de los registros ,para el microprocesador 8086 que es el estandar.
  2. Luego de tener ya editado el programa hay que guardarlo con la extension .ASM , esta extension se le pone en el nombre, ya que es en bloc de notas donde estamos editando (ejemplo: primerprograma.ASM), muy importande también es ver en donde se guarda, hay que guardarlo en la carpeta donde tengamos el MASM.EXE y el LINK.EXE, los cuales puedes descargar del enlace anterior y descomprimirlo en una carpeta donde estaremos guardando nuestros programas.
  3. Una vez Guardado nuestro Codigo fuente con la extension .ASM, hay que habrir una sesion del MS-DOS, esto se hace al ir a inicio-programas-accesorios-Simbolo del Sistema o bien inicio-ejecutar-cmd y enter.
  4. Ahora desde el MS-DOS nos ubicamos en la carpeta donde este guardado nuestro codigofuente.ASM (Recomiendo que creen una carpeta en C:\ ,para ubicarse má rapido en la carpeta).
  5. Una vez ubicados en la carpeta escribimos en el MS-DOS lo siguiente:
  • MASM nombredelprograma.ASM; (Despues del punto y coma dar un enter ,esto nos crea un archibo con la extension .OBJ, claro que si hay errores no lo hará).
  • Luego escribir: LINK nombredelprograma.OBJ; (Luego del punto y coma dar enter, esto nos enlazará el programa es decir nos linkeará y creara el archivo con la extensión .EXE)
Y listo ya hemos ensamblado y enlazado, y ya tenemos el archivo ejecutable .EXE
Como se podrán dar cuenta el proceso de ensamblaje y de enlazado es muy pero muy sencillo, la dificultad se encuentra en crear el programa ya que hay que conocer la estructura del programa, saber para que sirve cada instruccion y cuales debemos utilizar, conocer los registros del microprocesador y las instrucciones.

EN EL SUBTEMA SIGUIENTE LES PONDRE LA ESTRUCTURA LARGA DE UN PROGRAMA EN ENSMBLADOR.

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

ESTRUCTURA DE UN PROGRAMA EN LENGUAJE ENSAMBLADOR.


A continuacion les presento como se conforma la estructura de un programa en lenguaje ensamblador: PRIMERO PONEMOS EL TITULO DEL PROGRAMA LUEGO EL SEGMENTO DE PILA, ENSEGUIDA EL SEGMENTO DE DATOS QUE ES MAS QUE NADA LA PARTE DONDE DECLARAMOS NUESTRAS VARIABLES O CADENAS QUE NOS VAN A SERVIR A LO LARGO DEL PROGRAMA Y FINALMENTE EL SEGMENTO DE CODIGO QUE ES DONDE YA ESTRUCTURAMOS LO QUE QUREREMOS QUE HAGA EL PROGRAMA UTILIZANDO LAS DEBIDAS INTERRUPCIONES E INSTRUCCIONES CON LOS DIFERENTES REGISTROS QUE EXISTEN.

Quizas a estas alturas no le entiendan nada al codigo pero aqui la finalidad solo es conocer las partes del codigo.

Este ejemplo es el tipico HOLA MUNDO


page 60,132
TITLE HOLAWILL (EXE) Operaciones de mover y sumar.
;------------------------------------------------------------------------------
STACKSG SEGMENT PARA STACK ' Stack' ; Segmento de Pila
DW 32 DUP (0)
STACKSG ENDS
;------------------------------------------------------------------------------
DATASG SEGMENT PARA 'Data' ; Segmento de datos
cadena db 'Hola Williams','$'
letrasAS db 35 dup('A')
valor dw 1740
DATASG ENDS
;------------------------------------------------------------------------------
CODESG SEGMENT PARA 'Code' ;Segmento de Codigo
BEGIN PROC FAR
ASSUME SS:STACKSG, DS:DATASG, CS:CODESG
MOV AX, DATASG ;Se asigna dirección de DATASG
MOV DS, AX ; en registro DS


MOV AH,09
LEA DX,CADENA
INT 21H


MOV AX, 4C00H ;Salida a DOS
INT 21H
BEGIN ENDP ;Fin de procedimiento
CODESG ENDS ; Fin de segmento
END BEGIN ; Fin del programa


-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------

EL MICROPROCESADOR.

¿QUE ES UN BUS?

Conjunto de cables, pisstas o condducctores que se utilizan para conectar diferentes partes del PC.

CLASIFICACION DE BUSES POR TECNOLOGIA.

Bus de direccionamiento: Señala la posición en memoria donde se lee o almacena la información.

Bus de datos: Transportar la información de un dispositivo a otro.

Bus de control: Sincroniza todo lo que hay conectado al bus para enviar y recibir mensajes en el instante correcto.


CLASIFICACION DE ACUERDO AL MODO DE TRANSMITIR LA INFORMACIÓN.

BUS UNIDIRECCIONAL: La informacion que fluye a través de el es en una sola dirección.
BUS BIDIRECCIONAL: A través de el los datos pueden fluir en cualquiera de los dos sentidos.
BUS SERIE: La información puede fluir en uno o dos sentidos.
BUS PARALELO: La información que se transmite se manda a través de varios canales simultaneos.

Una computadora tiene varios tipos de Buses de entre los cuales se encuentran los siguientes:

Processor Bus: Es usado para tranferir datos entre el CPU y el Bus del sistema principal.

Memory Bus: Es usado para tranferir información entre la memoria principal y el CPU.

Address Bus: Es usado para indicar exactamente que dirección en memoria o que dirección sobre el Bus del sistema será usada para tranferir un dato.

I/O Bus: Son los Buses que se utilizan en la entrada y salida de los datos en todo el sistema.

-------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------
REGISTROS.

Este tema es uno de los mas importantes del curso ya que son las bases para poder programar en lenguaje ensamblador, hay que conocer que es un registro, para que sirven, y que tipos de registros existen.

Un registro es una localidad de memoria que se encuentra dentro del microprocesador y sirven para almacenar datos o para realizar operaciones aritmeticas entra otras.

Los registros del microprpcesador tienen como misión fundamental almacenar las posiciones de memoria que van a sufrir repeditas manipulaciones, ya que los accesos a memoria son mucho más lentos que los accesos a los registros.

El microprocesador 8086 dispone de 14 registros de 16 bits que se emplean para controlarla ejecución de instrucciones, direccionar la memoria y proporcionar capacidad aritmetica y lógica.


Los diferentes registros del 8086 se clasifican en:

  • Registros de proposito general o de Datos.
  • Registros de Segmento.
  • Registro Apuntador de instrucciones (IP).
  • Registros Apuntadores (SP y BP)-
  • Registros indice (SI y DI) y registros de Banderas.
  • Flags o registros de Estado(FL).


Registros del 8086/88 y del 80280


Registros de Proposito General.

Se utilizan para cálculo y almacenamiento de proposito general. Hay cuatro registros de proposito general que, aparte de ser usados a voluntad por el programador, tiene fines especificos:

  1. Registro AX : Este registro es el acumulador principal, implicado en gran parte de las operaciones aritmeticas y de E/S.
  2. Registro BX : Recibe el nombre de registro base ya que es el único registro de proposito general que se usa como un indice en el direccionamiento indexado. Se suele utilizar para cálculos aritméticos.
  3. Registro CX : El CX es conocido como registro Contador ya que puede contener un valor para controlar el número de veces que se repite cierta operación.
  4. Registro DX : Se conoce como registro de datos. Algunas operaciones de E/S requieren su uso, y las operaciones de multiplicación y dividión con cifras grandes suponen que el DX y AX trabajan juntos.

Los registros de proposito general se pueden direccionar como una palabra o como un byte. El byte de la izquierda es la parte alta y el byte de la derecha es la parte baja:


Siguiendo esta nomenclatura es posible referirse a cada uno de los dos bytes, byte de orden alto y mas significativo y byte de orden bajo y menos significativo, de cada uno de estos registros. Por ejemplo: AH es el registro más significativo del registro AX, mientras que AL es el byte menos significativo.



1 comentarios:

Anónimo dijo...

Excelente Material!! Gracias