Macroensamblador Zero

Zero (el avión)

Manual de programación en Macroensamblador Zero

El presente documento explica cómo utilizar el macroensamblador para crear programas para la máquina virtual Zero. Hay otra información que también es posible utilizar como referencia, como por ejemplo, la contenida en el manual de programación en ensamblador Zero, y, sobre todo, la documentación sobre la librería estándar.

Introducción

En esta sección se describirá la compilación de un objeto sencillo, como el que se ve a continuación:


object HolaMundo : ConsoleApplication
  method + doIt()
    parent.prepare()
    System.console.write("¡Hola, Mundo!")
    System.console.lf()
  return
  endMethod
endObject

Este objeto recibe y envía información por consola, por lo que debe derivar del objeto "ConsoleApplication", que es la que prepara este tipo de E/S. El objeto HolaMundo, por su parte, sólo manda un mensaje a la consola para visualizar el mensaje "¡Hola, Mundo!".

Este código fuente puede escribirse en cualquier editor de texto, pero debe llamarse de la misma forma que el objeto principal, es decir, "HolaMundo.zm".

La compilación del objeto se realiza de la siguiente forma:

$ zm HolaMundo.zm

La ejecución de este objeto se realiza como sigue:


$ zvm HolaMundo
¡Hola, Mundo!

Descripción detallada de las macros

Las siguientes macros pueden ser empleadas en cualquier programa en Zero.

Otros conceptos

Los siguientes conceptos son empleados en la programación con este macroensamblador Zero:

Expresiones

Existen dos tipos de expresiones: las que asignan la referencia devuelta por un mensaje a un método a una referencia local declarada previamente (o a un atributo del objeto), y las que no realizan ésto último, siendo, símplemente, mensajes a objetos.
Nótese que el tipo de expresiones que pueden pasarse como parámetro a un método son del segundo tipo.
Nótese que las referencias son siempre, el nombre del objeto, seguido de un número variable de nombres de atributos. Todos ellos están separados por puntos.
Por último, las asignaciones de los atributos no son expresiones, sino que son o bien literales o bien referencias.

[<nombre_referencia_local>|<nombre_atributo> = ]
  <referencia>.<método>(<literal1>|<expresión1> [, <literal2>|<expresión2> [, ...] ])

Un ejemplo de expresiones:

! Éste objeto representa a una persona
object Persona
  attribute + nombre = "Juan nadie"
  attribute + edad = 40
  method + putNombre(nom)
    nombre = nom
  return
  endMethod
endObject

Literales

Los literales se indican, bien con un número con la notación habitual, bien como una cadena encerrada entre comillas dobles ("). Un literal sólo puede ocupar una línea, si bien ésta es ilimitada.
Sólo hay tres "tipos" de literales, los números reales, que son objetos derivados de Float, los números enteros, objetos derivados de Int, y las cadenas, que derivan de String. En estos prototipos se definen todas las operaciones que pueden realizarse sobre estos dos tipos de items de información

NOTA: Una secuencia de caracteres entre comillas será tomada como de tipo cadena. Un número que contenga parte decimal será identificado como flotante, meintras un número sin parte decimal será tomado como entero.

Un ejemplo de literales:

! Éste objeto representa a una persona
object Persona
  attribute + nombre = "Juan nadie"
  attribute + edad = 40
  attribute + sueldo = 1300.5
endObject

Comentarios

Los comentarios se indican con una admiración '!', y sólo pueden ser puestos al comienzo de una línea. En ningún caso podrán afectar sólo a una parte de una línea. Es decir, "object Punto ! Punto es un objeto" no será aceptado.

! Éste objeto representa a un punto
object Punto
  attribute + x = 0
  attribute + y = 0
endObject

Etiquetas

Las etiquetas se representan anteponiendo el símbolo ':'. Sirven para saltar a ellas (cambiando el flujo de ejecución) mediante jumpTo, jumpOnTrueTo y jumpOnFalseTo.

object Punto
  attribute + x = 0
  attribute + y = 0
  method + ponValorX(a)
    isInstanceOf Float, a
    jumpOnTrueTo fin
      throw ETypeMismatch
    :fin
    x = a
  return
      System.console.write("Error de asignación")
  endMethod
endObject

 

 

 

 


J. Baltasar García Perez-Schofield  jbgarcia@uvigo.es   Zero (el avión)