Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicio de Implementación
Compiladores
Entrega Final
Grupo 98
Santiago González Tortosa sgt_fi@yahoo.es
Germán Ramos García g990189@zipi.fi.upm.es
Alberto Fernández Recio afr@iespana.es
Grupo 98 C# Compiler
ÍNDICE
1 INTRODUCCIÓN...............................................................................................................................4
2 ANALIZADOR LÉXICO..................................................................................................................6
3 TABLA DE SÍMBOLOS.................................................................................................................13
3.1 DISEÑO......................................................................................................................................13
3.2 IMPLEMENTACIÓN.....................................................................................................................14
3.3 EJEMPLO....................................................................................................................................16
4 ANALIZADOR SINTÁCTICO......................................................................................................18
4.1 GRAMÁTICA..............................................................................................................................19
4.2 IMPLEMENTACIÓN.....................................................................................................................22
5 ANALIZADOR SEMÁNTICO.......................................................................................................23
8 GENERADOR DE ERRORES.......................................................................................................46
9 PROGRAMA PRINCIPAL.............................................................................................................49
10 PRUEBAS.........................................................................................................................................50
Compiladores 2
Grupo 98 C# Compiler
11 ANEXO...........................................................................................................................................275
12 Bibliografía......................................................................................................................................276
Compiladores 3
Grupo 98 C# Compiler
1 Introducción
Una compilación es una simple traducción que convierte un programa escrito en un
lenguaje, llamado fuente, a un programa equivalente en otro lenguaje, llamado objeto.
Las técnicas para compilar son independientes del lenguaje fuente y objeto, es decir,
siempre es la misma.
Analizador Léxico (AL): Lee todos los caracteres del fichero fuente y crea los
tokens oportunos, para pasárselos al analizador sintáctico.
Junto con estas fases, debemos incluir el tratamiento de errores (gestor de errores) y la
tabla de símbolos.
Gestor de errores (GE): Captura y envía por pantalla todos los errores detectados
en cada una de las fases anteriores.
Compiladores 4
Grupo 98 C# Compiler
TS
GE
Debemos resaltar que, después de dos anteriores entregas en el curso, en los que hemos
estado utilizando distintas alternativas de programación, hemos decidido utilizar para
esta última entrega, el programa FLEX para el analizador léxico y ninguna herramienta
para el analizador sintáctico y semántico.
Compiladores 5
Grupo 98 C# Compiler
2 Analizador Léxico
En primer lugar, y antes de explicar el diseño de un analizador léxico, comentar una
serie de conceptos:
Una vez claros estos conceptos, podemos definir un analizador léxico como el
analizador que pasa de un fichero lleno de caracteres a un conjunto de tokens que ira
pasando al analizador sintáctico (uno a uno). Las funciones del analizador léxico, pues,
son:
Utilizando, pues, una Gramática Regular (de tipo 3), y transformándola en un autómata
finito determinista, podemos detectar palabras del lenguaje del fichero fuente.
El analizador léxico se apoya para poder hacer la concordancia de lexemas con tokens
en una gramática tipo 3. Esta gramática es la siguiente, siendo S el axioma inicial:
S +A | -B | *C | /D | %E | &F | ( | ) | { | } | [ | ] | “G | ; | , | aH | . | delS
| !L | >M | <N | =O | dQ | 0R | |U | Console.V
A=|
B=|
C=|
D = | *J | /I |
E=|
F&
G ocG | “
H lP | dP | @P |
I oc1I | nlS
J oc2J | *K
K oc3J | *K | /S
Compiladores 6
Grupo 98 C# Compiler
L=|
M=|
N=|
O=|
P aH | dH |
Q dQ |
R xT | XT | dQ |
T dxT |
U|
V wW | rX
W rite
X ead
Regla S: a y del
o a: letras, @ o _ (primer carácter de un identificador).
o del: delimitadores (espacios, tabuladores...).
Regla G: oc
o oc: otro carácter salvo el de fin de fichero,nueva línea y comillas (“) (los string
ocupan una sóla línea).
Regla H: l,d
o l: letras mayúsculas y minúsculas.
o d: dígitos.
Regla I: oc1,nl
o oc1: otro carácter salvo nueva línea (comentarios // de una sóla línea).
o nl: carácter de nueva línea.
Regla J: oc2
o oc2: Otro carácter salvo el * y fin de fichero.
Regla K: oc3
o oc3: Otro carácter salvo * , / y fin de fichero
Regla P: a
o a: Mismo valor de la regla S.
Regla R: el símbolo X es no terminal ya que podemos encontrarnos con 0x o 0X.
Regla T: dx
o dx: Dígitos hexadecimales.
Se puede observar que es una gramática ambigua y sabemos que los analizadores
léxicos no pueden trabajar con gramáticas de estas características. Al construir el
autómata finito y el analizador léxico se utilizarán diversas técnicas para evitar
cualquier tipo de ambigüedad en el reconocimiento de los tokens.
Compiladores 7
Grupo 98 C# Compiler
FL = Fin de linea
del = Delimitador: Espacio, Tabulador, FL
oc = otro carácter
d = dígito
L = letra
dH = dígito hexadecimal
Acciones semánticas
En todas las transiciones se lee el siguiente carácter salvo en las que no necesitamos
conocer dicho carácter ya que podemos identificar el token sin ninguna duda (ejemplo
los símbolos , . ; etc...). En las transiciones no previstas generamos un error.
Compiladores 8
Grupo 98 C# Compiler
Compiladores 9
Grupo 98 C# Compiler
2.2.2 Flex
{definiciones}
%%
{ordenes}
%%
{subrutinas del usuario}
Por otro lado, incluimos los tokens “?” y “:” en la implementación del analizador léxico,
por si daba tiempo a realizar el Operador Condicional en el compilador. Como no dio
tiempo, no lo incluimos en el diseño del analizador léxico.
Lista de Tokens
Compiladores 10
Grupo 98 C# Compiler
Puntero Elemento
1 +
2 -
3 *
4 /
5 %
Puntero Elemento
1 &&
2 ||
3 !
4 >
5 <
6 ==
7 <=
8 >=
9 !=
Puntero Elemento
1 +=
2 -=
3 *=
4 /=
5 %=
Compiladores 11
Grupo 98 C# Compiler
6 ++
7 --
Puntero Elemento
1 IF
2 ELSE
3 RETURN
4 TRUE
5 FALSE
6 VOID
7 STRING
8 SHORT
9 BOOL
10 CLASS
11 REF
12 NEW
13 PUBLIC
14 PRIVATE
15 STATIC
16 SET
17 GET
18 VALUE
19 PARAMS
Compiladores 12
Grupo 98 C# Compiler
3 Tabla de Símbolos
3.1 Diseño
La estructura de los parámetros consiste en una lista enlazada de parámetros, los cuales
contienen campos: tipo del parámetro y el paso del parámetro, es decir, por valor (1) o
por referencia (2).
Compiladores 13
Grupo 98 C# Compiler
3.2 Implementación
TS *Crear_Tabla(TS* padre);
Crea una tabla de símbolos, cuyo padre asociado es el argumento de la función.
void Borrar_Tabla(TS *tabla);
Borra la tabla de símbolos indicado en el argumento
int Esta_Lexema(TS *tabla,char* nombre);
Devuelve 0 si el elemento con el nombre del argumento se encuentra en la tabla del
argumento de la funcion. En caso contrario, devuelve -1.
int Insertar_Lexema(TS *tabla,char *nombre, int tipo);
Inserta un elemento con el nombre y el tipo indicadas, en la tabla de símbolos
indicada en el argumento de la funcion1.
int Insertar_Categoria_Lexema(TS *tabla,char *nombre, int
publico, int privado, int estatico);
Inserta las categorías de un elemento determinado en una tabla determinada. Dichas
categorías son: publico, privado y estatico. Por defecto siempre es privado.
int Borrar_Lexema(TS *tabla,char *nombre);
Borramos un elemento de una tabla de símbolos.
int Dibujar_Tabla(TS *tabla,char *fichero);
Imprime por fichero la tabla de símbolos indicada como argumento.
int Insertar_Valor_Lexema(TS *tabla,char *nombre);
Activa el campo valor (a 1) del elemento perteneciente a una tabla.
int Insertar_Eti(TS *tabla,char *nombre);
Inserta el numero de etiqueta del método o clase.
1
En la mayoría de las funciones de este tipo, devolverán 0 si todo ha salido bien y -1 en caso contrario.
Compiladores 14
Grupo 98 C# Compiler
Compiladores 15
Grupo 98 C# Compiler
3.3 Ejemplo
#include “tsimbolos.h"
int main() {
TS *t,*tfuncion;
t = Crear_Tabla(NULL);
Insertar_Lexema(t,"numero1",SHORT);
Insertar_Valor_Lexema(t,"numero1");
Insertar_Lexema(t,"identificador1",SHORT);
Cambiar_Tipo(t,"identificador1",STRING);
Insertar_Valor_Lexema(t,"identificador1");
Insertar_Lexema(t,"funcion1",FUNCION);
Insertar_Valor_Lexema(t,"funcion1");
Insertar_Tipo_Valor_Devuelto(t,"funcion1",SHORT);
Insertar_Parametro(t,"funcion1",BOOL,NORMAL);
Insertar_Parametro(t,"funcion1",SHORT,REF);
Insertar_Parametro(t,"funcion1",BOOL,REF);
Insertar_Lexema(t,"identificador2",STRING);
Insertar_Valor_Lexema(t,"identificador2","apellido");
tfuncion = Crear_Subtabla(t,"funcion1");
Insertar_Lexema(tfuncion,"numero2",SHORT);
Insertar_Valor_Lexema(tfuncion,"numero2");
Insertar_Lexema(tfuncion,"identificador3",STRING);
Insertar_Valor_Lexema(tfuncion,"identificador3");
Dibujar_Tabla(t,"salida.txt");
return 0;
}
Fichero “salida.txt”
LEXEMA: numero1
Tipo: SHORT
Valor: 1
------------------------------------------------
LEXEMA: identificador1
Tipo: STRING
Valor: 1
Compiladores 16
Grupo 98 C# Compiler
------------------------------------------------
LEXEMA: funcion1
Tipo: FUNCION
Valor: 1
Tipo valor devuelto: SHORT
Numero de parametros: 3
Parametros:
Tipo parametro: BOOL
Paso de parametro: NORMAL
Tipo parametro: SHORT
Paso de parametro: POR REFERENCIA
Tipo parametro: BOOL
Paso de parametro: POR REFERENCIA
Este Lexema contiene una SUBTABLA
------------------------------------------------
LEXEMA: identificador2
Tipo: STRING
Valor: 1
------------------------------------------------
Fichero “funcion1.txt”
LEXEMA: numero2
Tipo: SHORT
Valor: 1
------------------------------------------------
LEXEMA: identificador3
Tipo: STRING
Valor: 1
------------------------------------------------
Compiladores 17
Grupo 98 C# Compiler
4 Analizador Sintáctico
Se define una gramática de tipo LL(1) como la gramática que cumple las siguientes
propiedades:
FIRST(X)
Si es cualquier cadena de símbolos gramaticales, se considera FIRST() como el
conjunto de terminales que encabezan las cadenas derivadas de . Si =*=> , entonces
también está en FIRST().
Para calcular FIRST(X) para algún símbolo X de la gramática, se aplican las siguientes
reglas hasta que no se pueda añadir nada nuevo al conjunto FIRST:
Compiladores 18
Grupo 98 C# Compiler
FOLLOW(A)
4.1 Gramática
Primeramente hicimos una gramática sencilla que cumpliera las normas para LL(1). A
medida que incluíamos mas reglas, nos iban apareciendo nuevas dependencias.
Finalmente, utilizando una serie de técnicas pudimos eliminar dichas dependencias y
crear una gramática de tipo LL(1).
Una vez que tuvimos la gramática correcta, la modificamos para que se pareciera al
máximo a la gramática utilizada para la implementación. Sustituimos los símbolos
terminales por definiciones, que posteriormente comentamos, para que la gramática se
parezca lo máximo posible a la implementación.
La gramática es la siguiente:
Compiladores 19
Grupo 98 C# Compiler
Var → OP ID [SentMet]
Var → CA Expresión CC
Compiladores 20
Grupo 98 C# Compiler
TiposMet2 → DC TiposMet
TiposMet2 → λ
Compiladores 21
Grupo 98 C# Compiler
Decl21 → DC Decl2
Decl21 → λ
Cada palabra en negrita es un Símbolo No Terminal, y por tanto genera rama. Cada
rectangulo pertenece a un Símbolo No Terminal.
PR – Palabra Reservada
OA – Operador Aritmetico
OAS – “=” (Operador ASignacion)
PAA – “(“ (PAréntesis Abierto)
PAC – “)” (PAréntesis Cerrado)
LLA – “{“ (LLave Abierta)
LLC – “}”(LLave Cerrada)
OL – Operador Logico
CE – Entero
AO – Asignacion con Operador
CA – “[“ (Corchete Abierto)
CC – “]” (Corchete Cerrado)
OP – “.” (Operador Punto)
OC – character (Operador Caracter)
ST – STring (conjunto de caracteres)
ID – IDentificador
DPC – “;” (Delimitador Punto y Coma)
DC – “,” (Deliminator Coma)
EO – Fin de Fichero (EOF)
CCR = Console.Read
CCW = Console.Write
4.2 Implementación
Compiladores 22
Grupo 98 C# Compiler
5 Analizador Semántico
Este apartado lo vamos a dividir en dos subapartados: Por un lado vamos a comentar
como se ha realizado la comprobación de tipos y por otro como se han realizado el resto
de reglas semánticas.
o Declaración de un Id:
Compiladores 23
Grupo 98 C# Compiler
Una vez que se sabe la clase, debemos mirar el tipo del atributo
de dicha clase. Lo que devolvemos en este caso seria el tipo del
atributo. En caso de no tener declarada la clase del objeto, o de no
existir el atributo, generaríamos un error.
Compiladores 24
Grupo 98 C# Compiler
Compiladores 25
Grupo 98 C# Compiler
o Sentencias del interior del Método: Deben ser correctas. Deben estar sus
declaraciones en una subtabla del metodo, junto a los parámetros.
Se tiene en cuenta que los números decimales de tipo Short no excedan el limite
de overflow.
Compiladores 26
Grupo 98 C# Compiler
Comprobamos que todos los métodos y atributos tengan una sentencia de tipo
retorno (return). Solo se permitirá que no exista esta sentencia cuando el tipo de
retorno sea VOID.
Comprobamos que los atributos y las variables estén inicializadas, ya sean desde
la propia clase o método, a objetos instanciados.
Compiladores 27
Grupo 98 C# Compiler
La estructura de los tercetos. Esta estructura está preparada para almacenar los
tercetos en memoria según se van generando aunque como hemos explicado
antes, los tercetos se escriben directamente en un fichero y no se almacenan en
memoria. Los tercetos se componen de tres campos:
o La operación correspondiente al terceto
o El operador1
o El operador 2
Los operadores se componen a su ven de dos campos: El tipo de operador y el
valor. El tipo puede ser numérico, cadena, o una referencia a otro terceto. El
valor es una unión capaz de almacenar cualquiera de estos tres valores.
union val_t{
int numero;
char *cadena;
terceto *t;
};
struct op_t{
int tipo;
val valor;
};
Compiladores 28
Grupo 98 C# Compiler
struct terceto_t{
int operacion;
op op1;
op op2;
terceto *siguiente;
terceto *anterior;
};
struct cola_terceto_t{
terceto *primero;
terceto *ultimo;
};
void Fin_Tercetos();
Informa de la finalizacion de generción de tercetos y cierra el fichero.
Los tipos de tercetos que se pueden generar se encuentran definidos en “types.h” y son
los siguientes:
#define TR_INICIO_PROGRAMA 0
Terceto de inicio del programa. No recibe ningún operando.
#define TR_FIN_PROGRAMA 1
Terceto de fin del programa. No recibe ningún operando.
#define TR_METODO_MAIN 2
Terceto correspondiente con el inicio del método principal “Main”
#define TR_METODO 3
Terceto correspondiente con el inicio de un método. Recibe un operando
numérico que indica el número correspondiente a la etiqueta del método
#define TR_METODO_RET 4
Terceto correspondiente con el fin de un método. No recibe ningún operando.
#define TR_ASIGNACION 5
Compiladores 29
Grupo 98 C# Compiler
#define TR_REGISTRO_CLASE 6
Crea el registro de activación de una clase. Recibe un operando numérico que
indica el tamaño del registro
#define TR_CLASE 7
Terceto correspondiente con el inicio de una clase. Recibe un operando
numérico que indica el número correspondiente a la etiqueta de la clase
#define TR_SALTO 8
Terceto que indica la posición del código inicial del programa. No recibe ningún
operando.
#define TR_REGISTRO_METODO 9
Crea el registro de activación de un método. Recibe un operando numérico que
indica el tamaño del registro
#define TR_VALOR_INMEDIATO 10
Terceto de un valor short inmediato. Recibe un operando numérico con el valor.
#define TR_VALOR_VARIABLE 11
Terceto de acceso a una variable. Recibe dos operandos numéricos. El primero
indica si la variable es del método o de la clase, y el segundo indica el
desplazamiento
#define TR_WRITE_STRING 12
Terceto para escribir cadenas. Recibe un operando numérico que le facilita 2
etiquetas auxiliares y un operando cadena con el valor del “string” a escribir.
#define TR_WRITE_SHORT 13
Terceto para escribir enteros. Recibe un operando numérico con el valor a
escribir.
#define TR_SALTO_METODO 14
Terceto para saltar a un método. Recibe un operando con la etiqueta del método
al que saltar.
#define TR_INICIO_WRITE_STRING 15
Terceto que indica el inicio de escritura en consola. No recibe ningún operando.
#define TR_FIN_WRITE_STRING 16
Terceto que indica el final de escritura en consola. No recibe ningún operando.
#define TR_SUMA 17
Compiladores 30
Grupo 98 C# Compiler
#define TR_GUARDAR_ESTADO 18
Terceto que indica que se debe guardar el estado del computador. No recibe
ningún operando.
#define TR_RESTAURAR_ESTADO 19
Terceto que indica que se debe restaurar el estado del computador. No recibe
ningún operando.
#define TR_VALOR_DEVUELTO 20
Terceto que indica que se debe usar el valor devuelto por el método que termina.
No recibe ningún operando.
#define TR_INICIO_ARGUMENTOS 21
Terceto que indica el inicio de argumentos para la llamada a un método.
#define TR_FIN_ARGUMENTOS 22
Terceto que indica el fin de argumentos para la llamada a un método.
#define TR_ACTIVAR_REGISTRO_CLASE 23
Terceto que indica que se debe activar el registro de otra clase. Recibe dos
operandos numéricos que indican la posición del registro de activación de la
clase de forma similar que TR_VALOR_VARIABLE.
#define TR_ACTIVAR_MISMA_CLASE 24
Terceto que indica que se debe seguir usando el registro de la clase actual.
#define TR_INICIO_IF 25
Terceto que indica el inicio de una sentencia condicional “if-else”. No recibe
ningún operando.
#define TR_FIN_IF 26
Terceto que indica el final de una sentencia condicional “if-else”. Recibe un
operando numérico que indica las etiquetas que se debe utilizar.
#define TR_ASIGNACION_INFORMATIVA 27
Terceto que indica el inicio de una asignación
#define TR_COMP_IGUAL 28
Este terceto indica que se debe hacer una comparación. Recibe dos operandos
numéricos. El primero indica el tipo de comparación que se debe realizar y el
segundo proporciona etiquetas.
#define TR_CUERPO_IF 29
Informa del comienzo del cuerpo “if” de una sentencia condicional “if-else”.
Recibe un operando numérico que proporciona etiquetas
Compiladores 31
Grupo 98 C# Compiler
#define TR_CUERPO_ELSE 30
Informa del comienzo del cuerpo “else” de una sentencia condicional “if-else”.
Recibe un operando numérico que proporciona etiquetas
#define TR_CONSOLE_READ 31
Terceto que implementa la lectura de un un entero por consola. No recibe ningún
operando.
#define TR_ASIGNACION_VECTOR 32
Terceto de asignación en un vector. Recibe dos operandos numéricos. El primero
indica si la variable donde se realiza la asignación es del método o de la clase, y
el segundo indica el desplazamiento correspondiente a la variable en el registro
de activación correspondiente
#define TR_INICIO_VECTOR 33
Terceto que informa el inicio de una variable de tipo vector. No recibe ningún
operando.
#define TR_FIN_VECTOR 34
Terceto que informa del fin de una variable de tipo vector. No recibe ningún
operando.
#define TR_VALOR_VARIABLE_VECTOR 35
Terceto de acceso a una variable. Recibe dos operandos numéricos. El primero
indica si la variable es del método o de la clase, y el segundo indica el
desplazamiento
Para indicar el tipo de operando pasado al terceto se utilizan las siguientes definiciones
en el fichero “types.h”:
#define TR_NADA 0
Indica que no se pasa ningún valor útil.
#define TR_NUMERO 1
Indica que se pasa un valor numérico.
#define TR_CADENA 2
Indica que se pasa un valor de cadena.
#define TR_REF 3
Indica que se pasa una referencia a otro terceto.
Compiladores 32
Grupo 98 C# Compiler
Este módulo proporciona las funciones necesarias para generar los tercetos a partir del
analizador sintáctico. Todas las funciones que proporciona son llamadas desde el
analizador sintáctico cuando éste tiene información útil para la generación de código
intermedio.
struct llam_s {
char nomclase[250]; //utilizado por Intermedio_Informar_Llamada
char nomnombre[250]; //utilizado por Intermedio_Informar_Llamada
TS *tinformar; //utilizado por Intermedio_Informar_Llamada
llam_t *sig;
int tipo;
};
int Intermedio_Fin();
Finaliza el generador de código Intermedio.
Compiladores 33
Grupo 98 C# Compiler
Esta función recibe una tabla de símbolos y calcula el tamaño necesario que hay
que reservar para crear su registro de activación.
int Intermedio_Informar_Llamada_Funcion();
Lo mismo que antes pero para llamadas a métodos.
int Intermedio_Tipo_Llamada();
Devuelve el tipo de llamada en curso: Es decir llamada a atributo o a método.
int Liberar_Informar_Llamada();
Como su nombre indica esta función libera una llamada de la pila de llamadas.
int Intermedio_Ultimo_TR();
Esta función devuelve el último tipo de terceto generado.
Compiladores 34
Grupo 98 C# Compiler
Línea de comandos
pruebaT.cs
class clase{
num1=5;
num2=4;
if (num1>=num2) //falso
console.write("verdadero\n");
else
console.write("falso\n");
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 5
Compiladores 35
Grupo 98 C# Compiler
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 6
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 8
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 9
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 11
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 12
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 13
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 14
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 16
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 17
Operacion: TR_INICIO_WRITE_STRING
Compiladores 36
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 18
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 19
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 20
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 21
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 22
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 23
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 24
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 37
Grupo 98 C# Compiler
Excepto las dos funciones de inicialización y finalización, todas las funciones de este
módulo tienen el mismo nombre que el terceto que implementan precedido por el
prefijo “Objeto_”.
Objeto_Inicializar(char fichero_salida[]);
Esta función inicializa el módulo y recibe como parámetro el nombre del fichero
donde escribir el código objeto en ensamblador. Automáticamente se añadirá la
extensión “.ens” al nombre del fichero.
Objeto_Finalizar();
Esta función finaliza el módulo y cierra el fichero de salida.
Objeto_Inicio_Programa(){
fprintf(fdobjeto,"MOVE #INICIO_PILA,.SP\n");
fprintf(fdobjeto,"BR /SALTO\n");
}
Inicializa la pila y salta a “salto” donde comienza el programa.
Objeto_Fin_Programa(){
fprintf(fdobjeto,"\tPUSH #INICIO_PILA\n");
fprintf(fdobjeto,"\tCALL /E0\n");
fprintf(fdobjeto,"HALT\n");
fprintf(fdobjeto,"INICIO_PILA:\n");
}
Mete en la pila la dirección del registro de activación de la clase del “Main”
público que corresponde con el inicio de la pila. Después llama al “Main” que
siempre se encuentra en la etiqueta E0. Después finaliza la ejecución y marca el
comienzo de la pila.
Compiladores 38
Grupo 98 C# Compiler
Objeto_Metodo_Main() {
fprintf(fdobjeto,"E0:\n");
fprintf(fdobjeto,"\tMOVE .SP,.IY;metodo\n");
}
Marca el comienzo del método “Main” y guarda el registro de pila en IY. El
registro IY se utilizara para acceder a las direcciones que marcan el registro de
activación de la clase y el método actual.
Objeto_Metodo(int n) {
fprintf(fdobjeto,"E%d: NOP ;metodo\n",n);
fprintf(fdobjeto,"\tMOVE .SP,.IY;metodo\n");
}
Marca el comienzo de un método y guarda el registro de pila en IY. El registro
IY se utilizara para acceder a las direcciones que marcan el registro de
activación de la clase y el método actual. El parámetro n indica el número de
etiqueta correspondiente al método.
Objeto_Metodo_Ret() {
fprintf(fdobjeto,"\tMOVE .IY,.SP\n");
fprintf(fdobjeto,"\tRET\n");
}
Restaura el valor de la pila y retorna del método actual.
Objeto_Registro_Clase(int numero) {
fprintf(fdobjeto,"\t;Crear registro clase tamano %d\n",numero);
fprintf(fdobjeto,"\tMOVE .SP,.R0\n");
fprintf(fdobjeto,"\tADD #%d,.SP\n",numero);
fprintf(fdobjeto,"\tMOVE .A,.SP\n");
}
Crea en la pila el registro de activación de una clase. El parámetro numero indica
el tamaño del registro.
Objeto_Clase(int n) {
fprintf(fdobjeto,"E%d: NOP ;clase\n",n);
}
Pone la etiqueta del comienzo de una clase. El parámetro indica el número de
etiqueta.
Objeto_Salto() {
fprintf(fdobjeto,"SALTO:\n");
}
Marca el comienzo del programa principal, donde se crean los registros de
activación iniciales y se llama al Main
Objeto_Registro_Metodo(int numero) {
fprintf(fdobjeto,"\t;Crear registro metodo tamano %d\n",numero);
fprintf(fdobjeto,"\tMOVE .SP,.R0\n");
fprintf(fdobjeto,"\tADD #%d,.SP\n",numero);
fprintf(fdobjeto,"\tMOVE .A,.SP\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
Compiladores 39
Grupo 98 C# Compiler
}
Crea en la pila el registro de activación de un método. El parámetro numero
indica el tamaño del registro. Al final mete en la pila el comienzo del registro.
Objeto_Valor_Inmediato(int n)
{
fprintf(fdobjeto,"\t;valor inmediato %d\n",n);
fprintf(fdobjeto,"\tMOVE #%d,.R0\n",n);
fprintf(fdobjeto,"\tPUSH .R0\n",n);
}
Mete un valor inmediato en la pila. El parámetro n es el valor inmediato.
Compiladores 40
Grupo 98 C# Compiler
Objeto_Write_Short(int n) {
fprintf(fdobjeto,"\tWRINT #%c[.IY] ;write short\n",n);
}
Escribe un Short. Recibe en n el número que se debe escribir en consola.
Objeto_Salto_Metodo(int n) {
fprintf(fdobjeto,"\t;Salto a metodo misma clase etiqueta E%d\n",n);
fprintf(fdobjeto,"\tCALL /E%d\n",n);
fprintf(fdobjeto,"\tDEC .SP\n");
fprintf(fdobjeto,"\tPOP .SP\n");
}
Salta a un método de la clase actual. Da por hecho que los registros de
activación ya están correctos. Después de la llamada restaura el registro de
activación anterior guardado en la pila.
Objeto_Inicio_Write_String() {
fprintf(fdobjeto,"\tMOVE .SP,.R2 ;incio write string\n");}
Guarda SP en R2 porque a partir de ahora se meterán en la pila los valores que
hay que escribir en una cadena. R2 marcará la dirección del primer argumento a
escribir.
Objeto_Fin_Write_String() {
fprintf(fdobjeto,"\tMOVE .R2,.SP ;fin write string\n");
}
Saca de la pila todos los elementos que se han escrito.
Objeto_Suma(int n) {
fprintf(fdobjeto,"\tPOP .R0 ;operacion aritmetica\n");
fprintf(fdobjeto,"\tPOP .R3\n");
if (n==1) fprintf(fdobjeto,"\tADD .R3,.R0 ;suma\n");
else if (n==2) fprintf(fdobjeto,"\tSUB .R3,.R0 ;resta\n");
fprintf(fdobjeto,"\tMOVE .A,.R0\n");
fprintf(fdobjeto,"\tPUSH .R0\n",n);
}
Realiza la operación suma (si n=1) o resta (si n=2). Presupone que los valores a
sumar están en la pila.
Objeto_Guardar_Estado() {
fprintf(fdobjeto,"\t;guardar estado\n");
fprintf(fdobjeto,"\tPUSH .SP\n");
fprintf(fdobjeto,"\tPUSH .SR\n");
fprintf(fdobjeto,"\tPUSH .IX\n");
fprintf(fdobjeto,"\tPUSH .IY\n");
fprintf(fdobjeto,"\tPUSH .A\n");
// fprintf(fdobjeto,"\tPUSH .R0\n"); //aqui va el valor devuelto
fprintf(fdobjeto,"\tPUSH .R1\n");
fprintf(fdobjeto,"\tPUSH .R2\n");
fprintf(fdobjeto,"\tPUSH .R3\n");
fprintf(fdobjeto,"\tPUSH .R4\n");
Compiladores 41
Grupo 98 C# Compiler
fprintf(fdobjeto,"\tPUSH .R5\n");
fprintf(fdobjeto,"\tPUSH .R6\n");
fprintf(fdobjeto,"\tPUSH .R7\n");
fprintf(fdobjeto,"\tPUSH .R8\n");
fprintf(fdobjeto,"\tPUSH .R9\n");
fprintf(fdobjeto,"\t;fin de guardar estado\n");
}
Guarda el estado de los registros del procesador. No guarda R0 porque aquí va el
valor devuelto del método en caso de que devuelva algún valor.
Objeto_Restaurar_Estado() {
fprintf(fdobjeto,"\t;restaurar estado\n");
fprintf(fdobjeto,"\tPOP .R9\n");
fprintf(fdobjeto,"\tPOP .R8\n");
fprintf(fdobjeto,"\tPOP .R7\n");
fprintf(fdobjeto,"\tPOP .R6\n");
fprintf(fdobjeto,"\tPOP .R5\n");
fprintf(fdobjeto,"\tPOP .R4\n");
fprintf(fdobjeto,"\tPOP .R3\n");
fprintf(fdobjeto,"\tPOP .R2\n");
fprintf(fdobjeto,"\tPOP .R1\n");
// fprintf(fdobjeto,"\tPOP .R0\n"); //aqui va el valor devuelto
fprintf(fdobjeto,"\tPOP .A\n");
fprintf(fdobjeto,"\tPOP .IY\n");
fprintf(fdobjeto,"\tPOP .IX\n");
fprintf(fdobjeto,"\tPOP .SR\n");
fprintf(fdobjeto,"\tPOP .SP\n");
fprintf(fdobjeto,"\t;fin de restaurar estado\n");
}
Restaura el estado de los registros del procesador. No restaura R0 porque aquí va
el valor devuelto del método en caso de que devuelva algún valor.
Objeto_Valor_Devuelto() {
fprintf(fdobjeto,"\t;valor devuelto\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
}
Guarda el valor devuelto por un método en la pila.
Objeto_Inicio_Argumentos() {
fprintf(fdobjeto,"\tMOVE .SP,.R2 ;incio argumentos\n");
}
Guarda SP en R2 porque a partir de ahora se meterán en la pila los valores de los
parámetros que se pasarán a un método.
Objeto_Fin_Argumentos() {
fprintf(fdobjeto,"\tMOVE .R2,.SP ;fin argumentos\n");
}
Saca de la pila los valores de los argumentos porque ya no son necesarios.
Compiladores 42
Grupo 98 C# Compiler
Objeto_Activar_Misma_Clase() {
fprintf(fdobjeto,"\t;activar registro misma clase\n");
fprintf(fdobjeto,"\tMOVE #-2[.IY],.R0\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
}
Mete en la pila la dirección del registro de activación de la clase actual.
Objeto_Inicio_If() {
fprintf(fdobjeto,"\tMOVE #0,.R3 ;inicio if\n");
}
Mete en R3 un 0. Esto es porque se inicia una comparación lógica. Si alguna
comparación resulta falsa, pondrá un uno en R3.
Objeto_Fin_If(int eti) {
fprintf(fdobjeto,"\tE%d: NOP; fin if\n",eti+1);
}
Pone la etiqueta del final del if.
Objeto_Asignacion_Informativa() {
fprintf(fdobjeto,"\t;asignacion informativa\n");
}
Indica el inicio de una asignación. Este terceto no necesita ninguna
implementación en nuestro generador de código objeto. Sin embargo, hacemos
esta función y ponemos un comentario para dar más claridad al código del
compilador y al código generado.
Compiladores 43
Grupo 98 C# Compiler
Objeto_Cuerpo_If(int eti) {
fprintf(fdobjeto,"\t;cuerpo if\n");
fprintf(fdobjeto,"\tCMP #0,.R3\n");
fprintf(fdobjeto,"\tBZ /E%d\n",eti);
}
Comprueba si el resultado de las comparaciones lógicas es verdadero (R0=0) y
si no es así salta al else.
Objeto_Cuerpo_Else(int eti) {
fprintf(fdobjeto,"\t;cuerpo else %d\n",eti);
fprintf(fdobjeto,"\tBR /E%d\n",eti+1);
fprintf(fdobjeto,"\tE%d: NOP\n",eti);
}
Salta al final del if y pone la etiqueta del comienzo del bloque else
Objeto_Console_Read() {
fprintf(fdobjeto,"\t;console read\n");
fprintf(fdobjeto,"\tININT .R0\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
}
Lee de la consola un entero y lo mete en la pila.
Compiladores 44
Grupo 98 C# Compiler
fprintf(fdobjeto,"\tADD #%d,.A\n",n);
fprintf(fdobjeto,"\tADD .IX,.A\n");
fprintf(fdobjeto,"\tMOVE .R0,[.A]\n");
}
Hace una asignación en un vector. El parámetro clase indica si la variable donde
almacenar el valor es del método actual o de la clase actual y el parámetro n
indica el desplazamiento dentro del registro de activación. Presupone que en la
pila esta el desplazamiento del vector y el valor a asignar.
Objeto_Inicio_Vector() {
fprintf(fdobjeto,"\t;inicio vector\n");
}
Indica el inicio de un vector. Este terceto no necesita ninguna implementación en
nuestro generador de código objeto. Sin embargo, hacemos esta función y
ponemos un comentario para dar más claridad al código del compilador y al
código generado.
Objeto_Fin_Vector() {
fprintf(fdobjeto,"\t;Fin vector\n");
}
Indica el final de un vector. Este terceto no necesita ninguna implementación en
nuestro generador de código objeto. Sin embargo, hacemos esta función y
ponemos un comentario para dar más claridad al código del compilador y al
código generado.
Compiladores 45
Grupo 98 C# Compiler
8 Generador de Errores
El módulo del generador de errores se encarga de almacenar los errores producidos en la
compilación de un fichero, junto con los datos importantes de cada error, para que al
finalizar el programa se visualicen todos los errores obtenidos. La estructura de un
mensaje de error es el siguiente:
Los errores que pueden aparecer en la compilación pueden ser léxicos, sintácticos o
semánticos. De ahí que el generador de errores los divida de esta forma: Lexer,
Sintactic, Semantic.
Por ultimo, aparece el código del error (para posteriormente consultarlo a un posible
manual de explicación de errores) y el respectivo mensaje de error.
Para utilizar el modulo del gestor de errores, se nos facilita la siguiente interfaz de
usuario:
Compiladores 46
Grupo 98 C# Compiler
Los errores que puede generar el gestor de errores son los siguientes:
Léxicos:
o “Token not valid”
o “not end of Comment”
o “not valid”
o “ID not valid”
Sintacticos:
o "class expected",
o "token '{' expected",
o "token '}' expected",
o "token 'ID' expected",
o "token ';' expected",
o "token '[' expected",
o "token ']' expected",
o "'SentAsig' not valid",
o "'SentMet' not valid",
o "'Sentencia' not valid",
o "token '(' expected",
o "token ')' expected",
o "token 'ID' or 'Tipo' expected",
o "token 'Constant Integer' expected",
o "'Primario' not valid",
o "'Declaracion' not valid",
o "'DeclAtributo' not valid",
o "expected predefined type",
o "token 'OL' expected",
o "predefined type necessary"
Semánticos:
o "not a main method in file",
o "class %s already exists",
o "not exists %s lemma",
o "types not equal in Sentencia",
o "predefined type in list",
o "type var not class",
o "expressions must be the same type"
o "not exists that method", /* the method %s not exists" */
o "types not equal in return",
o "token %s already exists",
o "not exists %s class",
o "method %s is private",
o "not exist %s atribute in class %s",
o "atribute %s is not a list",
o "not integer value in expression",
o "innecesary '{ }' tokens for sentencias in %s",
Compiladores 47
Grupo 98 C# Compiler
Compiladores 48
Grupo 98 C# Compiler
9 Programa Principal
El programa principal se llama CSC (C Sharp Compiler). Este programa posee las
siguientes opciones:
Compiladores 49
Grupo 98 C# Compiler
10 Pruebas
En todas las pruebas ejecutamos el compilador con la siguiente línea de comando:
Línea de comandos
Línea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\pruebaX.cs
Fichero Salida: salida
Compilando...
Compilacion finalizada correctamente.
10.1 Prueba 1
prueba101.cs
class clase{
short numero3;
void metodo1() {
console.write("Estoy en el metodo1\n");
}
short numero1;
short numero2;
metodo1();
console.write("hola\n");
numero1=4;
numero2=5-2+3-7; //=-1
numero3=6;
numero1=numero3;
numero1=numero2+5-1; //=3
numero3=2-numero3-numero2+numero1+5; //=2-6-(-1)+3+5=5
console.write("n1: {0}\nn2: {1}\nn3: {2}\n", numero1, numero2,
numero3);
console.write("adios\n");
}
}
Compiladores 50
Grupo 98 C# Compiler
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 5
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 8
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 9
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 11
Operacion: TR_RESTAURAR_ESTADO
Compiladores 51
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 13
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 14
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 16
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 18
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 19
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 20
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 21
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 22
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 7
Compiladores 52
Grupo 98 C# Compiler
Compiladores 53
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 36
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 37
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 38
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 39
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 40
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 41
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 42
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 43
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 44
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 45
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 46
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 47
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Compiladores 54
Grupo 98 C# Compiler
Direccion: 48
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 49
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 50
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 51
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 52
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 53
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 54
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 55
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 56
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 9
Tipo: TR_NUMERO Valor: 9
------------------------------------------------
Direccion: 57
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 58
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 59
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 50
Tipo: TR_NUMERO Valor: 50
------------------------------------------------
Direccion: 60
Compiladores 55
Grupo 98 C# Compiler
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 13
Tipo: TR_NUMERO Valor: 13
------------------------------------------------
Direccion: 61
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 62
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 63
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 64
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 65
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 66
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 67
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 68
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en el metodo1\n
WRSTR /E3
BR /E4
E3: DATA "Estoy en el metodo1\n"
E4: NOP ;fin cuerpo
MOVE .IY,.SP
Compiladores 56
Grupo 98 C# Compiler
RET
E0:
MOVE .SP,.IY;metodo
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .SP,.R2 ;incio write string
;cuerpo write string hola\n
WRSTR /E5
BR /E6
E5: DATA "hola\n"
E6: NOP ;fin cuerpo
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
Compiladores 57
Grupo 98 C# Compiler
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;valor inmediato 7
MOVE #7,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
Compiladores 58
Grupo 98 C# Compiler
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
Compiladores 59
Grupo 98 C# Compiler
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string n1:
WRSTR /E7
BR /E8
E7: DATA "n1: "
E8: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \nn2:
WRSTR /E9
BR /E10
E9: DATA "\nn2: "
E10: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \nn3:
WRSTR /E11
BR /E12
E11: DATA "\nn3: "
E12: NOP ;fin cuerpo
WRINT #2[.IY] ;write short
;cuerpo write string \n
WRSTR /E13
BR /E14
E13: DATA "\n"
E14: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .SP,.R2 ;incio write string
;cuerpo write string adios\n
WRSTR /E15
BR /E16
E15: DATA "adios\n"
E16: NOP ;fin cuerpo
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
Compiladores 60
Grupo 98 C# Compiler
Estoy en el metodo1
hola
n1: 3
n2: -1
n3: 5
adios
10.2 Prueba 2
prueba102.cs
class clase{
short numero3;
short numero1;
short numero2;
console.write("hola\n");
numero1=4; //n1=4
numero2=3; //n2=3
numero1+=3+1; //n1=8
numero1-=5-numero2; // =n1=8-2=6
console.write("n1: {0}\n",numero1);
console.write("adios\n");
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Compiladores 61
Grupo 98 C# Compiler
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 7
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 9
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 10
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 11
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 12
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 13
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 14
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 15
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 16
Operacion: TR_ASIGNACION
Compiladores 62
Grupo 98 C# Compiler
Compiladores 63
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 30
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 31
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 33
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 34
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 35
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E0:
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string hola\n
WRSTR /E2
BR /E3
E2: DATA "hola\n"
E3: NOP ;fin cuerpo
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
Compiladores 64
Grupo 98 C# Compiler
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#1[.IX]
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
Compiladores 65
Grupo 98 C# Compiler
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string n1:
WRSTR /E4
BR /E5
E4: DATA "n1: "
E5: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E6
BR /E7
E6: DATA "\n"
E7: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .SP,.R2 ;incio write string
;cuerpo write string adios\n
WRSTR /E8
BR /E9
E8: DATA "adios\n"
E9: NOP ;fin cuerpo
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
hola
n1: 6
adios
10.3 Prueba 3
prueba103.cs
class clase{
short numero3;
void metodo1() {
console.write("Estoy en el metodo1\n");
Compiladores 66
Grupo 98 C# Compiler
void metodo2() {
console.write("Estoy en el metodo2\n");
}
n1=5;
metodo1();
n1+=3;
console.write("Estoy en Main {0}\n",n1);
metodo2();
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 5
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 7
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 67
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 8
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 9
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 11
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 13
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 14
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 16
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 17
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 18
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 19
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Compiladores 68
Grupo 98 C# Compiler
Direccion: 20
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 21
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 22
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 23
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 24
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 25
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 26
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 27
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 28
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 30
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 31
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Compiladores 69
Grupo 98 C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 33
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 34
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 35
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 36
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 37
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 38
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en el metodo1\n
WRSTR /E3
BR /E4
E3: DATA "Estoy en el metodo1\n"
E4: NOP ;fin cuerpo
MOVE .IY,.SP
RET
E5: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en el metodo2\n
WRSTR /E6
BR /E7
E6: DATA "Estoy en el metodo2\n"
E7: NOP ;fin cuerpo
MOVE .IY,.SP
Compiladores 70
Grupo 98 C# Compiler
RET
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
Compiladores 71
Grupo 98 C# Compiler
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Main
WRSTR /E8
BR /E9
E8: DATA "Estoy en Main "
E9: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E10
BR /E11
E10: DATA "\n"
E11: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E5
CALL /E5
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
Compiladores 72
Grupo 98 C# Compiler
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
Estoy en el metodo1
Estoy en Main 8
Estoy en el metodo2
10.4 Prueba 4
prueba104.cs
class clase{
short numero3;
short metodo1() {
console.write("Estoy en el metodo1\n");
numero3=10;
return 5+numero3;
}
n1=metodo1();
console.write("Estoy en Main {0}\n",n1);
n1=3+metodo1()+1;
console.write("Sigo en Main {0}\n",n1);
Compiladores 73
Grupo 98 C# Compiler
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 7
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 9
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 10
Compiladores 74
Grupo 98 C# Compiler
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 11
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 13
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 14
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 16
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 18
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 19
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 20
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 21
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 22
Operacion: TR_INICIO_WRITE_STRING
Compiladores 75
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 24
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 25
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 26
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 27
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 30
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 31
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 32
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 33
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 34
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Compiladores 76
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 35
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 36
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 37
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 38
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 39
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 40
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 41
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 42
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 9
Tipo: TR_NUMERO Valor: 9
------------------------------------------------
Direccion: 43
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 44
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 45
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 46
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 77
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 47
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 48
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 49
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 50
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en el metodo1\n
WRSTR /E3
BR /E4
E3: DATA "Estoy en el metodo1\n"
E4: NOP ;fin cuerpo
;asignacion informativa
;valor inmediato 10
MOVE #10,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
Compiladores 78
Grupo 98 C# Compiler
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Main
WRSTR /E5
BR /E6
Compiladores 79
Grupo 98 C# Compiler
Compiladores 80
Grupo 98 C# Compiler
Ejecución
Estoy en el metodo1
Estoy en Main 15
Estoy en el metodo1
Sigo en Main 19
Compiladores 81
Grupo 98 C# Compiler
10.5 Prueba 5
prueba105.cs
class clase{
short num;
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 5
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 6
Operacion: TR_WRITE_STRING
Compiladores 82
Grupo 98 C# Compiler
Compiladores 83
Grupo 98 C# Compiler
Compiladores 84
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 31
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 33
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 34
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 35
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 36
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 37
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 38
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 39
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 40
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 41
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 42
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Compiladores 85
Grupo 98 C# Compiler
Direccion: 43
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 44
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 17
Tipo: TR_NUMERO Valor: 17
------------------------------------------------
Direccion: 45
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 46
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 47
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 48
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 49
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 50
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 51
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 52
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 53
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 54
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 55
Compiladores 86
Grupo 98 C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 56
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 57
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 58
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 59
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 60
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 61
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;cuerpo write string Metodo1: n1=
WRSTR /E3
BR /E4
E3: DATA "Metodo1: n1="
E4: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string , n2=
WRSTR /E5
Compiladores 87
Grupo 98 C# Compiler
BR /E6
E5: DATA ", n2="
E6: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E7
BR /E8
E7: DATA "\n"
E8: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;cuerpo write string Metodo1: n1+n2=
WRSTR /E9
BR /E10
E9: DATA "Metodo1: n1+n2="
E10: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E11
BR /E12
E11: DATA "\n"
E12: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
Compiladores 88
Grupo 98 C# Compiler
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en Main\n
WRSTR /E13
BR /E14
E13: DATA "Estoy en Main\n"
E14: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
Compiladores 89
Grupo 98 C# Compiler
;valor devuelto
PUSH .R0
;cuerpo write string Resultado de metodo1:
WRSTR /E15
BR /E16
E15: DATA "Resultado de metodo1: "
E16: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E17
BR /E18
E17: DATA "\n"
E18: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
Compiladores 90
Grupo 98 C# Compiler
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
Estoy en Main
Metodo1: n1=5, n2=6
Metodo1: n1+n2=11
Resultado de metodo1: 11
Metodo1: n1=6, n2=6
Metodo1: n1+n2=12
10.6 Prueba 6
prueba106.cs
class prueba {
short var1,var2;
Compiladores 91
Grupo 98 C# Compiler
}
}
class clase{
short num1;
prueba p1;
void metodo2() {
short p;
num1=5;
p=6;
console.write("Estoy en el Metodo2 {0},{1}\n",num1,p);
}
num1=1;
num2=2;
console.write("Empiezo en Main {0},{1}\n",num1,num2);
p1.metodo1();
console.write("Sigo en Main {0},{1}\n",num1,num2);
metodo2();
console.write("Termino en Main {0},{1}\n",num1,num2);
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Compiladores 92
Grupo 98 C# Compiler
Compiladores 93
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 18
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 19
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 9
Tipo: TR_NUMERO Valor: 9
------------------------------------------------
Direccion: 20
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 21
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 22
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 23
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 24
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 25
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 26
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 27
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 29
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Compiladores 94
Grupo 98 C# Compiler
Direccion: 30
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 31
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 32
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 13
Tipo: TR_NUMERO Valor: 13
------------------------------------------------
Direccion: 33
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 34
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 35
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 36
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 37
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 38
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 39
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 40
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 41
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 42
Compiladores 95
Grupo 98 C# Compiler
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 43
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 44
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 45
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 46
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 47
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 17
Tipo: TR_NUMERO Valor: 17
------------------------------------------------
Direccion: 48
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 49
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 19
Tipo: TR_NUMERO Valor: 19
------------------------------------------------
Direccion: 50
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 51
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 21
Tipo: TR_NUMERO Valor: 21
------------------------------------------------
Direccion: 52
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 53
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 54
Operacion: TR_REGISTRO_METODO
Compiladores 96
Grupo 98 C# Compiler
Compiladores 97
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 67
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 68
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 69
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 70
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 71
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 72
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 73
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 74
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 75
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 29
Tipo: TR_NUMERO Valor: 29
------------------------------------------------
Direccion: 76
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 77
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 31
Tipo: TR_NUMERO Valor: 31
------------------------------------------------
Direccion: 78
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
Compiladores 98
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 79
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 33
Tipo: TR_NUMERO Valor: 33
------------------------------------------------
Direccion: 80
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 81
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 82
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 83
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 84
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 85
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
Compiladores 99
Grupo 98 C# Compiler
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en el Metodo1
WRSTR /E3
BR /E4
E3: DATA "Estoy en el Metodo1 "
E4: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E5
BR /E6
E5: DATA ","
E6: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E7
BR /E8
E7: DATA "\n"
E8: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
E9: NOP ;clase
E10: NOP ;metodo
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en el Metodo2
WRSTR /E11
BR /E12
Compiladores 100
Grupo 98 C# Compiler
Compiladores 101
Grupo 98 C# Compiler
Compiladores 102
Grupo 98 C# Compiler
Compiladores 103
Grupo 98 C# Compiler
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Termino en Main
WRSTR /E29
BR /E30
E29: DATA "Termino en Main "
E30: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E31
BR /E32
E31: DATA ","
E32: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E33
BR /E34
E33: DATA "\n"
E34: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 3
MOVE .SP,.R0
ADD #3,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.7 Prueba 7
prueba107.cs
class prueba {
short var1,var2;
Compiladores 104
Grupo 98 C# Compiler
class clase{
short num1;
prueba p1;
short metodo2() {
short p;
num1=5;
p=6;
console.write("Estoy en el Metodo2 {0},{1}\n",num1,p); //5,6
return num1+p; // 11
}
num1=1;
num2=2;
console.write("Empiezo en Main {0},{1}\n",num1,num2); // 1,2
num2=p1.metodo1();
console.write("Sigo en Main {0},{1}\n",num1,num2); // 1,7
num2=metodo2();
console.write("Termino en Main {0},{1}\n",num1,num2); //5,11
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Compiladores 105
Grupo 98 C# Compiler
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 6
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 8
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 9
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 11
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 12
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 13
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 14
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 15
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 16
Operacion: TR_WRITE_STRING
Compiladores 106
Grupo 98 C# Compiler
Compiladores 107
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 30
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 31
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 33
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 34
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 35
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 36
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 13
Tipo: TR_NUMERO Valor: 13
------------------------------------------------
Direccion: 37
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 38
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 39
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 40
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
Compiladores 108
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 41
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 42
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 43
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 44
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 45
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 46
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 47
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 48
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 49
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 50
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 51
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 52
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 109
Grupo 98 C# Compiler
Direccion: 53
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 54
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 55
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 17
Tipo: TR_NUMERO Valor: 17
------------------------------------------------
Direccion: 56
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 57
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 19
Tipo: TR_NUMERO Valor: 19
------------------------------------------------
Direccion: 58
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 59
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 21
Tipo: TR_NUMERO Valor: 21
------------------------------------------------
Direccion: 60
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 61
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 62
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 63
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 64
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 65
Compiladores 110
Grupo 98 C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 66
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 67
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 68
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 69
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 70
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 71
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 72
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 23
Tipo: TR_NUMERO Valor: 23
------------------------------------------------
Direccion: 73
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 74
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 25
Tipo: TR_NUMERO Valor: 25
------------------------------------------------
Direccion: 75
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 76
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 27
Tipo: TR_NUMERO Valor: 27
------------------------------------------------
Direccion: 77
Operacion: TR_FIN_WRITE_STRING
Compiladores 111
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 78
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 79
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 80
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 81
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 82
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 83
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 84
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 85
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 86
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 87
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 88
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 89
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 29
Compiladores 112
Grupo 98 C# Compiler
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
Compiladores 113
Grupo 98 C# Compiler
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en el Metodo1
WRSTR /E3
BR /E4
E3: DATA "Estoy en el Metodo1 "
E4: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E5
BR /E6
E5: DATA ","
E6: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E7
BR /E8
E7: DATA "\n"
E8: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
Compiladores 114
Grupo 98 C# Compiler
Compiladores 115
Grupo 98 C# Compiler
MOVE .IY,.SP
RET
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Empiezo en Main
WRSTR /E17
BR /E18
E17: DATA "Empiezo en Main "
E18: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E19
BR /E20
E19: DATA ","
E20: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E21
BR /E22
E21: DATA "\n"
E22: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;asignacion informativa
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
Compiladores 116
Grupo 98 C# Compiler
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #1,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Sigo en Main
WRSTR /E23
BR /E24
E23: DATA "Sigo en Main "
E24: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E25
BR /E26
E25: DATA ","
E26: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E27
Compiladores 117
Grupo 98 C# Compiler
BR /E28
E27: DATA "\n"
E28: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;asignacion informativa
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E10
CALL /E10
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
Compiladores 118
Grupo 98 C# Compiler
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Termino en Main
WRSTR /E29
BR /E30
E29: DATA "Termino en Main "
E30: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E31
BR /E32
E31: DATA ","
E32: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E33
BR /E34
E33: DATA "\n"
E34: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 3
MOVE .SP,.R0
ADD #3,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.8 Prueba 8
prueba108.cs
class prueba {
Compiladores 119
Grupo 98 C# Compiler
class prueba2 {
class clase{
short s1;
prueba p1;
prueba p3;
prueba2 p2;
short metodo3() {
return 5;
}
p1.numero1=2;
p1.numero2=3;
//s1=p1.numero1; //da error que no deberia
s1=2+p1.metodo1()+2; // 9
s2=1+metodo3()+1; // 7
console.write("Estoy en Main: {0},{1},{2},{3}\n",s1,s2,
p1.numero1,p1.numero2);
p2.numero3=4;
p2.metodo22(); //4
p2.metodo2(5); //4,5
console.write("Sigo en Main: {0},{1}\n",p2.numero3,s1); // 4,9
console.write("Estoy en Main: {0},{1},{2},{3}\n",s1,s2,
p1.numero1,p1.numero2);
}
}
salida.ter
Compiladores 120
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 5
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 6
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 7
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 8
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 9
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 10
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 11
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 121
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 12
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 13
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 14
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 15
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 16
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 17
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 9
Tipo: TR_NUMERO Valor: 9
------------------------------------------------
Direccion: 18
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 19
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 20
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 21
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 22
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 23
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 13
Tipo: TR_NUMERO Valor: 13
------------------------------------------------
Compiladores 122
Grupo 98 C# Compiler
Direccion: 24
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 25
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 22
Tipo: TR_NUMERO Valor: 22
------------------------------------------------
Direccion: 26
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 29
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 30
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 31
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 32
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 33
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 34
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 18
Tipo: TR_NUMERO Valor: 18
------------------------------------------------
Direccion: 35
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 36
Compiladores 123
Grupo 98 C# Compiler
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 20
Tipo: TR_NUMERO Valor: 20
------------------------------------------------
Direccion: 37
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 38
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 39
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 40
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 41
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 42
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 43
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 22
Tipo: TR_NUMERO Valor: 22
------------------------------------------------
Direccion: 44
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 23
Tipo: TR_NUMERO Valor: 23
------------------------------------------------
Direccion: 45
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 46
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 47
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 48
Operacion: TR_METODO_MAIN
Compiladores 124
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 49
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 50
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 51
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 52
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 53
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 54
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 55
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 56
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 57
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 58
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 59
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 60
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Compiladores 125
Grupo 98 C# Compiler
Compiladores 126
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 73
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 74
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 75
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 76
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 77
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 78
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 79
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 80
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 81
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 82
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 83
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 84
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 24
Tipo: TR_NUMERO Valor: 24
------------------------------------------------
Compiladores 127
Grupo 98 C# Compiler
Direccion: 85
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 86
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 87
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 88
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 28
Tipo: TR_NUMERO Valor: 28
------------------------------------------------
Direccion: 89
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 50
Tipo: TR_NUMERO Valor: 50
------------------------------------------------
Direccion: 90
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 30
Tipo: TR_NUMERO Valor: 30
------------------------------------------------
Direccion: 91
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 51
Tipo: TR_NUMERO Valor: 51
------------------------------------------------
Direccion: 92
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 32
Tipo: TR_NUMERO Valor: 32
------------------------------------------------
Direccion: 93
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 94
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 95
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 96
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 97
Compiladores 128
Grupo 98 C# Compiler
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 98
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 99
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 100
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 101
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 102
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 103
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 104
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 105
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 106
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 107
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 108
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 109
Operacion: TR_RESTAURAR_ESTADO
Compiladores 129
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 110
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 111
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 112
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 113
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Direccion: 114
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 115
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 36
Tipo: TR_NUMERO Valor: 36
------------------------------------------------
Direccion: 116
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 117
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 38
Tipo: TR_NUMERO Valor: 38
------------------------------------------------
Direccion: 118
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 119
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 120
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 121
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Compiladores 130
Grupo 98 C# Compiler
Compiladores 131
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 134
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 135
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 136
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 137
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 138
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Metodo1:
WRSTR /E3
BR /E4
E3: DATA "Estoy en Metodo1: "
E4: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E5
BR /E6
E5: DATA ","
E6: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E7
BR /E8
E7: DATA "\n"
Compiladores 132
Grupo 98 C# Compiler
Compiladores 133
Grupo 98 C# Compiler
Compiladores 134
Grupo 98 C# Compiler
MOVE #2,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #1,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
Compiladores 135
Grupo 98 C# Compiler
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E23
CALL /E23
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;valor inmediato 1
Compiladores 136
Grupo 98 C# Compiler
MOVE #1,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Main:
WRSTR /E24
BR /E25
E24: DATA "Estoy en Main: "
E25: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E26
BR /E27
E26: DATA ","
E27: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string ,
WRSTR /E28
BR /E29
E28: DATA ","
E29: NOP ;fin cuerpo
WRINT #2[.IY] ;write short
;cuerpo write string ,
WRSTR /E30
BR /E31
E30: DATA ","
E31: NOP ;fin cuerpo
WRINT #3[.IY] ;write short
;cuerpo write string \n
WRSTR /E32
BR /E33
E32: DATA "\n"
E33: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
Compiladores 137
Grupo 98 C# Compiler
PUSH .R0
;asignacion pos 5
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#5[.IX]
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #5,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E10
CALL /E10
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
Compiladores 138
Grupo 98 C# Compiler
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #5,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E15
CALL /E15
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #5[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Sigo en Main:
WRSTR /E34
BR /E35
E34: DATA "Sigo en Main: "
E35: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E36
BR /E37
E36: DATA ","
E37: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
Compiladores 139
Grupo 98 C# Compiler
WRSTR /E38
BR /E39
E38: DATA "\n"
E39: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Main:
WRSTR /E40
BR /E41
E40: DATA "Estoy en Main: "
E41: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E42
BR /E43
E42: DATA ","
E43: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string ,
WRSTR /E44
BR /E45
E44: DATA ","
E45: NOP ;fin cuerpo
WRINT #2[.IY] ;write short
;cuerpo write string ,
WRSTR /E46
BR /E47
E46: DATA ","
E47: NOP ;fin cuerpo
WRINT #3[.IY] ;write short
;cuerpo write string \n
WRSTR /E48
BR /E49
E48: DATA "\n"
E49: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 6
MOVE .SP,.R0
ADD #6,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
Compiladores 140
Grupo 98 C# Compiler
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.9 Prueba 9
prueba109.cs
class prueba {
class prueba2 {
class clase{
prueba p1;
prueba2 p2;
p1.numero1=5;
p2.numero2=6;
Compiladores 141
Grupo 98 C# Compiler
p2.metodo2(p1.numero1); //5,6
console.write("Estoy en Main: {0},{1}\n",p1.numero1,p2.numero2);
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 5
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 6
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 7
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 8
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 9
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
Compiladores 142
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 10
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 11
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 13
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 14
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 16
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 9
Tipo: TR_NUMERO Valor: 9
------------------------------------------------
Direccion: 18
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 19
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 20
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 21
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 13
Tipo: TR_NUMERO Valor: 13
------------------------------------------------
Compiladores 143
Grupo 98 C# Compiler
Direccion: 22
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 24
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 25
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 26
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 15
Tipo: TR_NUMERO Valor: 15
------------------------------------------------
Direccion: 27
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 30
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 31
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 33
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 34
Compiladores 144
Grupo 98 C# Compiler
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 35
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 36
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 37
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 38
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 39
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 40
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 41
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 42
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 43
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 44
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 45
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 46
Operacion: TR_WRITE_SHORT
Compiladores 145
Grupo 98 C# Compiler
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
Compiladores 146
Grupo 98 C# Compiler
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Metodo1:
WRSTR /E3
BR /E4
E3: DATA "Estoy en Metodo1: "
E4: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E5
BR /E6
E5: DATA "\n"
E6: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E7: NOP ;clase
E8: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Metodo2:
WRSTR /E9
BR /E10
E9: DATA "Estoy en Metodo2: "
E10: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E11
BR /E12
E11: DATA ","
E12: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E13
BR /E14
E13: DATA "\n"
E14: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E15: NOP ;clase
E0:
MOVE .SP,.IY;metodo
Compiladores 147
Grupo 98 C# Compiler
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#1[.IX]
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #1,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E8
CALL /E8
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
Compiladores 148
Grupo 98 C# Compiler
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Main:
WRSTR /E16
BR /E17
E16: DATA "Estoy en Main: "
E17: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E18
BR /E19
E18: DATA ","
E19: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E20
BR /E21
E20: DATA "\n"
E21: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.10 Prueba 10
Compiladores 149
Grupo 98 C# Compiler
prueba110.cs
class prueba {
console.write("Estoy en Metodo1\n");
return numero1;
}
}
class clase{
short s1;
prueba p1;
p1.numero1=5;
s1=p1.numero1;
}
}
class clase2{
short s1;
prueba p1;
s1=p1.numero1;
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
Compiladores 150
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 4
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 5
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 6
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 9
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 11
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 12
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 13
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 14
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 15
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 151
Grupo 98 C# Compiler
Direccion: 16
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 17
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 18
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 19
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 20
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 21
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 22
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 24
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 25
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 26
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 28
Compiladores 152
Grupo 98 C# Compiler
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 29
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Estoy en Metodo1\n
WRSTR /E3
BR /E4
E3: DATA "Estoy en Metodo1\n"
E4: NOP ;fin cuerpo
;valor de variable
MOVE #-2[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E5: NOP ;clase
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
Compiladores 153
Grupo 98 C# Compiler
MOVE .IY,.SP
RET
E6: NOP ;clase
E7: NOP ;metodo
MOVE .SP,.IY;metodo
;asignacion informativa
;valor de variable
MOVE #-2[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
;Crear registro metodo tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.11 Prueba 11
prueba111.cs
class clase{
num=5;
if (num==5) {
Compiladores 154
Grupo 98 C# Compiler
console.write("hola2\n");
}
if (num==1) {
console.write("adios2\n");
}
num=3;
return;
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 6
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
Compiladores 155
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 9
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 10
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 11
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 12
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 13
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 14
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 15
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 16
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 18
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 19
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 20
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 156
Grupo 98 C# Compiler
Direccion: 21
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 12
Tipo: TR_NUMERO Valor: 12
------------------------------------------------
Direccion: 22
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 23
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 24
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 14
Tipo: TR_NUMERO Valor: 14
------------------------------------------------
Direccion: 25
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 26
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 28
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 29
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 30
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 31
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 20
Tipo: TR_NUMERO Valor: 20
------------------------------------------------
Direccion: 33
Compiladores 157
Grupo 98 C# Compiler
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 34
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 35
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 36
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 37
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 38
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 39
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 22
Tipo: TR_NUMERO Valor: 22
------------------------------------------------
Direccion: 40
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 41
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 42
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 22
Tipo: TR_NUMERO Valor: 22
------------------------------------------------
Direccion: 43
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 22
Tipo: TR_NUMERO Valor: 22
------------------------------------------------
Direccion: 44
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 45
Operacion: TR_VALOR_INMEDIATO
Compiladores 158
Grupo 98 C# Compiler
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
Compiladores 159
Grupo 98 C# Compiler
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 4
POP .R1
POP .R0
CMP .R0,.R1
BZ /E4
BR /E5
E4: MOVE #1,.R3;
E5: NOP; fin comp igual
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;comp igual op 1 eti 6
POP .R1
POP .R0
CMP .R0,.R1
BZ /E6
BR /E7
E6: MOVE #1,.R3;
E7: NOP; fin comp igual
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;comp igual op 1 eti 8
POP .R1
POP .R0
CMP .R0,.R1
BZ /E8
BR /E9
E8: MOVE #1,.R3;
E9: NOP; fin comp igual
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;comp igual op 1 eti 10
POP .R1
POP .R0
CMP .R0,.R1
BZ /E10
BR /E11
E10: MOVE #1,.R3;
E11: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E2
MOVE .SP,.R2 ;incio write string
Compiladores 160
Grupo 98 C# Compiler
Compiladores 161
Grupo 98 C# Compiler
CMP #0,.R3
BZ /E22
MOVE .SP,.R2 ;incio write string
;cuerpo write string adios2\n
WRSTR /E26
BR /E27
E26: DATA "adios2\n"
E27: NOP ;fin cuerpo
;cuerpo else 22
BR /E23
E22: NOP
E23: NOP; fin if
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
adios1
hola2
10.12 Prueba 12
prueba112.cs
class clase{
num=4;
//num=0-3;
Compiladores 162
Grupo 98 C# Compiler
if (num==1)
console.write("num es igual a 1\n");
else if (num==2)
console.write("num es igual a 2\n");
else if (num==3)
console.write("num es igual a 3\n");
else if (num==4)
console.write("num es igual a 4\n");
else if (num==5)
console.write("num es igual a 5\n");
else
console.write("num es >5 o <1\n");
num=3;
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 6
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Compiladores 163
Grupo 98 C# Compiler
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 9
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 10
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 11
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 13
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 14
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 16
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 17
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 18
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 19
Operacion: TR_INICIO_WRITE_STRING
Compiladores 164
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 20
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 12
Tipo: TR_NUMERO Valor: 12
------------------------------------------------
Direccion: 21
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 22
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 24
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 25
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 26
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 14
Tipo: TR_NUMERO Valor: 14
------------------------------------------------
Direccion: 27
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 18
Tipo: TR_NUMERO Valor: 18
------------------------------------------------
Direccion: 29
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 14
Tipo: TR_NUMERO Valor: 14
------------------------------------------------
Direccion: 30
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 31
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Compiladores 165
Grupo 98 C# Compiler
Compiladores 166
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 44
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 30
Tipo: TR_NUMERO Valor: 30
------------------------------------------------
Direccion: 45
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 46
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 47
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 32
Tipo: TR_NUMERO Valor: 32
------------------------------------------------
Direccion: 48
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 49
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 20
Tipo: TR_NUMERO Valor: 20
------------------------------------------------
Direccion: 50
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 14
Tipo: TR_NUMERO Valor: 14
------------------------------------------------
Direccion: 51
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 52
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 53
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 54
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 55
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Compiladores 167
Grupo 98 C# Compiler
Direccion: 56
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 57
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 58
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 59
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 60
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 4
POP .R1
POP .R0
CMP .R0,.R1
BZ /E4
BR /E5
E4: MOVE #1,.R3;
E5: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
Compiladores 168
Grupo 98 C# Compiler
BZ /E2
MOVE .SP,.R2 ;incio write string
;cuerpo write string num es igual a 1\n
WRSTR /E6
BR /E7
E6: DATA "num es igual a 1\n"
E7: NOP ;fin cuerpo
;cuerpo else 2
BR /E3
E2: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;comp igual op 1 eti 10
POP .R1
POP .R0
CMP .R0,.R1
BZ /E10
BR /E11
E10: MOVE #1,.R3;
E11: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E8
MOVE .SP,.R2 ;incio write string
;cuerpo write string num es igual a 2\n
WRSTR /E12
BR /E13
E12: DATA "num es igual a 2\n"
E13: NOP ;fin cuerpo
;cuerpo else 8
BR /E9
E8: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;comp igual op 1 eti 16
POP .R1
POP .R0
CMP .R0,.R1
BZ /E16
BR /E17
E16: MOVE #1,.R3;
E17: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E14
MOVE .SP,.R2 ;incio write string
;cuerpo write string num es igual a 3\n
WRSTR /E18
BR /E19
Compiladores 169
Grupo 98 C# Compiler
Compiladores 170
Grupo 98 C# Compiler
Ejecución
num es igual a 4
10.13 Prueba 13
prueba113.cs
class clase{
num=4;
if (num==4) //verdadero
console.write("verdadero\n");
else
Compiladores 171
Grupo 98 C# Compiler
console.write("falso\n");
if (num>5) //falso
console.write("verdadero\n");
else
console.write("falso\n");
if (num<5) //verdadero
console.write("verdadero\n");
else
console.write("falso\n");
if (num!=4) //false
console.write("verdadero\n");
else
console.write("falso\n");
if (num>=4) //verdarero
console.write("verdadero\n");
else
console.write("falso\n");
if (num<=10) //verdarero
console.write("verdadero\n");
else
console.write("falso\n");
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 5
Compiladores 172
Grupo 98 C# Compiler
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 6
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 9
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 10
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 11
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 12
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 13
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 14
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 16
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 17
Operacion: TR_INICIO_IF
Compiladores 173
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 18
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 19
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 20
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 21
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 22
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 23
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 14
Tipo: TR_NUMERO Valor: 14
------------------------------------------------
Direccion: 24
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 25
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 26
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 27
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 28
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Compiladores 174
Grupo 98 C# Compiler
Compiladores 175
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 42
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 43
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 44
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 45
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 30
Tipo: TR_NUMERO Valor: 30
------------------------------------------------
Direccion: 46
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 47
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 48
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 32
Tipo: TR_NUMERO Valor: 32
------------------------------------------------
Direccion: 49
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 26
Tipo: TR_NUMERO Valor: 26
------------------------------------------------
Direccion: 50
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 51
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 52
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 53
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Compiladores 176
Grupo 98 C# Compiler
Direccion: 54
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Direccion: 55
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 56
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 38
Tipo: TR_NUMERO Valor: 38
------------------------------------------------
Direccion: 57
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Direccion: 58
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 59
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 40
Tipo: TR_NUMERO Valor: 40
------------------------------------------------
Direccion: 60
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Direccion: 61
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 62
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 63
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 64
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 65
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 42
Tipo: TR_NUMERO Valor: 42
------------------------------------------------
Direccion: 66
Compiladores 177
Grupo 98 C# Compiler
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 67
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 46
Tipo: TR_NUMERO Valor: 46
------------------------------------------------
Direccion: 68
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 42
Tipo: TR_NUMERO Valor: 42
------------------------------------------------
Direccion: 69
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 70
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 71
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 42
Tipo: TR_NUMERO Valor: 42
------------------------------------------------
Direccion: 72
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 73
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 74
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 75
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 76
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
Compiladores 178
Grupo 98 C# Compiler
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;comp igual op 1 eti 4
POP .R1
POP .R0
CMP .R0,.R1
BZ /E4
BR /E5
E4: MOVE #1,.R3;
E5: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E2
MOVE .SP,.R2 ;incio write string
;cuerpo write string verdadero\n
WRSTR /E6
BR /E7
E6: DATA "verdadero\n"
E7: NOP ;fin cuerpo
;cuerpo else 2
BR /E3
E2: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string falso\n
WRSTR /E8
BR /E9
E8: DATA "falso\n"
E9: NOP ;fin cuerpo
E3: NOP; fin if
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
;comp igual op 3 eti 12
POP .R1
POP .R0
CMP .R0,.R1
BZ /E13
BP /E12
BR /E13
E12: MOVE #1,.R3;
Compiladores 179
Grupo 98 C# Compiler
Compiladores 180
Grupo 98 C# Compiler
MOVE #4,.R0
PUSH .R0
;comp igual op 2 eti 28
POP .R1
POP .R0
CMP .R0,.R1
BNZ /E28
BR /E29
E28: MOVE #1,.R3;
E29: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E26
MOVE .SP,.R2 ;incio write string
;cuerpo write string verdadero\n
WRSTR /E30
BR /E31
E30: DATA "verdadero\n"
E31: NOP ;fin cuerpo
;cuerpo else 26
BR /E27
E26: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string falso\n
WRSTR /E32
BR /E33
E32: DATA "falso\n"
E33: NOP ;fin cuerpo
E27: NOP; fin if
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;comp igual op 5 eti 36
POP .R1
POP .R0
CMP .R0,.R1
BP /E36
BR /E37
E36: MOVE #1,.R3;
E37: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E34
MOVE .SP,.R2 ;incio write string
;cuerpo write string verdadero\n
WRSTR /E38
BR /E39
E38: DATA "verdadero\n"
E39: NOP ;fin cuerpo
;cuerpo else 34
BR /E35
E34: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string falso\n
WRSTR /E40
BR /E41
Compiladores 181
Grupo 98 C# Compiler
Ejecución
verdadero
falso
verdadero
Compiladores 182
Grupo 98 C# Compiler
falso
verdadero
verdadero
10.14 Prueba 14
prueba114.cs
class clase{
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 5
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 183
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 6
Operacion: TR_CONSOLE_READ
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 8
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 9
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 10
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 11
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 12
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 13
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 14
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 15
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 16
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 184
Grupo 98 C# Compiler
Direccion: 18
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E0:
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Escribe un numero:
WRSTR /E2
BR /E3
E2: DATA "Escribe un numero: "
E3: NOP ;fin cuerpo
;asignacion informativa
;console read
ININT .R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Has escrito un
WRSTR /E4
BR /E5
E4: DATA "Has escrito un "
E5: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E6
BR /E7
E6: DATA "\n"
E7: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
Compiladores 185
Grupo 98 C# Compiler
INICIO_PILA:
Ejecución
10.15 Prueba 15
prueba115.cs
class aritmetica{
if (b==1)
return a;
else if (b==0)
return 0;
else
return a+mulaux(a,b-1);
if (b==1)
return a;
else if (b>a)
return 0;
else
return 1+divaux(a-b,b);
}
Compiladores 186
Grupo 98 C# Compiler
else // b es negativo
return 0-divaux(a,0-b);
else // a es negativo
if (b>=0) // b es positivo
return 0-divaux(0-a,b);
else // b es negativo
return divaux(0-a,0-b);
}
}
class principal{
aritmetica o;
Console.Write("\tCALCULADORA\n");
Console.Write("Operacines:\n\n");
Console.Write("1 .. Multiplicar\n");
Console.Write("2 .. Dividir\n");
Console.Write("3 .. Resto\n");
Console.Write("4 .. Factorial\n");
Console.Write("\nIntroduzca la operacion: ");
op = Console.Read();
if (op==1)
n1=o.mul(n1,n2);
else if (op==2)
n1=o.div(n1,n2);
else if (op==3)
Compiladores 187
Grupo 98 C# Compiler
n1=o.mod(n1,n2);
else if (op==4)
n1=o.fact(n1);
else {
Console.Write("Operacion no definida\n");
op=0;
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 5
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 6
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 7
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 8
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Compiladores 188
Grupo 98 C# Compiler
Compiladores 189
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 21
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 22
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 23
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 24
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 25
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 26
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 28
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 29
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 30
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 31
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 32
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 190
Grupo 98 C# Compiler
Direccion: 33
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 34
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 7
Tipo: TR_NUMERO Valor: 7
------------------------------------------------
Direccion: 35
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 36
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 37
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 38
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 39
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 40
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 41
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 42
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 12
Tipo: TR_NUMERO Valor: 12
------------------------------------------------
Direccion: 43
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 44
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 45
Compiladores 191
Grupo 98 C# Compiler
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 46
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 47
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 48
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 49
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 50
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 51
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 52
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 53
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 54
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 55
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 56
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 57
Operacion: TR_METODO_RET
Compiladores 192
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 58
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 16
Tipo: TR_NUMERO Valor: 16
------------------------------------------------
Direccion: 59
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 60
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 61
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 62
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 63
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 64
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 65
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 66
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 67
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 68
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 69
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Compiladores 193
Grupo 98 C# Compiler
Compiladores 194
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 82
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 83
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 84
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 85
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 86
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 87
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 88
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 89
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 90
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 91
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 92
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 93
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 195
Grupo 98 C# Compiler
Direccion: 94
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 95
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 96
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 20
Tipo: TR_NUMERO Valor: 20
------------------------------------------------
Direccion: 97
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 98
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 99
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 100
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 101
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 102
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 103
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 104
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 105
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 106
Compiladores 196
Grupo 98 C# Compiler
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 107
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 108
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 109
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 110
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 111
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 20
Tipo: TR_NUMERO Valor: 20
------------------------------------------------
Direccion: 112
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 12
Tipo: TR_NUMERO Valor: 12
------------------------------------------------
Direccion: 113
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 114
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 24
Tipo: TR_NUMERO Valor: 24
------------------------------------------------
Direccion: 115
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 116
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 117
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 118
Operacion: TR_COMP_IGUAL
Compiladores 197
Grupo 98 C# Compiler
Compiladores 198
Grupo 98 C# Compiler
Compiladores 199
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 143
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 144
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 145
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 146
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 29
Tipo: TR_NUMERO Valor: 29
------------------------------------------------
Direccion: 147
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 25
Tipo: TR_NUMERO Valor: 25
------------------------------------------------
Direccion: 148
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 149
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 33
Tipo: TR_NUMERO Valor: 33
------------------------------------------------
Direccion: 150
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 151
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 152
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 153
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 154
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Compiladores 200
Grupo 98 C# Compiler
Direccion: 155
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 156
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 157
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 158
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 159
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 38
Tipo: TR_NUMERO Valor: 38
------------------------------------------------
Direccion: 160
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 161
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 162
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 163
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 164
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 165
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 166
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 167
Compiladores 201
Grupo 98 C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 24
Tipo: TR_NUMERO Valor: 24
------------------------------------------------
Direccion: 168
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 169
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 170
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 38
Tipo: TR_NUMERO Valor: 38
------------------------------------------------
Direccion: 171
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 172
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 173
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 174
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 175
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 176
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 177
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 178
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 179
Operacion: TR_REGISTRO_METODO
Compiladores 202
Grupo 98 C# Compiler
Compiladores 203
Grupo 98 C# Compiler
Compiladores 204
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 204
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 205
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 206
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 207
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 208
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 42
Tipo: TR_NUMERO Valor: 42
------------------------------------------------
Direccion: 209
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 210
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 211
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 212
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 213
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 214
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 215
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 205
Grupo 98 C# Compiler
Direccion: 216
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 217
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 218
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 219
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 220
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 24
Tipo: TR_NUMERO Valor: 24
------------------------------------------------
Direccion: 221
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 222
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 223
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 42
Tipo: TR_NUMERO Valor: 42
------------------------------------------------
Direccion: 224
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 34
Tipo: TR_NUMERO Valor: 34
------------------------------------------------
Direccion: 225
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 226
Operacion: TR_METODO
Tipo: TR_NUMERO Valor: 46
Tipo: TR_NUMERO Valor: 46
------------------------------------------------
Direccion: 227
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 228
Compiladores 206
Grupo 98 C# Compiler
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 229
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 230
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 231
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 232
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 233
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 234
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 235
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 236
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 237
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 33
Tipo: TR_NUMERO Valor: 33
------------------------------------------------
Direccion: 238
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 239
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 240
Operacion: TR_VALOR_VARIABLE
Compiladores 207
Grupo 98 C# Compiler
Compiladores 208
Grupo 98 C# Compiler
Compiladores 209
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 265
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 266
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 267
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 268
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 54
Tipo: TR_NUMERO Valor: 54
------------------------------------------------
Direccion: 269
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 270
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 271
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 54
Tipo: TR_NUMERO Valor: 54
------------------------------------------------
Direccion: 272
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 273
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 274
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 275
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 276
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 210
Grupo 98 C# Compiler
Direccion: 277
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 278
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 279
Operacion: TR_SUMA
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 280
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 281
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 282
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 283
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 47
Tipo: TR_NUMERO Valor: 47
------------------------------------------------
Direccion: 284
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 285
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 286
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 287
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 288
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 289
Compiladores 211
Grupo 98 C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 290
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 291
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 292
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 54
Tipo: TR_NUMERO Valor: 54
------------------------------------------------
Direccion: 293
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 294
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 295
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 60
Tipo: TR_NUMERO Valor: 60
------------------------------------------------
Direccion: 296
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 297
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 298
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 61
Tipo: TR_NUMERO Valor: 61
------------------------------------------------
Direccion: 299
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 300
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 63
Tipo: TR_NUMERO Valor: 63
------------------------------------------------
Direccion: 301
Operacion: TR_INICIO_WRITE_STRING
Compiladores 212
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 302
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 65
Tipo: TR_NUMERO Valor: 65
------------------------------------------------
Direccion: 303
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 304
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 67
Tipo: TR_NUMERO Valor: 67
------------------------------------------------
Direccion: 305
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 306
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 69
Tipo: TR_NUMERO Valor: 69
------------------------------------------------
Direccion: 307
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 308
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 71
Tipo: TR_NUMERO Valor: 71
------------------------------------------------
Direccion: 309
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 310
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 73
Tipo: TR_NUMERO Valor: 73
------------------------------------------------
Direccion: 311
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 312
Operacion: TR_CONSOLE_READ
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 313
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 2
Compiladores 213
Grupo 98 C# Compiler
Compiladores 214
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 326
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 327
Operacion: TR_CONSOLE_READ
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 328
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 329
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 77
Tipo: TR_NUMERO Valor: 77
------------------------------------------------
Direccion: 330
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 77
Tipo: TR_NUMERO Valor: 77
------------------------------------------------
Direccion: 331
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 332
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 333
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 334
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 335
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 83
Tipo: TR_NUMERO Valor: 83
------------------------------------------------
Direccion: 336
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 337
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 215
Grupo 98 C# Compiler
Direccion: 338
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 339
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 340
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 341
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 342
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 343
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 344
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 345
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 346
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 347
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 348
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 349
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 83
Tipo: TR_NUMERO Valor: 83
------------------------------------------------
Direccion: 350
Compiladores 216
Grupo 98 C# Compiler
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 351
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 352
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 353
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 354
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 87
Tipo: TR_NUMERO Valor: 87
------------------------------------------------
Direccion: 355
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 356
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 357
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 358
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 359
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 360
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 361
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 362
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Compiladores 217
Grupo 98 C# Compiler
Compiladores 218
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 375
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 376
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 377
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 378
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 379
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 380
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 381
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 382
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 46
Tipo: TR_NUMERO Valor: 46
------------------------------------------------
Direccion: 383
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 384
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 385
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 386
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
Compiladores 219
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 387
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 91
Tipo: TR_NUMERO Valor: 91
------------------------------------------------
Direccion: 388
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 389
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 390
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 391
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 392
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 95
Tipo: TR_NUMERO Valor: 95
------------------------------------------------
Direccion: 393
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 394
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 395
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 396
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 397
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 398
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 220
Grupo 98 C# Compiler
Direccion: 399
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 400
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO Valor: 47
Tipo: TR_NUMERO Valor: 47
------------------------------------------------
Direccion: 401
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 402
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 403
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 404
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 405
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO Valor: 95
Tipo: TR_NUMERO Valor: 95
------------------------------------------------
Direccion: 406
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 407
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 99
Tipo: TR_NUMERO Valor: 99
------------------------------------------------
Direccion: 408
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 409
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 410
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 411
Compiladores 221
Grupo 98 C# Compiler
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 95
Tipo: TR_NUMERO Valor: 95
------------------------------------------------
Direccion: 412
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 91
Tipo: TR_NUMERO Valor: 91
------------------------------------------------
Direccion: 413
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 87
Tipo: TR_NUMERO Valor: 87
------------------------------------------------
Direccion: 414
Operacion: TR_FIN_IF
Tipo: TR_NUMERO Valor: 83
Tipo: TR_NUMERO Valor: 83
------------------------------------------------
Direccion: 415
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 416
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 417
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 418
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 419
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO Valor: 101
Tipo: TR_NUMERO Valor: 101
------------------------------------------------
Direccion: 420
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 421
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 422
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 105
Tipo: TR_NUMERO Valor: 105
------------------------------------------------
Direccion: 423
Operacion: TR_WRITE_SHORT
Compiladores 222
Grupo 98 C# Compiler
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
Compiladores 223
Grupo 98 C# Compiler
Compiladores 224
Grupo 98 C# Compiler
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
Compiladores 225
Grupo 98 C# Compiler
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
E8: NOP; fin if
E4: NOP; fin if
MOVE .IY,.SP
RET
E11: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 5 eti 14
POP .R1
POP .R0
CMP .R0,.R1
BP /E14
BR /E15
E14: MOVE #1,.R3;
E15: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E12
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 5 eti 18
POP .R1
POP .R0
CMP .R0,.R1
BP /E18
BR /E19
E18: MOVE #1,.R3;
E19: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E16
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
Compiladores 226
Grupo 98 C# Compiler
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
;cuerpo else 16
BR /E17
E16: NOP
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
Compiladores 227
Grupo 98 C# Compiler
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
Compiladores 228
Grupo 98 C# Compiler
MOVE .IY,.SP
RET
E17: NOP; fin if
;cuerpo else 12
BR /E13
E12: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 5 eti 22
POP .R1
POP .R0
CMP .R0,.R1
BP /E22
BR /E23
E22: MOVE #1,.R3;
E23: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E20
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
Compiladores 229
Grupo 98 C# Compiler
Compiladores 230
Grupo 98 C# Compiler
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E2
CALL /E2
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
E21: NOP; fin if
E13: NOP; fin if
MOVE .IY,.SP
RET
E24: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
Compiladores 231
Grupo 98 C# Compiler
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 27
POP .R1
POP .R0
CMP .R0,.R1
BZ /E27
BR /E28
E27: MOVE #1,.R3;
E28: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E25
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 25
BR /E26
E25: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;comp igual op 3 eti 31
POP .R1
POP .R0
CMP .R0,.R1
BZ /E32
BP /E31
BR /E32
E31: MOVE #1,.R3;
E32: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E29
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 29
BR /E30
E29: NOP
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
Compiladores 232
Grupo 98 C# Compiler
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E24
CALL /E24
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
Compiladores 233
Grupo 98 C# Compiler
Compiladores 234
Grupo 98 C# Compiler
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E24
CALL /E24
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
;cuerpo else 38
BR /E39
E38: NOP
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
Compiladores 235
Grupo 98 C# Compiler
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E24
CALL /E24
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
Compiladores 236
Grupo 98 C# Compiler
RET
E39: NOP; fin if
;cuerpo else 34
BR /E35
E34: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 5 eti 44
POP .R1
POP .R0
CMP .R0,.R1
BP /E44
BR /E45
E44: MOVE #1,.R3;
E45: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E42
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
Compiladores 237
Grupo 98 C# Compiler
Compiladores 238
Grupo 98 C# Compiler
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E24
CALL /E24
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
RET
E43: NOP; fin if
E35: NOP; fin if
MOVE .IY,.SP
RET
E46: NOP ;metodo
MOVE .SP,.IY;metodo
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
Compiladores 239
Grupo 98 C# Compiler
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E33
CALL /E33
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
Compiladores 240
Grupo 98 C# Compiler
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E11
CALL /E11
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E47: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
Compiladores 241
Grupo 98 C# Compiler
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 4 eti 50
POP .R1
POP .R0
CMP .R0,.R1
BN /E50
BR /E51
E50: MOVE #1,.R3;
E51: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E48
MOVE .SP,.R2 ;incio write string
;cuerpo write string ERROR: factorial negativo
WRSTR /E52
BR /E53
E52: DATA "ERROR: factorial negativo"
E53: NOP ;fin cuerpo
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 48
BR /E49
E48: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 1 eti 56
POP .R1
POP .R0
CMP .R0,.R1
BZ /E56
BR /E57
E56: MOVE #1,.R3;
E57: NOP; fin comp igual
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 58
POP .R1
POP .R0
CMP .R0,.R1
BZ /E58
BR /E59
E58: MOVE #1,.R3;
E59: NOP; fin comp igual
Compiladores 242
Grupo 98 C# Compiler
;cuerpo if
CMP #0,.R3
BZ /E54
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 54
BR /E55
E54: NOP
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
Compiladores 243
Grupo 98 C# Compiler
Compiladores 244
Grupo 98 C# Compiler
RET
E55: NOP; fin if
E49: NOP; fin if
MOVE .IY,.SP
RET
E60: NOP ;clase
E0:
MOVE .SP,.IY;metodo
MOVE .SP,.R2 ;incio write string
;cuerpo write string \tCALCULADORA\n
WRSTR /E61
BR /E62
E61: DATA "\tCALCULADORA\n"
E62: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string Operacines:\n\n
WRSTR /E63
BR /E64
E63: DATA "Operacines:\n\n"
E64: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string 1 .. Multiplicar\n
WRSTR /E65
BR /E66
E65: DATA "1 .. Multiplicar\n"
E66: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string 2 .. Dividir\n
WRSTR /E67
BR /E68
E67: DATA "2 .. Dividir\n"
E68: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string 3 .. Resto\n
WRSTR /E69
BR /E70
E69: DATA "3 .. Resto\n"
E70: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string 4 .. Factorial\n
WRSTR /E71
BR /E72
E71: DATA "4 .. Factorial\n"
E72: NOP ;fin cuerpo
MOVE .SP,.R2 ;incio write string
;cuerpo write string \nIntroduzca la operacion:
WRSTR /E73
BR /E74
E73: DATA "\nIntroduzca la operacion: "
E74: NOP ;fin cuerpo
;asignacion informativa
;console read
ININT .R0
PUSH .R0
;asignacion pos 2
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#2[.IX]
MOVE .SP,.R2 ;incio write string
;cuerpo write string Introduzca el Operando1:
WRSTR /E75
Compiladores 245
Grupo 98 C# Compiler
BR /E76
E75: DATA "Introduzca el Operando1: "
E76: NOP ;fin cuerpo
;asignacion informativa
;console read
ININT .R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;comp igual op 2 eti 79
POP .R1
POP .R0
CMP .R0,.R1
BNZ /E79
BR /E80
E79: MOVE #1,.R3;
E80: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E77
MOVE .SP,.R2 ;incio write string
;cuerpo write string Introduzca el Operando2:
WRSTR /E81
BR /E82
E81: DATA "Introduzca el Operando2: "
E82: NOP ;fin cuerpo
;asignacion informativa
;console read
ININT .R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#1[.IX]
;cuerpo else 77
BR /E78
E77: NOP
E78: NOP; fin if
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 85
POP .R1
POP .R0
CMP .R0,.R1
BZ /E85
Compiladores 246
Grupo 98 C# Compiler
BR /E86
E85: MOVE #1,.R3;
E86: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E83
;asignacion informativa
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #0,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E11
CALL /E11
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
Compiladores 247
Grupo 98 C# Compiler
Compiladores 248
Grupo 98 C# Compiler
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #0,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E33
CALL /E33
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;cuerpo else 87
BR /E88
E87: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;comp igual op 1 eti 93
POP .R1
POP .R0
CMP .R0,.R1
BZ /E93
BR /E94
E93: MOVE #1,.R3;
E94: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E91
;asignacion informativa
Compiladores 249
Grupo 98 C# Compiler
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 2
MOVE .SP,.R0
ADD #2,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #0,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E46
CALL /E46
DEC .SP
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
Compiladores 250
Grupo 98 C# Compiler
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;cuerpo else 91
BR /E92
E91: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;comp igual op 1 eti 97
POP .R1
POP .R0
CMP .R0,.R1
BZ /E97
BR /E98
E97: MOVE #1,.R3;
E98: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E95
;asignacion informativa
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
PUSH .R1
PUSH .R2
PUSH .R3
PUSH .R4
PUSH .R5
PUSH .R6
PUSH .R7
PUSH .R8
PUSH .R9
;fin de guardar estado
MOVE .SP,.R2 ;incio argumentos
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
MOVE .R2,.SP ;fin argumentos
;Crear registro metodo tamano 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
;activar registro clase
MOVE #-2[.IY],.R0
ADD #0,.R0
PUSH .A
;Salto a metodo misma clase etiqueta E47
CALL /E47
DEC .SP
Compiladores 251
Grupo 98 C# Compiler
POP .SP
;restaurar estado
POP .R9
POP .R8
POP .R7
POP .R6
POP .R5
POP .R4
POP .R3
POP .R2
POP .R1
POP .A
POP .IY
POP .IX
POP .SR
POP .SP
;fin de restaurar estado
;valor devuelto
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;cuerpo else 95
BR /E96
E95: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string Operacion no definida\n
WRSTR /E99
BR /E100
E99: DATA "Operacion no definida\n"
E100: NOP ;fin cuerpo
;asignacion informativa
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;asignacion pos 2
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#2[.IX]
E96: NOP; fin if
E92: NOP; fin if
E88: NOP; fin if
E84: NOP; fin if
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
;comp igual op 2 eti 103
POP .R1
POP .R0
CMP .R0,.R1
BNZ /E103
Compiladores 252
Grupo 98 C# Compiler
BR /E104
E103: MOVE #1,.R3;
E104: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E101
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Resultado:
WRSTR /E105
BR /E106
E105: DATA "Resultado: "
E106: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string \n
WRSTR /E107
BR /E108
E107: DATA "\n"
E108: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
;cuerpo else 101
BR /E102
E101: NOP
E102: NOP; fin if
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 0
MOVE .SP,.R0
ADD #0,.SP
MOVE .A,.SP
;Crear registro metodo tamano 3
MOVE .SP,.R0
ADD #3,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
CALCULADORA
Operacines:
1 .. Multiplicar
2 .. Dividir
3 .. Resto
Compiladores 253
Grupo 98 C# Compiler
4 .. Factorial
Introduzca la operacion: 4
Introduzca el Operando1: 7
Resultado: 5040
10.16 Prueba 16
prueba116.cs
class clase{
short numero1;
short [] v = new short [10];
v[4]=3;
numero1=v[4];
w[2]=v[4];
w[2]=numero1;
w[2]=6;
Console.Write("Resultados: v[4]={0},
numero1={1}\n",v[4],numero1);
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Compiladores 254
Grupo 98 C# Compiler
Tipo: TR_NADA
------------------------------------------------
Direccion: 4
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 5
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 8
Operacion: TR_ASIGNACION_VECTOR
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 9
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 11
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 12
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 13
Operacion: TR_VALOR_VARIABLE_VECTOR
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 14
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 15
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores 255
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 16
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 17
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 18
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 19
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 20
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 21
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 22
Operacion: TR_VALOR_VARIABLE_VECTOR
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 23
Operacion: TR_ASIGNACION_VECTOR
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 24
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 25
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 26
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores 256
Grupo 98 C# Compiler
Direccion: 28
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 29
Operacion: TR_ASIGNACION_VECTOR
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 30
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 31
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 32
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 33
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 34
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 35
Operacion: TR_ASIGNACION_VECTOR
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 36
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 37
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 38
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 39
Operacion: TR_FIN_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 40
Compiladores 257
Grupo 98 C# Compiler
Operacion: TR_VALOR_VARIABLE_VECTOR
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 41
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 42
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 43
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 44
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 45
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 49
Tipo: TR_NUMERO Valor: 49
------------------------------------------------
Direccion: 46
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 47
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 48
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 49
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 50
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 5
Tipo: TR_NUMERO Valor: 5
------------------------------------------------
Direccion: 51
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 11
Tipo: TR_NUMERO Valor: 11
------------------------------------------------
Direccion: 52
Operacion: TR_FIN_PROGRAMA
Compiladores 258
Grupo 98 C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
E0:
MOVE .SP,.IY;metodo
;inicio vector
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;Fin vector
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion vector pos 1
POP .R0
MOVE #-3[.IY],.IX
POP .A
ADD #1,.A
ADD .IX,.A
MOVE .R0,[.A]
;asignacion informativa
;inicio vector
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;Fin vector
;valor de variable vector
MOVE #-3[.IY],.IX
POP .A
ADD #1,.A
ADD .IX,.A
MOVE [.A],.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;inicio vector
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;Fin vector
;asignacion informativa
;inicio vector
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;Fin vector
;valor de variable vector
MOVE #-3[.IY],.IX
POP .A
ADD #1,.A
Compiladores 259
Grupo 98 C# Compiler
ADD .IX,.A
MOVE [.A],.R0
PUSH .R0
;asignacion vector pos 0
POP .R0
MOVE #-2[.IY],.IX
POP .A
ADD #0,.A
ADD .IX,.A
MOVE .R0,[.A]
;inicio vector
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;Fin vector
;asignacion informativa
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;asignacion vector pos 0
POP .R0
MOVE #-2[.IY],.IX
POP .A
ADD #0,.A
ADD .IX,.A
MOVE .R0,[.A]
;inicio vector
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;Fin vector
;asignacion informativa
;valor inmediato 6
MOVE #6,.R0
PUSH .R0
;asignacion vector pos 0
POP .R0
MOVE #-2[.IY],.IX
POP .A
ADD #0,.A
ADD .IX,.A
MOVE .R0,[.A]
MOVE .SP,.R2 ;incio write string
;inicio vector
;valor inmediato 4
MOVE #4,.R0
PUSH .R0
;Fin vector
;valor de variable vector
MOVE #-3[.IY],.IX
POP .A
ADD #1,.A
ADD .IX,.A
MOVE [.A],.R0
PUSH .R0
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Resultados: v[4]=
Compiladores 260
Grupo 98 C# Compiler
WRSTR /E2
BR /E3
E2: DATA "Resultados: v[4]="
E3: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string , numero1=
WRSTR /E4
BR /E5
E4: DATA ", numero1="
E5: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E6
BR /E7
E6: DATA "\n"
E7: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
MOVE .IY,.SP
RET
SALTO:
;Crear registro clase tamano 5
MOVE .SP,.R0
ADD #5,.SP
MOVE .A,.SP
;Crear registro metodo tamano 11
MOVE .SP,.R0
ADD #11,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecución
10.17 Prueba 17
prueba117.cs
class clase{
short numero4=1;
short numero1=1,numero2=2;
short numero3=3;
Console.Write("Resultados: numero1={0}\n",numero1);
Console.Write("Resultados: numero2={0}\n",numero2);
Console.Write("Resultados: numero3={0}\n",numero3);
Compiladores 261
Grupo 98 C# Compiler
}
}
salida.ter
------------------------------------------------
Direccion: 0
Operacion: TR_INICIO_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 1
Operacion: TR_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 2
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 3
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 4
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 5
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 6
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 7
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 8
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 9
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 10
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
Compiladores 262
Grupo 98 C# Compiler
------------------------------------------------
Direccion: 11
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 12
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 13
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 14
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 15
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 16
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 0
Tipo: TR_NUMERO Valor: 0
------------------------------------------------
Direccion: 17
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 18
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 19
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 4
Tipo: TR_NUMERO Valor: 4
------------------------------------------------
Direccion: 20
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 21
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 22
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Compiladores 263
Grupo 98 C# Compiler
Direccion: 23
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 6
Tipo: TR_NUMERO Valor: 6
------------------------------------------------
Direccion: 24
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 25
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 8
Tipo: TR_NUMERO Valor: 8
------------------------------------------------
Direccion: 26
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 27
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 28
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO Valor: 2
Tipo: TR_NUMERO Valor: 2
------------------------------------------------
Direccion: 29
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 10
Tipo: TR_NUMERO Valor: 10
------------------------------------------------
Direccion: 30
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO Valor: 48
Tipo: TR_NUMERO Valor: 48
------------------------------------------------
Direccion: 31
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO Valor: 12
Tipo: TR_NUMERO Valor: 12
------------------------------------------------
Direccion: 32
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 33
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 34
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Direccion: 35
Compiladores 264
Grupo 98 C# Compiler
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO Valor: 1
Tipo: TR_NUMERO Valor: 1
------------------------------------------------
Direccion: 36
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO Valor: 3
Tipo: TR_NUMERO Valor: 3
------------------------------------------------
Direccion: 37
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
;asignacion informativa
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 2
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#2[.IX]
MOVE .SP,.R2 ;incio write string
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
Compiladores 265
Grupo 98 C# Compiler
Compiladores 266
Grupo 98 C# Compiler
INICIO_PILA:
Ejecución
Resultados: numero1=1
Resultados: numero2=2
Resultados: numero3=3
10.18 Prueba 18
Esta prueba se encarga de tratar un error sintactico. Dicho error se detecta cuando
encontramos la declaracion de un atributo en el que hemos incluido el metodo especial
get y, sin embargo, no el set.
prueba1.cs
class clase{
short numero3;
void metodo1() {
console.write("Estoy en el metodo1\n");
}
short atributo{
get
{
numero3=2;
}
}
short numero1;
short numero2;
metodo1();
console.write("hola\n");
numero1=4;
numero2=5-2+3-7; //=-1
numero3=6;
numero1=numero3;
numero1=numero2+5-1; //=3
numero3=2-numero3-numero2+numero1+5; //=2-6-(-1)+3+5=5
console.write("n1: {0}\nn2: {1}\nn3: {2}\n",numero1,numero2,
numero3);
console.write("adios\n");
}
}
Línea de comandos
Compiladores 267
Grupo 98 C# Compiler
10.19 Prueba 19
En esta prueba podemos observar que se produce un error de tipo semántico debido a la
asignación. Se intenta asignar un string a una variable de tipo short, y eso no es
correcto.
prueba2.cs
class clase{
short numero3;
short numero1;
short numero2;
console.write("hola\n");
numero1="hola"; //n1=4
numero2=3; //n2=3
numero1+=3+1; //n1=8
numero1-=5-numero2; // =n1=8-2=6
console.write("n1: {0}\n",numero1);
console.write("adios\n");
}
}
Línea de comandos
Compiladores 268
Grupo 98 C# Compiler
10.20 Prueba 20
Esta prueba detecta que no se permiten shorts con rango superior a 65535. En caso de
serlo, se produce un error léxico.
prueba3.cs
class clase{
short numero3=66666666;
void metodo1() {
console.write("Estoy en el metodo1\n");
}
void metodo2() {
console.write("Estoy en el metodo2\n");
}
n1=5;
metodo1();
n1+=3;
console.write("Estoy en Main {0}\n",n1);
metodo2();
}
}
Línea de comandos
10.21 Prueba 21
Esta prueba simplemente detecta que no existe un metodo main, o que si existe no tiene
los campos public y static necesarios.
prueba4.cs
Compiladores 269
Grupo 98 C# Compiler
class clase{
short numero3;
short metodo1() {
console.write("Estoy en el metodo1\n");
numero3=10;
return 5+numero3;
}
n1=metodo1();
console.write("Estoy en main {0}\n",n1);
n1=3+metodo1()+1;
console.write("Sigo en main {0}\n",n1);
}
}
Línea de comandos
10.22 Prueba 22
Esta prueba demuestra que el compilador controla si el metodo declarado debe devolver
algo o no. En caso se ser de tipo void, el compilador permite poner return o no.
prueba5.cs
class clase{
short num;
Compiladores 270
Grupo 98 C# Compiler
}
}
Línea de comandos
10.23 Prueba 23
prueba6.cs
class prueba {
console.write("Estoy en Metodo1\n");
return numero1;
}
}
class clase{
short s1;
prueba p1;
p1.numero1=5;
s1=p1.numero1;
p1.numero1 = value;
}
}
class clase2{
short s1;
prueba p1;
Compiladores 271
Grupo 98 C# Compiler
Línea de comandos
10.24 Prueba 24
Esta prueba, algo mas compleja, nos comprueba que efectivamente, cada objeto
instanciado de una clase, si sus variables no estan inicializadas, en dicho objeto tampoco
lo estaran. Por lo que, si se utilizan en una asignación, el compilador generará un error.
prueba7.cs
class prueba {
console.write("Estoy en Metodo1\n");
return numero1;
}
}
class clase{
short s1;
prueba p1;
p1.numero1=5;
s1=p1.numero1;
}
}
class clase2{
Compiladores 272
Grupo 98 C# Compiler
short s1;
prueba p1;
Línea de comandos
10.25 Prueba 25
Esta prueba se encarga de demostrar que el compilador revisa cada elemento asignado a
una variable lista, verificando si todos los elementos son del mismo tipo que la propia
variable lista. En este caso, intentamos insertar “hola” en una lista de shorts.
prueba8.cs
class clase{
short numero1;
short [] v = new short [10];
v[4]=3;
v = {5,"hola"};
numero1=v[4];
w[2]=v[4]; //da error sintactico que no deberia
w[2]=numero1; //da error sintactico que no deberia
w[2]=6; //da error sintactico que no deberia
Console.Write("Resultados: v[4]={0},
numero1={1}\n",v[4],numero1);
Compiladores 273
Grupo 98 C# Compiler
Línea de comandos
Compiladores 274
Grupo 98 C# Compiler
11 Anexo
Características Implementadas en el Generador de código:
Compiladores 275
Grupo 98 C# Compiler
12 Bibliografía
Apuntes de Compiladores, Grupo 41M, Cuarto Curso. Facultad de Informática
Universidad Politécnica de Madrid
Compiladores 276