Manual de Referencia Ensamblador GNUSim8085 Author: Sridhar Ratna 1. Introducción Un programa básico en assembler GNUSIM8085 consiste de 4 partes: a. Operaciones de máquina (mnemónicos) b. Pseudo operaciones (Como preprocesador en C) c. Etiquetas d. Comentarios Además, puede contener constantes. A menos que se especifique lo contrario, una constante, la cual es siempre numérica, estará expresada en forma decimal. Si se adiciona el caracter 'h' se asumirá en forma hxadecimal. Si una constante hexadecimal comienza con un caracter alfabético, no olvide incluir el '0' al inicio, esto ayudará al assembler a diferenciar entre una etiqueta y una constante. 2. Etiquetas Las etiquetas sirven para identificar a cualquier instruction/dato particular en un programa, toma la dirección de esa instrucción o dato como su valor. Pero tiene diverso significado cuando está dada la directiva EQU. Entonces toma el operando de EQU como su valor. Las etiquetas se deben poner siempre en la primera columna y se deben seguir por una instrucción (no una línea vacía). Las etiquetas se deben seguir por ': ' (dos puntos), para distinguirlos de la instrucción. 3. Pseudo operaciones (Pseudo Ops) Solo hay 3 directivas actualmente disponible en el lenguaje ensamblador GNUSIM8085 a. DB ­ define byte ( 8 bits ) b. DS ­ define size (no. of bytes) c. EQU ­ like minimalistic #define in C DB es usado para definir el espacio para un arreglo de valores especificados separados por coma. Y la etiqueta (Si es dada al inicio de DB) es asignada la dirección del primer dato item. Por ejemplo: var1: db 34, 56h, 87 "por ejemplo, si se asume que ha incrementado actualmente su registro PC a 4200h, var1=4200h, var1+1=4201h, var1+2=4202h. Observe que "56h" está definido para ser una constante hexadecimal. En este ejemplo se asignan 3 octetos." DS se utiliza definir el número especificado de bytes para ser asignado e inicializados a cero. Para tener acceso a cada byte puede utilizar el operador ' + ' o ' -­ ' junto con la etiqueta. Por ejemplo, var2: ds 8 "ahora cuando utiliza var2 en el programa, se refiere al primero de estos ocho bytes. Para referirse a otros bytes, como por ejemplo el 3er byte, tiene que utilizar var2+3 en lugar de simplemente var2. Este concepto también ¡se aplica a DB! ' ­ ' se utiliza para variables previas, es decir, refiere variables anteriores en el programa!" EQU se comporta de manera similar a #define en C. Pero es muy simple. EQU puede ser utilizado solamente para dar nombres a constantes numéricas. No se permite jerarquizar EQU. EQU se puede usar solamente en los operandos para las pseudo operaciones y nemónicos. Por ejemplo, jmp start ;saltar al código sin pasar por la asignación de datos ;data starts here port1: equ 9h data: equ 7fh var1: db data, 0 ;como ­ 7fh, 0 ;code starts here start: lxi h, var1 ;carga la dirección de var1 en el par de direccionamiento HL mov a, m ;carga el contenido de var1 en el registro A (i.e. 7fh in A) out port1 ;envía el contenido del reg A al puerto 9h in port1 ;lee el puerto 9h y lo almanea en el reg A sta var1+1 ;alamacena el contenido del reg A en la locación de memoria var+1 (la siguiente de 7fh!) hlt ;termina la ejecución "como podemos ver" EQU define las etiquetas para que puedan ser utilizadas como nombres descriptivos de constantes. Debería utilizalas con frecuencia en su programa para evitar números mágicos." 4. Nemónicos Después de todo, estoy utilizando mi tiempo libre para hacer todas estas cosas. Escribir un manual GRANDE de instrucciones 8085 parece redundante y una pérdida de tiempo. Se puede referir a muchos libros de texto disponibles para programar en el 8085. :­) 5. Comentarios en la programación Los comentarios comienzan con un punto y coma (';'). como se puede ver en el ejemplo anterior, los comentarios se pueden dar en cualquier parte de programa. Cualquier cosa después de ';' es sin sentido para el ensamblador, excepto a una secuencia importante de caracteres ...SI LEALO.. Características Extra 1. Puntos de quiebre automáticos Mientras se familiariza con la aplicación, puede utilizar "puntos de quiebre" para depurar errores de su programa. Pero para ciertos programas, se tiene que exhibir algo al usuario antes de continuar. Un ejemplo perfecto para esto es el problema de las N­Queens. Encontrar todas las soluciones para (digamos) 8 reinas consume mucho tiempo (implica un total de 92 soluciones). En mi sistema, tomó casi 1 minuto para encontrar todas las soluciones. Pero en ese proceso solo puedo ver la última solución, puesto que las soluciones se sobreescriben sobre las subsecuentes. Ahora puedo dar un "punto de quiebre" en el lugar donde consigo una solución. Cuando se alcanza el "punto de quiebre", puedo parar y ver la solución (examinando las variables) y entonces continuar para la solución siguiente. Pero para este programa, cada vez que lo carga, se tiene que fijar los "punto de quiebre". Esto puede ser automatizado. Para fijar los "punto de quiebre" (cuando se carga el programa) en la línea número ' n ', tiene que poner un comentario especial en la línea ' n­1 '. Y este comentario debe comenzar en la primera columna. La secuencia es: ;@ Si encuentra ";@", el editor fijará el "punto de quiebre" en la línea siguiente. Por razones obvias, no puede fijar un "punto de quiebre" en la primera línea en su programa. Por ejemplo, mire el programa N­ Queens en la sección de documentación del GNUSIM8085. (nqueens.asm). Notas Finales No se olvide de incluir la instrucción "hlt" en alguna parte del programa para terminarlo, si no estará ¡engañado! Las direcciones constantes se deben utilizar con precaución. "lda 2200h" será "3a 00 22" en lenguaje de máquina. Tal que la dirección actual es otra vez 2200h! Tips Para Aumentar/Disminuir el tamaño de la fuente en el editor, sostenga presionada la tecla ctrl y gire la rueda del ratón hacia adentro o afuera. Eso es todo por ahora amigos! http://gnusim8085.sourceforge.net Traducción al español del tutorial: Charles Escobar