CURSO DE ASSEMBLY
ATARI 6502
Por ZZT
Lenguaje Assembly
1- Introducción
Primero que nada debemos aclarar que el lenguaje se llama assembly, no assembler como muchos erróneamente creen. Assembly es el lenguaje, assembler es el programa que usamos para "ensamblar" el programa que escribimos. Luego de esta pequeña aclaración, podemos decir que el assembly es un lenguaje de programación de bajo nivel (low-level) para ser usado en sistemas que utilicen una CPU. Este lenguaje nos permite utilizar palabras clave (llamados MNEMÓNICOS) necesarias para programar una particular arquitectura de determinada CPU. Vale decir que cada CPU tiene una determinada forma de ser programada, por lo tanto para programar debemos tener la lista llamada SET DE INSTRUCCIONES, en la cual se específica la función y valor cada código. Este set de instrucciones es definido por el fabricante de cada CPU, todos los códigos ayudan al programador a recordar las instrucciones, registros, etc.
Mnemonico |
Hexadecimal |
máquina (binario) |
LDA |
A9 |
10101001 |
Como podemos apreciar, es más fácil recordar la palabra clave LDA, que el número hexadecimal A9 o su equivalente 10101001 en binario.
2- Historia
Los primeros lenguajes assembly fueron desarrollados en los años 50's. A los de su generación son los que consideramos lenguajes de "segunda generación". Estos eliminaron la forma de programar de la primera generación (binario puro). Ayudaron mucho a reducir la perdida de tiempo en descubrir donde estaban los errores de programación y el aburrimiento en que incurrían los programadores al tener que recordar códigos en base a números y además calcular las direcciones y saltos en forma manual, cosa que recuerdo tenido que hacer cuando estudiaba, un verdadero fastidio. Por lo tanto fueron amplia y rápidamente utilizados. Si embargo en los gloriosos años 80's su uso fue decayendo al aparecer los lenguajes de tercera generación (hi-level), todo esto en pos de mejorar la productividad con una programación más eficiente. Casi todos los juegos y programas utilitarios hechos por Atari y demás empresas del rubro fueron escritos en assembly, ya que en Basic era imposible conseguir los mismos resultados.
Ordenando un poco la cosa:
Era |
Lenguaje |
Modo de programación |
Primera generación |
Binario puro (lenguaje de máquina) |
01000101 |
Segunda generación |
Assambly |
LDA, STA, etc. |
Tercera generación |
Basic |
FOR, NEXT, INPUT, etc. |
Actualmente, el lenguaje assembly se usa principalmente para la manipulación directa del hardware, alta velocidad de proceso, accesando a las instrucciones especializadas del procesador o a direcciones críticas para la operación del sistema. Además un programa ensamblado, no requiere interprete, por lo que ocupa menos cantidad de memoria. Como ejemplo podemos citar los famosos drivers de dispositivos, sistemas especializados como máquinas industriales, computadores de automóviles, teléfonos celulares, etc. Todo lo que tenga una CPU necesita su programa.
3-Ensamblador
Aquí entra en acción el programa que llamamos assembler (ensamblador), el cual es utilizado para traducir el assembly a lenguaje de máquina, que es el único que una CPU puede entender. Esto es válido para todos los lenguajes de programación. El ensamblador realiza una traducción "uno a uno" de cada mnemónico y datos que nosotros escribimos en nuestros programas a lenguaje de máquina.
Por ejemplo:
Assembly: |
Código |
LDA #0 STA 710 |
4000 A9 00 4000 99 C6 02 |
Un compilador, análogamente a un ensamblador, es utilizado para "traducir" lenguajes de alto nivel a lenguaje de máquina o a un código intérprete que ejecute las instrucciones directamente. Algunos ensambladores sofisticados incluyen opciones para facilitar el desarrollo del programa, controlan el proceso de ensamble y ayudan con códigos de error, como lo hace el editplus.
Generalmente, las instrucciones del lenguaje assembly son bastante simples, semejante a los lenguajes de programación de alto nivel. Cada instrucción consiste tipicamente en un mnemónico (pj: LDA) o bien el mnemónico más uno o un par de operandos (pj: LDA #0 ó LDA$FFFF). Los operandos pueden ser valores inmediatos o los valores de los datos almacenados en la memoria. De todas formas, la forma de escribir las instrucciones (sintaxis) es determinada por el fabricante de la CPU que estamos programando.
Es por eso que lo más importante al comenzar a programar en assembly es saber las reglas y que cosa hace cada mnemónico, lo cual pasaremos a ver en el siguiente capítulo.
¿Alguna duda? Puedes consultar en el foro.