Table of Contents
Para desarrollar para el PCP se ha creado el ensamblador ithlasm, un ensamblador básico escrito en python, capaz de crear archivos binarios que se pueden ejecutar directamente en la plataforma.
El ithlasm tiene carácteristicas básicas de preprocesado, como includes, etiquetas, comentarios, etc.
Sintaxis
Ithlasm ignora la capitalización de todos los símbolos, de hecho trabaja en mayúsculas internamente, asi que las instrucciones se pueden escribir en mayúsculas o minúsculas, por el contrario, las directivas del preprocesador se deben de escribir en mayúsculas ya que son analizadas antes de la conversión. Asi mismo ignora los espacios en blanco, tabuladores, etc, salvo el espacio que separa la instrucción y sus parámetros.
La sintaxis básica de una instrucción es:
instrucción <param1>, <param2>… etc
Siendo los parámetros, registros, valores inmediatos, o etiquetas que se substituirán por el inmediato de su dirección en el archivo.
En esta primera versión, los valores inmediatos y los valores de los defines (DEF, DB, DW) se pueden expresar en decimal, hexadecimal (0x..) o binario (0b..)
Las etiquetas se definen usando el símbolo “:” al final de su nombre, y deben de estar en una linea sin más instrucciones. Apuntarán a la posición de memoria de la siguiente línea con datos o código.
Los comentarios empiezan por el símbolo “;”. A partir de ese símbolo el resto de la linea es ignorado cara al preprocesado y ensamblado.
La síntaxis básica de una instrucción sería
Instruccion Operador1, operador2…
Preprocesador
El preprocesador acepta los comentatios y etiquetas como hemos visto, y las siguientes directivas:
- INCLUDE “archivo” : Incluye el contenido del archivo referenciado en la posición de la directiva
- DEF <símbolo> <valor>: Define un símbolo con un valor constante asociado. Este símbolo se puede usar en el código como valor inmediato, siendo este substituido antes del ensamblado.
- DB valor1, valor2… : Inserta en el código los bytes de datos especificados a continuación, separados por comas en caso de ser más de uno. Deben expresarse en decimal
- DW valor1, valor2… : Inserta en el código las palabras de datos especificadas a continuación, separadas por comas en caso de ser más de una. Deben expresarse en decimal. Las palabras se alinean para ocupar 4 bytes.
- DS “Cadena de texto” : Inserta en el código los bytes de la cadena de caracteres especificada entre comillas, añadiendo un carácter 0x00 al final de la misma.
- STACK valor: Define un espacio reservado para la pila del programa de “valor” palabras. Internamente el preprocesador substituye esto por las instrucciones necesarias para reservar esa memoria, e iniciar el puntero de pila en este punto. Es recomendable usar esta directiva al inicio del programa.
Ejemplo
Un ejemplo de código para el ithlasm:
; prueba de texto DEF null 0 ld r1, 1 ld r2, texto ; r2 = text start addr ld r9, 3 ; putch ld r3, imprime ld r4, fin_impresion ld r5, null imprime: lb r10, r2 ; get char beq r10, r5, r4 ; if c = \0x00, end loop call 0 add r1, r2, r2 ; r2 = r2 + 1 jmp r3 fin_impresion: jmp r4 ; endless loop texto: DS "Hola viejunos!"