Ensamblador Zero |
Este archivo es la especificación del código ensamblador para Zero. Una guía del contenido puede encontrarse a continuación.
OBJ <nombre_obj> <nombre_obj_existente>
ENO
ATR <+|-> <nombre>
[<nombre_objeto_existente> | <literal_numérico> |
<literal_cadena>]
MTH <+|-> <nombre_método>
[<parametro_formal1>, [<parametro_formal2>, ...]]
RET [<referencia>]
JMP <número_de_opcodes>
OBJ foo
MTH + self
JMP 3
STR "Este mensaje nunca sale por pantalla."
MSG System.console write __acc
RET __this
ENM
ENO
JOT <número_de_opcodes>
OBJ foo
MTH + foe
DEF cadTodoVaBien
STR "Si puede leer esto, es que todo va bien"
ASG cadTodoVaBien
IOF Float
JOT 2
MSG System.console write cadTodoVaBien
RET __this
ENM
ENO
JOF <número_de_opcodes>
OBJ foo
MTH + foe
DEF cadTodoVaBien
STR "Si puede leer esto, es que todo va bien"
ASG cadTodoVaBien
IOF String
JOF 2
MSG System.console write cadTodoVaBien
RET __this
ENM
ENO
RET <referencia>
FLT <literal_flotante>
OBJ foo
MTH + foe
DEF PI
FLT 3.1415927
ASG PI
MSG System.console write PI
RET __this
ENM
ENO
STR <nombre_variable> "<literal>"
OBJ foo
MTH + foe
DEF cadHolaMundo
STR "¡Hola, Mundo!"
ASG cadHolaMundo
MSG System.console write cadHolaMundo
RET __this
ENM
ENO
TRW <referencia>
OBJ foo
MTH + foe
STR "Introduzca un número: "
MSG System.console read
MSG __acc toFloat
MSG System.console write __acc
RET
STR "Era necesario introducir un número."
MSG System.console write __acc
ENM
ENO
IOF <referencia> [<nombre_registro>]
OBJ foo
MTH + foe
DEF cadTodoVaBien
STR "Si puede leer esto, es que todo va bien"
ASG cadTodoVaBien
IOF String
JOF 2
MSG System.console write cadTodoVaBien
RET __this
ENM
ENO
DEF <nombre_variable_local>
OBJ foo
MTH + self
DEF aux
SET __this ; AC = __this
ASG aux ; aux = AC
RET aux
ENM
ENO
ASG [<nombre_registro>] <nombre_variable_local> |
<nombre_atributo> | <nombre_registro>
OBJ foo
MTH + self
DEF aux
SET __this ; AC = __this
ASG aux ; aux
= AC
RET aux
ENM
ENO
SET [<nombre_registro>] <referencia>
OBJ foo
MTH + self
DEF aux
SET __this ; AC = __this
ASG aux
; aux = AC
RET aux
ENM
ENO
MSG <referencia> <desplazamiento>
<nombre_método> [<referencia1>
[<referencia2>...]]
OBJ foo
MTH + createChar
DEF litA
STR "A"
ASG litA
DEF aux
MSG String new ; __acc = new String
ASG
aux ;
aux = AC
MSG aux assign litA
MSG System.console write aux
RET aux
STR "No hay suficiente memoria para crear objetos."
MSG System.console write __acc
ENM
ENO
MSG foo createChar
A continuación, se muestran una serie de atributos que se crean por defecto dentro de cada objeto, y variables locales que se crean dentro de cada método.
El acumulador es una referencia local más, que existe en todos y cada uno de los métodos de un objeto. Su nombre es el siguiente:
__acc
Es empleado por la mayoría de las instrucciones ensamblador de Zero. Puede ser accedido normalmente, pero lo más probable es que emplear esta variable local directamente no sirva de mucho.
Además del acumulador, exsiten otros registros, que están disponibles en todos y cada uno de los métodos de un objeto cualquiera. Sus nombres son los siguientes:
__gp1
__gp2
__gp3
__gp4
__rr es una referencia local más, que existe en todos y cada uno de los métodos de un objeto. Su nombre es el siguiente:
__rr
Guarda la referencia que será devuelta al final del método, con RET.
__this es una referencia local más, que existe en todos y cada uno de los métodos de un objeto. Su nombre es el siguiente:
__this
Simboliza el objeto que está ejecutando el método.
__exc es una referencia local más, que existe en todos y cada uno de los métodos de un objeto. Su nombre es el siguiente:
__exc
Simboliza el objeto que se lanzará como excepción.
parent es un atributo más dentro de un
objeto, que existe en todos y cada uno de los objetos en Zero. Se
inicializa por defecto a Object.
Su nombre es el siguiente:
parent
Apunta al siguiente objeto al que el sistema debe ir cuando se está intentando localizar un método (al estarse ejecutando una llamada MSG). Ésta búsqueda de objeto en objeto se conoce como delegación.
copy es un método más dentro de un objeto, que existe en todos y cada uno de los objetos en Zero, ya que lo heredan de Object. Su nombre es el siguiente:
copy()
Acepta un argumento que es el nombre del objeto.
finalize es un método más dentro de un objeto, que existe en todos y cada uno de los objetos en Zero, ya que lo heredan de Object. Su nombre es el siguiente:
finalize
Se ejecuta cuando un objeto es eliminado.
J. Baltasar García Perez-Schofield jbgarcia@uvigo.es |