Ensamblador Ithasm

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 0×00 al final de la misma.

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!"

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>