Академический Документы
Профессиональный Документы
Культура Документы
Ejercicio de Implementacin
Compiladores
Entrega Final
Grupo 98
Santiago Gonzlez Tortosa
Germn Ramos Garca
Alberto Fernndez Recio
sgt_fi@yahoo.es
g990189@zipi.fi.upm.es
afr@iespana.es
Grupo 98
C# Compiler
NDICE
1
INTRODUCCIN..............................................................................................................................4
ANALIZADOR LXICO..................................................................................................................6
2.1
2.2
2.2.1
Autmata...............................................................................................................................8
2.2.2
Flex......................................................................................................................................10
TABLA DE SMBOLOS..................................................................................................................13
3.1
DISEO......................................................................................................................................13
3.2
IMPLEMENTACIN.....................................................................................................................14
3.3
EJEMPLO....................................................................................................................................16
ANALIZADOR SINTCTICO......................................................................................................18
4.1
GRAMTICA..............................................................................................................................19
4.2
IMPLEMENTACIN.....................................................................................................................22
ANALIZADOR SEMNTICO.......................................................................................................23
5.1
COMPROBACIN DE TIPOS........................................................................................................23
5.2
EL MODULO TERCETOS..........................................................................................................28
6.2
EL MDULO INTERMEDIO......................................................................................................33
GENERADOR DE ERRORES.......................................................................................................46
PROGRAMA PRINCIPAL.............................................................................................................49
10
PRUEBAS.........................................................................................................................................50
10.1
PRUEBA 1..................................................................................................................................50
10.2
PRUEBA 2..................................................................................................................................61
10.3
PRUEBA 3..................................................................................................................................66
10.4
PRUEBA 4..................................................................................................................................73
10.5
PRUEBA 5..................................................................................................................................82
10.6
PRUEBA 6..................................................................................................................................91
10.7
PRUEBA 7................................................................................................................................104
Compiladores
Grupo 98
C# Compiler
10.8
PRUEBA 8................................................................................................................................119
10.9
PRUEBA 9................................................................................................................................141
10.10
PRUEBA 10..............................................................................................................................150
10.11
PRUEBA 11..............................................................................................................................154
10.12
PRUEBA 12..............................................................................................................................162
10.13
PRUEBA 13..............................................................................................................................171
10.14
PRUEBA 14..............................................................................................................................183
10.15
PRUEBA 15..............................................................................................................................186
10.16
PRUEBA 16..............................................................................................................................254
10.17
PRUEBA 17..............................................................................................................................261
10.18
PRUEBA 18..............................................................................................................................267
10.19
PRUEBA 19..............................................................................................................................268
10.20
PRUEBA 20..............................................................................................................................269
10.21
PRUEBA 21..............................................................................................................................270
10.22
PRUEBA 22..............................................................................................................................270
10.23
PRUEBA 23..............................................................................................................................271
10.24
PRUEBA 24..............................................................................................................................272
10.25
PRUEBA 25..............................................................................................................................273
11
ANEXO...........................................................................................................................................275
12
BIBLIOGRAFA............................................................................................................................276
Compiladores
Grupo 98
C# Compiler
1 Introduccin
Una compilacin es una simple traduccin que convierte un programa escrito en un
lenguaje, llamado fuente, a un programa equivalente en otro lenguaje, llamado objeto.
Las tcnicas para compilar son independientes del lenguaje fuente y objeto, es decir,
siempre es la misma.
El compilador se divide en las siguientes fases:
Analizador Lxico (AL): Lee todos los caracteres del fichero fuente y crea los
tokens oportunos, para pasrselos al analizador sintctico.
Junto con estas fases, debemos incluir el tratamiento de errores (gestor de errores) y la
tabla de smbolos.
Gestor de errores (GE): Captura y enva por pantalla todos los errores detectados
en cada una de las fases anteriores.
Compiladores
Grupo 98
C# Compiler
TS
PF
LF
AL
token
arbol
AS
ASE
sintactico
arbol. sint.
anotado
GCI
LI
OC
LI
GCF
LO
PO
Optimizado
GE
Compiladores
Grupo 98
C# Compiler
2 Analizador Lxico
En primer lugar, y antes de explicar el diseo de un analizador lxico, comentar una
serie de conceptos:
Una vez claros estos conceptos, podemos definir un analizador lxico como el
analizador que pasa de un fichero lleno de caracteres a un conjunto de tokens que ira
pasando al analizador sintctico (uno a uno). Las funciones del analizador lxico, pues,
son:
Utilizando, pues, una Gramtica Regular (de tipo 3), y transformndola en un autmata
finito determinista, podemos detectar palabras del lenguaje del fichero fuente.
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
Los smbolos auxiliares utilizados son los siguientes:
Regla S: a y del
o a: letras, @ o _ (primer carcter de un identificador).
o del: delimitadores (espacios, tabuladores...).
Regla G: oc
o oc: otro carcter salvo el de fin de fichero,nueva lnea y comillas () (los string
ocupan una sla lnea).
Regla H: l,d
o l: letras maysculas y minsculas.
o d: dgitos.
Regla I: oc1,nl
o oc1: otro carcter salvo nueva lnea (comentarios // de una sla lnea).
o nl: carcter de nueva lnea.
Regla J: oc2
o oc2: Otro carcter salvo el * y fin de fichero.
Regla K: oc3
o oc3: Otro carcter salvo * , / y fin de fichero
Regla P: a
o a: Mismo valor de la regla S.
Regla R: el smbolo X es no terminal ya que podemos encontrarnos con 0x o 0X.
Regla T: dx
o dx: Dgitos hexadecimales.
Se puede observar que es una gramtica ambigua y sabemos que los analizadores
lxicos no pueden trabajar con gramticas de estas caractersticas. Al construir el
autmata finito y el analizador lxico se utilizarn diversas tcnicas para evitar
cualquier tipo de ambigedad en el reconocimiento de los tokens.
Compiladores
Grupo 98
C# Compiler
Autmata
Acciones semnticas
Compiladores
Grupo 98
C# Compiler
Accin Semntica
L
2-3
2-4
5-4
5-6
10-11
12-13
14-15
16-17
-----C
16-18
24-26
25-26
19-20
22-23
---
Compiladores
Acciones
Si
n = ( GENERAR_TOKEN (PAA,_)
Si
n = ) GENERAR_TOKEN (PAC,_)
Si
n = { GENERAR_TOKEN (LLA,_)
Si
n = } GENERAR_TOKEN (LLC,_)
Si
n = [ GENERAR_TOKEN (CA,_)
Si
n = ] GENERAR_TOKEN (CC,_)
Si
n = ; GENERAR_TOKEN (DPC,_)
Si
n = , GENERAR_TOKEN (DC,_)
Si
n = . GENERAR_TOKEN (OP,_)
Si
n = + GENERAR_TOKEN (OA,1)
Si
n = - GENERAR_TOKEN (OA,2)
Si
n = * GENERAR_TOKEN (OA,3)
Si
n = % GENERAR_TOKEN (OA,5)
Si
n = += GENERAR_TOKEN (AO,1)
Si
n = -= GENERAR_TOKEN (AO,2)
Si
n = *= GENERAR_TOKEN (AO,3)
Si
n = %= GENERAR_TOKEN (AO,5)
GENERAR_TOKEN (AO,4)
GENERAR_TOKEN (OA,4)
GENERAR_TOKEN (OL,1)
GENERAR_TOKEN (OL,2)
GENERAR_TOKEN (ST,n)
Si
n = ! GENERAR_TOKEN (OL,3)
Si
n = > GENERAR_TOKEN (OL,4)
Si
n = < GENERAR_TOKEN (OL,5)
Si
n = = GENERAR_TOKEN (OAS,_)
Si
n = != GENERAR_TOKEN (OL,9)
Si
n = >= GENERAR_TOKEN (OL,8)
Si
n = <= GENERAR_TOKEN (OL,7)
Si
n = == GENERAR_TOKEN (OL,6)
Si n = Palabra_Reservada
GENERAR_TOKEN (PR,n)
En otro caso:
p := BUSCA (n)
Si p = NULL
p := AADE (n)
GENERAR_TOKEN (ID,p)
GENERAR_TOKEN (CE,n)
GENERAR_TOKEN (CE,n)
Grupo 98
2.2.2
C# Compiler
Flex
Compiladores
10
Grupo 98
C# Compiler
<LLA, ->
<LLC, ->
<OL, ptr(tabla)>
<CE, valor>
<AO, ptr(tabla)>
<CA, ->
<CC, ->
<OP, -)>
<OC, ptr(tabla)>
<ST, ptr(tabla)>
<ID, ptr(tabla)>
<DPC, ->
<DC, ->
<IC, ->
<FC, ->
<EOF, ->
<CCR, ->
<CCW, ->
Elemento
+
*
/
%
Elemento
&&
||
!
>
<
==
<=
>=
!=
Elemento
+=
-=
*=
/=
11
Grupo 98
C# Compiler
5
6
7
%=
++
--
Compiladores
Elemento
IF
ELSE
RETURN
TRUE
FALSE
VOID
STRING
SHORT
BOOL
CLASS
REF
NEW
PUBLIC
PRIVATE
STATIC
SET
GET
VALUE
PARAMS
12
Grupo 98
C# Compiler
3 Tabla de Smbolos
3.1 Diseo
El Diseo de la tabla de smbolos se ha realizado utilizando una metodologa
estructurada. Para ello, primero definimos la estructura de la tabla de smbolos:
Una tabla de smbolos es un conjunto de elementos ordenados de una forma concreta,
en nuestro caso, utilizando listas doblemente enlazadas. Dichos elementos pueden ser:
La estructura de los parmetros consiste en una lista enlazada de parmetros, los cuales
contienen campos: tipo del parmetro y el paso del parmetro, es decir, por valor (1) o
por referencia (2).
Compiladores
13
Grupo 98
C# Compiler
3.2 Implementacin
El modulo implementado es tsimbolos, el cual permite la siguiente interfaz de usuario:
TS *Crear_Tabla(TS* padre);
Inserta el tipo del valor devuelto del elemento de una tabla de smbolos. Por tanto,
dicho lexema debe ser un metodo.
En la mayora de las funciones de este tipo, devolvern 0 si todo ha salido bien y -1 en caso contrario.
Compiladores
14
Grupo 98
C# Compiler
Nos indica si el elemento de la tabla de smbolos esta inicializado con valor o no.
Nos devuelve el tipo del valor devuelto del elemento de una tabla de smbolos
determinada. Por tanto, dicho elemento debe ser un metodo.
TS *Padre(TS *tabla);
Compiladores
15
Grupo 98
C# Compiler
3.3 Ejemplo
A continuacin, para comprobar el funcionamiento de la Tabla de Smbolos, incluimos
el cdigo de la funcin main.cpp con su correspondiente solucin.
#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");
Insertar_Lexema(t,"numero1",SHORT); //No lo inserta por repetido
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
------------------------------------------------
Compiladores
16
Grupo 98
C# Compiler
LEXEMA: identificador1
Tipo: STRING
Valor: 1
-----------------------------------------------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 Sintctico
Dado un conjunto de Tokens (dado por el analizador lxico), el analizador sintctico
debe, utilizando una gramtica de tipo LL(1), generar un Autmata Finito No
Determinista (AFN), realizar un recorrido descendente recursivo y generar un rbol
sintctico.
Se define una gramtica de tipo LL(1) como la gramtica que cumple las siguientes
propiedades:
Dado A = ||. Se debe cumplir que:
first() . first() = {} .
first() . first() = {} .
first() . first() = {}.
Dado A =(|). Se debe cumplir que:
first() . first() = {}
Dado A =(|). Se debe cumplir que:
first() . follow(A) = {}
FIRST(X)
Si es cualquier cadena de smbolos gramaticales, se considera FIRST() como el
conjunto de terminales que encabezan las cadenas derivadas de . Si =*=> , entonces
tambin est en FIRST().
Para calcular FIRST(X) para algn smbolo X de la gramtica, se aplican las siguientes
reglas hasta que no se pueda aadir nada nuevo al conjunto FIRST:
1. Si X es terminal, entonces FIRST(X) es {X}.
2. Si X es no terminal y existe la produccin X , entonces aadir a FIRST(X).
3. Si X es no terminal y X Y1 Y2 .. . Yk es una produccin entonces, para todo i
(con i variando desde 1 hasta k) tal que Y1 , Y2 , ..., Yi-1 sean todos no terminales y
FIRST(Y1), FIRST(Y2), ..., FIRST(Yi-1) contengan todos , se aaden todos los
smbolos no nulos de FIRST(Yi ) a FIRST(X). Finalmente, si est en FIRST(Yj )
para j = 1, 2, ..., k (o sea, en todos), entonces se aade a FIRST(X).
Dicho de otra forma, lo anterior significa que todos los elementos de FIRST(Y1),
excepto , pertenecen tambin a FIRST(X). Si Y1 no deriva , entonces ya ha
terminado el clculo de FIRST(X), pero en caso contrario, es decir, si Y1=*=> ,
entonces todos los elementos de FIRST(Y2) excepto pertenecen tambin a
FIRST(X), y as sucesivamente. Finalmente, si todos los Yi derivan , entonces
se aade a FIRST(X).
Compiladores
18
Grupo 98
C# Compiler
FOLLOW(A)
Se define FOLLOW(A), para el no terminal A, como el conjunto de terminales a que
pueden aparecer inmediatamente a la derecha de A en alguna forma sentencial, es decir,
el conjunto de terminales a tal que haya una derivacin de la forma S=*=>Aa para
algn y . Si A puede ser el smbolo de ms a la derecha en alguna forma sentencial,
entonces $ est en FOLLOW(A).
Para calcular FOLLOW(A) para un smbolo no terminal A, se aplican las siguientes
reglas hasta que no se pueda aadir nada ms al conjunto FOLLOW.
1. $ est en FOLLOW(S), siendo S el axioma de G.
2. Si existe una produccin A B, entonces todo lo que est en FIRST(),
excepto , est en FOLLOW(B).
3. Si existe la produccin A B y FIRST() contiene (es decir, =*=>), o
bien si existe una produccin A B, entonces todo lo que est en FOLLOW(A)
est en FOLLOW(B).
Se puede considerar el anlisis sintctico descendente como un intento de encontrar una
derivacin por la izquierda para una cadena de entrada. Tambin se puede considerar
como un intento de construir un rbol de anlisis sintctico para la entrada comenzando
desde la raz y creando los nodos del rbol en orden previo.
A continuacin representaremos la gramtica del Analizador Sintactico.
4.1 Gramtica
Primeramente hicimos una gramtica sencilla que cumpliera las normas para LL(1). A
medida que incluamos mas reglas, nos iban apareciendo nuevas dependencias.
Finalmente, utilizando una serie de tcnicas pudimos eliminar dichas dependencias y
crear una gramtica de tipo LL(1).
Una vez que tuvimos la gramtica correcta, la modificamos para que se pareciera al
mximo a la gramtica utilizada para la implementacin. Sustituimos los smbolos
terminales por definiciones, que posteriormente comentamos, para que la gramtica se
parezca lo mximo posible a la implementacin.
La gramtica es la siguiente:
Sintactico PR_CLASS Clase Sintactico
Sintactico EO
Clase ID LLA DeclSentencias LLC
Compiladores
19
Grupo 98
C# Compiler
Clase
DeclSentencias DeclSentencia DeclSentencias
DeclSentencias
DeclSetencia [(PR_PUBLIC | PR_PRIVATE )] [STATIC] Sentencia
Sentencia ID [Var] (SentAsig DPC | SentMet DPC | DPC | ID Declaracion)
Sentencia PR_IF Expresin ( Sentencia | LLA SentenciaS LLC)
[PR_ELSE ( Sentencia | LLA SentenciaS LLC)]
Sentencia PR_RETURN Expresin DPC
Sentencia Tipos [LLA LLC] ID Declaracion
Sentencia CCW PAA (ID [Var] | ST) [DC DatosWrite] PAC DPC
Var OP ID [SentMet]
Var CA Expresin CC
SentenciaS Sentencia Sentencias
SentenciaS
SentAsig OAS Valor
SentAsig AO Expresion
SentMet PAA (PAC | Var2 PAC)
DatosWrite DC Valor DatosWrite
DatosWrite
Tipos (PR_SHORT | PR_STRING | PR_VOID | PR_BOOL)
Valor
Valor
Valor
Valor
20
Grupo 98
C# Compiler
Compiladores
21
Grupo 98
C# Compiler
PR Palabra Reservada
OA Operador Aritmetico
OAS = (Operador ASignacion)
PAA ( (PArntesis Abierto)
PAC ) (PArntesis 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 Implementacin
En la implementacin del analizador sintctico no utilizamos ninguna herramienta, ya
que la nica valida era COCO/R y no nos convenca del todo para realizar el resto de
pasos (analizador semntico, generador de cdigo intermedio, etc.).
Simplemente sustituimos los smbolos no terminales por nombres de funcin, cuyo
cuerpo de la misma es encajar los tokens leidos con cada regla de la gramtica. En caso
de no encajar, se produce un error, lo que conlleva a avisar al gestor de errores, que mas
adelantes hablaremos de el.
Compiladores
22
Grupo 98
C# Compiler
5 Analizador Semntico
Este apartado lo vamos a dividir en dos subapartados: Por un lado vamos a comentar
como se ha realizado la comprobacin de tipos y por otro como se han realizado el resto
de reglas semnticas.
Primeramente, debemos comentar que todo el anlisis semntico se ha realizado por
traduccin, es decir, utilizando Esquema de Traduccin (EDT) y no dirigida por
sintaxis, como es lgico en analizadores sintcticos descendentes.
Como es obvio, la inclusin de reglas semnticas se implementa utilizando cdigo en
C++. A continuacin vemos todas las comprobaciones semnticas realizadas en el
compilador.
Compiladores
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, generaramos un error.
Compiladores
24
Grupo 98
C# Compiler
Compiladores
25
Grupo 98
C# Compiler
Se tiene en cuenta que los nmeros decimales de tipo Short no excedan el limite
de overflow.
Compiladores
26
Grupo 98
C# Compiler
Comprobamos que todos los mtodos 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 estn inicializadas, ya sean desde
la propia clase o mtodo, a objetos instanciados.
Compiladores
27
Grupo 98
C# Compiler
La estructura de los tercetos. Esta estructura est preparada para almacenar los
tercetos en memoria segn 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 operacin 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 numrico, cadena, o una referencia a otro terceto. El
valor es una unin capaz de almacenar cualquiera de estos tres valores.
typedef
typedef
typedef
typedef
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;
};
Esta funcin recibe el nombre del fichero de salida donde se escribirn los
tercetos generados. Automticamente se aadir la extensin .ter al fichero
generado. Inicializa el generador de tercetos.
Esta funcin genera los tercetos. Recibe la operacin del terceto a generar y los 2
tipos y valores de los operadores del terceto.
void Fin_Tercetos();
#define TR_INICIO_PROGRAMA 0
Terceto de inicio del programa. No recibe ningn operando.
#define TR_FIN_PROGRAMA 1
Terceto de fin del programa. No recibe ningn operando.
#define TR_METODO_MAIN 2
Terceto correspondiente con el inicio del mtodo principal Main
#define TR_METODO 3
Terceto correspondiente con el inicio de un mtodo. Recibe un operando
numrico que indica el nmero correspondiente a la etiqueta del mtodo
#define TR_METODO_RET 4
Terceto correspondiente con el fin de un mtodo. No recibe ningn operando.
#define TR_ASIGNACION 5
Compiladores
29
Grupo 98
C# Compiler
#define TR_REGISTRO_CLASE 6
Crea el registro de activacin de una clase. Recibe un operando numrico que
indica el tamao del registro
#define TR_CLASE 7
Terceto correspondiente con el inicio de una clase. Recibe un operando numrico
que indica el nmero correspondiente a la etiqueta de la clase
#define TR_SALTO 8
Terceto que indica la posicin del cdigo inicial del programa. No recibe ningn
operando.
#define TR_REGISTRO_METODO 9
Crea el registro de activacin de un mtodo. Recibe un operando numrico que
indica el tamao del registro
#define TR_VALOR_INMEDIATO 10
Terceto de un valor short inmediato. Recibe un operando numrico con el valor.
#define TR_VALOR_VARIABLE 11
Terceto de acceso a una variable. Recibe dos operandos numricos. El primero
indica si la variable es del mtodo o de la clase, y el segundo indica el
desplazamiento
#define TR_WRITE_STRING 12
Terceto para escribir cadenas. Recibe un operando numrico 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 numrico con el valor a
escribir.
#define TR_SALTO_METODO 14
Terceto para saltar a un mtodo. Recibe un operando con la etiqueta del mtodo
al que saltar.
#define TR_INICIO_WRITE_STRING 15
Terceto que indica el inicio de escritura en consola. No recibe ningn operando.
#define TR_FIN_WRITE_STRING 16
Terceto que indica el final de escritura en consola. No recibe ningn 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
ningn operando.
#define TR_RESTAURAR_ESTADO 19
Terceto que indica que se debe restaurar el estado del computador. No recibe
ningn operando.
#define TR_VALOR_DEVUELTO 20
Terceto que indica que se debe usar el valor devuelto por el mtodo que termina.
No recibe ningn operando.
#define TR_INICIO_ARGUMENTOS 21
Terceto que indica el inicio de argumentos para la llamada a un mtodo.
#define TR_FIN_ARGUMENTOS 22
Terceto que indica el fin de argumentos para la llamada a un mtodo.
#define TR_ACTIVAR_REGISTRO_CLASE 23
Terceto que indica que se debe activar el registro de otra clase. Recibe dos
operandos numricos que indican la posicin del registro de activacin 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
ningn operando.
#define TR_FIN_IF 26
Terceto que indica el final de una sentencia condicional if-else. Recibe un
operando numrico que indica las etiquetas que se debe utilizar.
#define TR_ASIGNACION_INFORMATIVA 27
Terceto que indica el inicio de una asignacin
#define TR_COMP_IGUAL 28
Este terceto indica que se debe hacer una comparacin. Recibe dos operandos
numricos. El primero indica el tipo de comparacin 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 numrico 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 numrico que proporciona etiquetas
#define TR_CONSOLE_READ 31
Terceto que implementa la lectura de un un entero por consola. No recibe ningn
operando.
#define TR_ASIGNACION_VECTOR 32
Terceto de asignacin en un vector. Recibe dos operandos numricos. El primero
indica si la variable donde se realiza la asignacin es del mtodo o de la clase, y
el segundo indica el desplazamiento correspondiente a la variable en el registro
de activacin correspondiente
#define TR_INICIO_VECTOR 33
Terceto que informa el inicio de una variable de tipo vector. No recibe ningn
operando.
#define TR_FIN_VECTOR 34
Terceto que informa del fin de una variable de tipo vector. No recibe ningn
operando.
#define TR_VALOR_VARIABLE_VECTOR 35
Terceto de acceso a una variable. Recibe dos operandos numricos. El primero
indica si la variable es del mtodo 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 ningn valor til.
#define TR_NUMERO 1
Indica que se pasa un valor numrico.
#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
int Intermedio_Fin();
Finaliza el generador de cdigo Intermedio.
Compiladores
33
Grupo 98
C# Compiler
int Intermedio_Informar_Llamada_Funcion();
Lo mismo que antes pero para llamadas a mtodos.
int Intermedio_Tipo_Llamada();
Devuelve el tipo de llamada en curso: Es decir llamada a atributo o a mtodo.
int Liberar_Informar_Llamada();
Como su nombre indica esta funcin libera una llamada de la pila de llamadas.
int Intermedio_Ultimo_TR();
Esta funcin devuelve el ltimo tipo de terceto generado.
Compiladores
34
Grupo 98
C# Compiler
pruebaT.cs
class clase{
public static void Main(){
short num1,num2;
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
Compiladores
35
Grupo 98
C# Compiler
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_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
Compiladores
36
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 17
Operacion: TR_INICIO_WRITE_STRING
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
Objeto_Inicializar(char fichero_salida[]);
Esta funcin inicializa el mdulo y recibe como parmetro el nombre del fichero
donde escribir el cdigo objeto en ensamblador. Automticamente se aadir la
extensin .ens al nombre del fichero.
Objeto_Finalizar();
Esta funcin finaliza el mdulo 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 direccin del registro de activacin de la clase del Main
pblico que corresponde con el inicio de la pila. Despus llama al Main que
siempre se encuentra en la etiqueta E0. Despus finaliza la ejecucin 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 mtodo Main y guarda el registro de pila en IY. El
registro IY se utilizara para acceder a las direcciones que marcan el registro de
activacin de la clase y el mtodo 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 mtodo y guarda el registro de pila en IY. El registro
IY se utilizara para acceder a las direcciones que marcan el registro de activacin
de la clase y el mtodo actual. El parmetro n indica el nmero de etiqueta
correspondiente al mtodo.
Objeto_Metodo_Ret() {
fprintf(fdobjeto,"\tMOVE .IY,.SP\n");
fprintf(fdobjeto,"\tRET\n");
}
Restaura el valor de la pila y retorna del mtodo 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 activacin de una clase. El parmetro numero indica
el tamao del registro.
Objeto_Clase(int n) {
fprintf(fdobjeto,"E%d: NOP ;clase\n",n);
}
Pone la etiqueta del comienzo de una clase. El parmetro indica el nmero de
etiqueta.
Objeto_Salto() {
fprintf(fdobjeto,"SALTO:\n");
}
Marca el comienzo del programa principal, donde se crean los registros de
activacin 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);
Compiladores
39
Grupo 98
C# Compiler
fprintf(fdobjeto,"\tMOVE .A,.SP\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
}
Crea en la pila el registro de activacin de un mtodo. El parmetro numero
indica el tamao 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 parmetro 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 nmero 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 mtodo de la clase actual. Da por hecho que los registros de
activacin ya estn correctos. Despus de la llamada restaura el registro de
activacin 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 metern en la pila los valores que
hay que escribir en una cadena. R2 marcar la direccin 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 operacin suma (si n=1) o resta (si n=2). Presupone que los valores a
sumar estn 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");
Compiladores
41
Grupo 98
C# Compiler
fprintf(fdobjeto,"\tPUSH .R2\n");
fprintf(fdobjeto,"\tPUSH .R3\n");
fprintf(fdobjeto,"\tPUSH .R4\n");
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 mtodo en caso de que devuelva algn 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 mtodo en caso de que devuelva algn valor.
Objeto_Valor_Devuelto() {
fprintf(fdobjeto,"\t;valor devuelto\n");
fprintf(fdobjeto,"\tPUSH .R0\n");
}
Guarda el valor devuelto por un mtodo en la pila.
Objeto_Inicio_Argumentos() {
fprintf(fdobjeto,"\tMOVE .SP,.R2 ;incio argumentos\n");
}
Guarda SP en R2 porque a partir de ahora se metern en la pila los valores de los
parmetros que se pasarn a un mtodo.
Objeto_Fin_Argumentos() {
fprintf(fdobjeto,"\tMOVE .R2,.SP ;fin argumentos\n");
}
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 direccin del registro de activacin 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 comparacin lgica. Si alguna
comparacin 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 asignacin. Este terceto no necesita ninguna
implementacin en nuestro generador de cdigo objeto. Sin embargo, hacemos
esta funcin y ponemos un comentario para dar ms claridad al cdigo del
compilador y al cdigo generado.
Compiladores
43
Grupo 98
C# Compiler
if (op==1) //igual
fprintf(fdobjeto,"\tBZ /E%d\n",eti);
else if (op==2) //distinto
fprintf(fdobjeto,"\tBNZ /E%d\n",eti);
else if (op==3) {//mayor
fprintf(fdobjeto,"\tBZ /E%d\n",eti+1); //son iguales
fprintf(fdobjeto,"\tBP /E%d\n",eti);
}
else if (op==4) //menor
fprintf(fdobjeto,"\tBN /E%d\n",eti);
else if (op==5) //mayor igual
fprintf(fdobjeto,"\tBP /E%d\n",eti);
else if (op==6) {//menor igual
fprintf(fdobjeto,"\tBN /E%d\n",eti);
fprintf(fdobjeto,"\tBZ /E%d\n",eti);
}
fprintf(fdobjeto,"\tBR /E%d\n",eti+1);
fprintf(fdobjeto,"\tE%d: MOVE #1,.R3; \n",eti);
fprintf(fdobjeto,"\tE%d: NOP; fin comp igual\n",eti+1);
}
Realiza la comparacin. El tipo de comparacin lo indica el parmetro op. Si el
resultado de la comparacin es falso pone el valor un en R3
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 lgicas 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
Objeto_Inicio_Vector() {
fprintf(fdobjeto,"\t;inicio vector\n");
}
Indica el inicio de un vector. Este terceto no necesita ninguna implementacin en
nuestro generador de cdigo objeto. Sin embargo, hacemos esta funcin y
ponemos un comentario para dar ms claridad al cdigo del compilador y al
cdigo generado.
Objeto_Fin_Vector() {
fprintf(fdobjeto,"\t;Fin vector\n");
}
Indica el final de un vector. Este terceto no necesita ninguna implementacin en
nuestro generador de cdigo objeto. Sin embargo, hacemos esta funcin y
ponemos un comentario para dar ms claridad al cdigo del compilador y al
cdigo generado.
Compiladores
45
Grupo 98
Compiladores
C# Compiler
46
Grupo 98
C# Compiler
8 Generador de Errores
El mdulo del generador de errores se encarga de almacenar los errores producidos en la
compilacin 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:
"fichero", Line X: Tipo Error: #id_error: mensaje_error
void Imprimir_Sumario();
Compiladores
47
Grupo 98
C# Compiler
Los errores que puede generar el gestor de errores son los siguientes:
Lxicos:
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"
Semnticos:
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
48
Grupo 98
C# Compiler
o
o
o
o
o
o
o
o
o
o
o
o
o
o
Compiladores
49
Grupo 98
C# Compiler
9 Programa Principal
El programa principal se llama CSC (C Sharp Compiler). Este programa posee las
siguientes opciones:
GNU C Sharp Compiler
Usage: csc [options] <source_file> <output_file>
Options:
-h, --help
display this help
-s, --sin
display sintactic debug
-t, --ter
create intermiddle code
-o, --obj
create object object
Press any key to continue
Salida
Salida.ter
Salida.ens
Compiladores
50
Grupo 98
C# Compiler
10 Pruebas
En todas las pruebas ejecutamos el compilador con la siguiente lnea de comando:
Lnea de comandos
C:\CSC\Debug> csc.exe o ..\pruebas\pruebaX.cs salida
10.1 Prueba 1
prueba101.cs
class clase{
short numero3;
void metodo1() {
console.write("Estoy en el metodo1\n");
}
public static void Main(){
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
51
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
Compiladores
52
Grupo 98
C# Compiler
Operacion: TR_RESTAURAR_ESTADO
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
Compiladores
53
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 7
Tipo: TR_NUMERO
Valor: 7
-----------------------------------------------Direccion: 24
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 25
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 26
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 27
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 6
Tipo: TR_NUMERO
Valor: 6
-----------------------------------------------Direccion: 28
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 29
Operacion: TR_ASIGNACION_INFORMATIVA
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_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 32
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 33
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 34
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 35
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Compiladores
54
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
55
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
------------------------------------------------
Compiladores
56
Grupo 98
C# Compiler
Direccion: 60
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
Compiladores
57
Grupo 98
C# Compiler
MOVE .IY,.SP
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
Compiladores
58
Grupo 98
C# Compiler
MOVE .R0,#0[.IX]
;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
Compiladores
59
Grupo 98
C# Compiler
MOVE .A,.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
;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
Compiladores
60
Grupo 98
C# Compiler
PUSH .R0
;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:
Compiladores
61
Grupo 98
C# Compiler
Ejecucin
Estoy en el metodo1
hola
n1: 3
n2: -1
n3: 5
adios
10.2 Prueba 2
prueba102.cs
class clase{
short numero3;
public static void Main(){
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
Compiladores
62
Grupo 98
C# Compiler
-----------------------------------------------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
-----------------------------------------------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
------------------------------------------------
Compiladores
63
Grupo 98
C# Compiler
Direccion: 16
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 17
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 18
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 19
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 20
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 21
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------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: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------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: 6
Tipo: TR_NUMERO
Valor: 6
-----------------------------------------------Direccion: 28
Compiladores
64
Grupo 98
C# Compiler
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
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
Compiladores
65
Grupo 98
C# Compiler
POP .R0
MOVE #-3[.IY],.IX
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
Compiladores
66
Grupo 98
C# Compiler
;valor de variable
MOVE #-3[.IY],.IX
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:
Ejecucin
hola
n1: 6
adios
10.3 Prueba 3
prueba103.cs
class clase{
short numero3;
Compiladores
67
Grupo 98
C# Compiler
void metodo1() {
console.write("Estoy en el metodo1\n");
}
void metodo2() {
console.write("Estoy en el metodo2\n");
}
public static void Main(){
short n1;
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
Compiladores
68
Grupo 98
C# Compiler
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
69
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------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
Compiladores
70
Grupo 98
C# Compiler
Tipo: TR_NADA
-----------------------------------------------Direccion: 32
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
Compiladores
71
Grupo 98
C# Compiler
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
Compiladores
72
Grupo 98
C# Compiler
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
;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
Compiladores
73
Grupo 98
C# Compiler
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 1
MOVE .SP,.R0
ADD #1,.SP
MOVE .A,.SP
PUSH .R0
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecucin
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;
}
public static void Main(){
short n1;
n1=metodo1();
Compiladores
74
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
Compiladores
75
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 10
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
Compiladores
76
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 22
Operacion: TR_INICIO_WRITE_STRING
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
------------------------------------------------
Compiladores
77
Grupo 98
C# Compiler
Direccion: 34
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
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
Compiladores
78
Grupo 98
C# Compiler
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
79
Grupo 98
E0:
C# Compiler
RET
MOVE .IY,.SP
RET
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
Compiladores
80
Grupo 98
C# Compiler
Compiladores
81
Grupo 98
C# Compiler
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.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
;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 Sigo en Main
WRSTR /E9
BR /E10
E9: DATA "Sigo en Main "
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
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:
Ejecucin
Estoy en el metodo1
Estoy en Main 15
Estoy en el metodo1
Sigo en Main 19
Compiladores
82
Grupo 98
C# Compiler
10.5 Prueba 5
prueba105.cs
class clase{
short num;
short metodo1(short n1,short n2) {
console.write("Metodo1: n1={0}, n2={1}\n",n1,n2);
console.write("Metodo1: n1+n2={0}\n",n1+n2);
return n1+n2;
}
public static void Main(){
num=1;
console.write("Estoy en Main\n");
console.write("Resultado de metodo1: {0}\n",metodo1(5,6));
metodo1(5+num,6);
}
}
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
83
Grupo 98
C# Compiler
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
-----------------------------------------------Direccion: 12
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 13
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 14
Operacion: TR_VALOR_VARIABLE
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_WRITE_STRING
Tipo: TR_NUMERO
Valor: 9
Tipo: TR_NUMERO
Valor: 9
-----------------------------------------------Direccion: 17
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 18
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 11
Compiladores
84
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 11
-----------------------------------------------Direccion: 19
Operacion: TR_FIN_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_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 22
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 23
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 24
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 25
Operacion: TR_METODO_MAIN
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 26
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 27
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 28
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 29
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 30
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 13
Tipo: TR_NUMERO
Valor: 13
Compiladores
85
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
86
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
87
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
88
Grupo 98
E0:
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
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;asignacion pos 0
POP .R0
Compiladores
89
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
90
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
91
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:
Ejecucin
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;
public void metodo1() {
short p;
var2=3;
p=4;
console.write("Estoy en el Metodo1 {0},{1}\n",var2,p);
Compiladores
92
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);
}
public static void Main(){
short num2;
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
Compiladores
93
Grupo 98
C# Compiler
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
Tipo: TR_NUMERO
Valor: 7
Tipo: TR_NUMERO
Valor: 7
-----------------------------------------------Direccion: 17
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Compiladores
94
Grupo 98
C# Compiler
Tipo: TR_NADA
-----------------------------------------------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
95
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
------------------------------------------------
Compiladores
96
Grupo 98
C# Compiler
Direccion: 42
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
Compiladores
97
Grupo 98
C# Compiler
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 55
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 56
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 57
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 58
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 59
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 60
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 61
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 23
Tipo: TR_NUMERO
Valor: 23
-----------------------------------------------Direccion: 62
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 63
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 25
Tipo: TR_NUMERO
Valor: 25
-----------------------------------------------Direccion: 64
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 49
Tipo: TR_NUMERO
Valor: 49
-----------------------------------------------Direccion: 65
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 27
Tipo: TR_NUMERO
Valor: 27
-----------------------------------------------Direccion: 66
Operacion: TR_FIN_WRITE_STRING
Compiladores
98
Grupo 98
C# Compiler
Tipo: TR_NADA
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
Compiladores
99
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 49
-----------------------------------------------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
Compiladores
100
Grupo 98
C# Compiler
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
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
Compiladores
101
Grupo 98
C# Compiler
BR /E12
E11: DATA "Estoy en el Metodo2 "
E12: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E13
BR /E14
E13: DATA ","
E14: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E15
BR /E16
E15: DATA "\n"
E16: NOP ;fin cuerpo
MOVE .R2,.SP ;fin write string
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"
Compiladores
102
Grupo 98
C# Compiler
Compiladores
103
Grupo 98
C# Compiler
Compiladores
104
Grupo 98
C# Compiler
PUSH .R0
;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:
Ejecucin
Empiezo en Main 1,2
Estoy en el Metodo1 3,4
Sigo en Main 1,2
Estoy en el Metodo2 5,6
Termino en Main 5,2
10.7 Prueba 7
prueba107.cs
class prueba {
short var1,var2;
Compiladores
105
Grupo 98
C# Compiler
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
------------------------------------------------
Compiladores
106
Grupo 98
C# Compiler
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
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
Compiladores
107
Grupo 98
C# Compiler
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 7
Tipo: TR_NUMERO
Valor: 7
-----------------------------------------------Direccion: 17
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 18
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 19
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 20
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 21
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 22
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 23
Operacion: TR_CLASE
Tipo: TR_NUMERO
Valor: 9
Tipo: TR_NUMERO
Valor: 9
-----------------------------------------------Direccion: 24
Operacion: TR_METODO
Tipo: TR_NUMERO
Valor: 10
Tipo: TR_NUMERO
Valor: 10
-----------------------------------------------Direccion: 25
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 26
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 27
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 28
Operacion: TR_ASIGNACION_INFORMATIVA
Compiladores
108
Grupo 98
C# Compiler
Tipo: TR_NADA
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
Compiladores
109
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------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
110
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
------------------------------------------------
Compiladores
111
Grupo 98
C# Compiler
Direccion: 65
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
Compiladores
112
Grupo 98
C# Compiler
Operacion: TR_FIN_WRITE_STRING
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
Compiladores
113
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 29
Tipo: TR_NUMERO
Valor: 29
-----------------------------------------------Direccion: 90
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 91
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 31
Tipo: TR_NUMERO
Valor: 31
-----------------------------------------------Direccion: 92
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 49
Tipo: TR_NUMERO
Valor: 49
-----------------------------------------------Direccion: 93
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 33
Tipo: TR_NUMERO
Valor: 33
-----------------------------------------------Direccion: 94
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 95
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 96
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 97
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 98
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 99
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
BR /SALTO
E1: NOP ;clase
Compiladores
114
Grupo 98
C# Compiler
Compiladores
115
Grupo 98
C# Compiler
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
E11: DATA "Estoy en el Metodo2 "
E12: NOP ;fin cuerpo
WRINT #0[.IY] ;write short
;cuerpo write string ,
WRSTR /E13
BR /E14
E13: DATA ","
E14: NOP ;fin cuerpo
WRINT #1[.IY] ;write short
;cuerpo write string \n
WRSTR /E15
BR /E16
E15: DATA "\n"
E16: NOP ;fin cuerpo
MOVE .R2,.SP ;fin 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
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
Compiladores
116
Grupo 98
E0:
C# Compiler
RET
MOVE .IY,.SP
RET
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
Compiladores
117
Grupo 98
C# Compiler
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 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
Compiladores
118
Grupo 98
C# Compiler
WRSTR /E27
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
Compiladores
119
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:
Ejecucin
Empiezo en Main 1,2
Estoy en el Metodo1 3,4
Sigo en Main 1,7
Estoy en el Metodo2 5,6
Termino en Main 5,11
10.8 Prueba 8
prueba108.cs
class prueba {
public short numero1;
public short numero2;
Compiladores
120
Grupo 98
C# Compiler
}
class prueba2 {
public short numero3;
public short metodo22() {
console.write("Estoy en Metodo22: {0}\n",numero3);
return 22;
}
public short metodo2(short n) {
console.write("Estoy en Metodo2: {0},{1}\n",numero3,n);
return numero3+n;
}
class clase{
short s1;
prueba p1;
prueba p3;
prueba2 p2;
short metodo3() {
return 5;
}
public static void Main(){
short s2;
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);
}
}
Compiladores
121
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_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
Compiladores
122
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
123
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 13
-----------------------------------------------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
Compiladores
124
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 36
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
------------------------------------------------
Compiladores
125
Grupo 98
C# Compiler
Direccion: 48
Operacion: TR_METODO_MAIN
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
Compiladores
126
Grupo 98
C# Compiler
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 61
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 62
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 63
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 64
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 65
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 66
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 67
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 68
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 69
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 70
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 71
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 72
Operacion: TR_SALTO_METODO
Compiladores
127
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 23
Tipo: TR_NUMERO
Valor: 23
-----------------------------------------------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
Compiladores
128
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 24
-----------------------------------------------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
Compiladores
129
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 97
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
------------------------------------------------
Compiladores
130
Grupo 98
C# Compiler
Direccion: 109
Operacion: TR_RESTAURAR_ESTADO
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
Compiladores
131
Grupo 98
C# Compiler
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 122
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 123
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 124
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 40
Tipo: TR_NUMERO
Valor: 40
-----------------------------------------------Direccion: 125
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 126
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 42
Tipo: TR_NUMERO
Valor: 42
-----------------------------------------------Direccion: 127
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 49
Tipo: TR_NUMERO
Valor: 49
-----------------------------------------------Direccion: 128
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 44
Tipo: TR_NUMERO
Valor: 44
-----------------------------------------------Direccion: 129
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 50
Tipo: TR_NUMERO
Valor: 50
-----------------------------------------------Direccion: 130
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 46
Tipo: TR_NUMERO
Valor: 46
-----------------------------------------------Direccion: 131
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 51
Tipo: TR_NUMERO
Valor: 51
-----------------------------------------------Direccion: 132
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 133
Operacion: TR_FIN_WRITE_STRING
Compiladores
132
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
133
Grupo 98
C# Compiler
BR /E8
E7: DATA "\n"
E8: NOP ;fin cuerpo
MOVE .R2,.SP ;fin 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
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E9: NOP ;clase
E10: 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
;cuerpo write string Estoy en Metodo22:
WRSTR /E11
BR /E12
E11: DATA "Estoy en Metodo22: "
E12: NOP ;fin cuerpo
WRINT #0[.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 22
MOVE #22,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E15: 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 #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Estoy en Metodo2:
WRSTR /E16
Compiladores
134
Grupo 98
C# Compiler
BR /E17
E16: DATA "Estoy en Metodo2: "
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
;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
POP .R0 ;operacion aritmetica
POP .R3
ADD .R3,.R0 ;suma
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E22: NOP ;clase
E23: NOP ;metodo
MOVE .SP,.IY;metodo
;valor inmediato 5
MOVE #5,.R0
PUSH .R0
MOVE .IY,.SP
RET
MOVE .IY,.SP
RET
E0:
MOVE .SP,.IY;metodo
;asignacion informativa
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;asignacion pos 1
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#1[.IX]
;asignacion informativa
;valor inmediato 3
MOVE #3,.R0
PUSH .R0
;asignacion pos 2
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#2[.IX]
Compiladores
135
Grupo 98
C# Compiler
;asignacion informativa
;valor inmediato 2
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
Compiladores
136
Grupo 98
C# Compiler
Compiladores
137
Grupo 98
C# Compiler
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
;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
Compiladores
138
Grupo 98
C# Compiler
;valor inmediato 4
MOVE #4,.R0
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
Compiladores
139
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 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
Compiladores
140
Grupo 98
C# Compiler
Compiladores
141
Grupo 98
C# Compiler
HALT
INICIO_PILA:
Ejecucin
Estoy en Metodo1: 2,3
Estoy en Main: 9,7,2,3
Estoy en Metodo22: 4
Estoy en Metodo2: 4,5
Sigo en Main: 4,9
Estoy en Main: 9,7,2,3
10.9 Prueba 9
prueba109.cs
class prueba {
public short numero1;
public short metodo1() {
}
class prueba2 {
public short numero2;
public short metodo2(short n) {
console.write("Estoy en Metodo2: {0},{1}\n",n,numero2);
return 2;
}
class clase{
prueba p1;
prueba2 p2;
public static void Main(){
Compiladores
142
Grupo 98
C# Compiler
p1.numero1=5;
p2.numero2=6;
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
Compiladores
143
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
144
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 13
-----------------------------------------------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
Compiladores
145
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 34
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
------------------------------------------------
Compiladores
146
Grupo 98
C# Compiler
Direccion: 46
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 47
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 18
Tipo: TR_NUMERO
Valor: 18
-----------------------------------------------Direccion: 48
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 49
Tipo: TR_NUMERO
Valor: 49
-----------------------------------------------Direccion: 49
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 20
Tipo: TR_NUMERO
Valor: 20
-----------------------------------------------Direccion: 50
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 51
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 52
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 53
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 54
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 55
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
Compiladores
147
Grupo 98
C# Compiler
;valor de variable
MOVE #-2[.IY],.IX
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
Compiladores
148
Grupo 98
E0:
C# Compiler
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 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
Compiladores
149
Grupo 98
C# Compiler
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 #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:
Ejecucin
Estoy en Metodo2: 5,6
Estoy en Main: 5,6
Compiladores
150
Grupo 98
C# Compiler
10.10 Prueba 10
prueba110.cs
class prueba {
public short numero1=1;
public short metodo1() {
console.write("Estoy en Metodo1\n");
return numero1;
}
class clase{
short s1;
prueba p1;
public static void Main(){
p1.numero1=5;
s1=p1.numero1;
}
class clase2{
short s1;
prueba p1;
public static void prueba2(){
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
Compiladores
151
Grupo 98
C# Compiler
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
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
Compiladores
152
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
153
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 28
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
Compiladores
154
Grupo 98
C# Compiler
POP .R0
MOVE #-2[.IY],.IX
MOVE .R0,#0[.IX]
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:
Ejecucin
Esta prueba no imprime nada por pantalla
10.11 Prueba 11
prueba111.cs
class clase{
public static void Main(){
short num;
num=5;
if (num==1 || num==2 || num==3 ||num == 4) {
//if (num==1 || num==2) {
console.write("hola1\n");
}
else
Compiladores
155
Grupo 98
C# Compiler
console.write("adios1\n");
if (num==5) {
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
Compiladores
156
Grupo 98
C# Compiler
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_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
Compiladores
157
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
158
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 20
-----------------------------------------------Direccion: 33
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
Compiladores
159
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 45
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 46
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 47
Operacion: TR_METODO_RET
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: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 51
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 52
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 5
MOVE #5,.R0
PUSH .R0
;asignacion pos 0
POP .R0
MOVE #-3[.IY],.IX
MOVE .R0,#0[.IX]
MOVE #0,.R3 ;inicio if
Compiladores
160
Grupo 98
C# Compiler
;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
;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
Compiladores
161
Grupo 98
C# Compiler
CMP #0,.R3
BZ /E2
MOVE .SP,.R2 ;incio write string
;cuerpo write string hola1\n
WRSTR /E12
BR /E13
E12: DATA "hola1\n"
E13: NOP ;fin cuerpo
;cuerpo else 2
BR /E3
E2: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string adios1\n
WRSTR /E14
BR /E15
E14: DATA "adios1\n"
E15: 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 1 eti 18
POP .R1
POP .R0
CMP .R0,.R1
BZ /E18
BR /E19
E18: MOVE #1,.R3;
E19: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E16
MOVE .SP,.R2 ;incio write string
;cuerpo write string hola2\n
WRSTR /E20
BR /E21
E20: DATA "hola2\n"
E21: NOP ;fin cuerpo
;cuerpo else 16
BR /E17
E16: NOP
E17: NOP; fin if
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 24
POP .R1
POP .R0
CMP .R0,.R1
BZ /E24
BR /E25
Compiladores
162
Grupo 98
C# Compiler
Ejecucin
adios1
hola2
10.12 Prueba 12
prueba112.cs
class clase{
public static void Main(){
short num;
Compiladores
163
Grupo 98
C# Compiler
num=4;
//num=0-3;
if (num==1)
console.write("num
else if (num==2)
console.write("num
else if (num==3)
console.write("num
else if (num==4)
console.write("num
else if (num==5)
console.write("num
else
console.write("num
es igual a 1\n");
es igual a 2\n");
es igual a 3\n");
es igual a 4\n");
es igual a 5\n");
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
Compiladores
164
Grupo 98
C# Compiler
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
-----------------------------------------------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
Compiladores
165
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 19
Operacion: TR_INICIO_WRITE_STRING
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
------------------------------------------------
Compiladores
166
Grupo 98
C# Compiler
Direccion: 31
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 32
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------Direccion: 33
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 34
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 20
Tipo: TR_NUMERO
Valor: 20
-----------------------------------------------Direccion: 35
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 36
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 24
Tipo: TR_NUMERO
Valor: 24
-----------------------------------------------Direccion: 37
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 20
Tipo: TR_NUMERO
Valor: 20
-----------------------------------------------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: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 41
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 42
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 26
Tipo: TR_NUMERO
Valor: 26
-----------------------------------------------Direccion: 43
Compiladores
167
Grupo 98
C# Compiler
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
168
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------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;
Compiladores
169
Grupo 98
C# Compiler
Compiladores
170
Grupo 98
C# Compiler
Compiladores
171
Grupo 98
C# Compiler
;cuerpo else 26
BR /E27
E26: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string num es >5 o <1\n
WRSTR /E32
BR /E33
E32: DATA "num es >5 o <1\n"
E33: NOP ;fin cuerpo
E27: NOP; fin if
E21: NOP; fin if
E15: NOP; fin if
E9: NOP; fin if
E3: 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
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:
Ejecucin
num es igual a 4
10.13 Prueba 13
prueba113.cs
class clase{
public static void Main(){
short num;
num=4;
Compiladores
172
Grupo 98
C# Compiler
if (num==4) //verdadero
console.write("verdadero\n");
else
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
Compiladores
173
Grupo 98
C# Compiler
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
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
Compiladores
174
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 17
Operacion: TR_INICIO_IF
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
Compiladores
175
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 29
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 30
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 31
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------Direccion: 32
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 18
Tipo: TR_NUMERO
Valor: 18
-----------------------------------------------Direccion: 33
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 34
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 22
Tipo: TR_NUMERO
Valor: 22
-----------------------------------------------Direccion: 35
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 18
Tipo: TR_NUMERO
Valor: 18
-----------------------------------------------Direccion: 36
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 37
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 24
Tipo: TR_NUMERO
Valor: 24
-----------------------------------------------Direccion: 38
Operacion: TR_FIN_IF
Tipo: TR_NUMERO
Valor: 18
Tipo: TR_NUMERO
Valor: 18
-----------------------------------------------Direccion: 39
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 40
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
------------------------------------------------
Compiladores
176
Grupo 98
C# Compiler
Direccion: 41
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------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
Compiladores
177
Grupo 98
C# Compiler
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------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
Compiladores
178
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 42
Tipo: TR_NUMERO
Valor: 42
-----------------------------------------------Direccion: 66
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
Compiladores
179
Grupo 98
C# Compiler
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 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
Compiladores
180
Grupo 98
C# Compiler
BP /E12
BR /E13
E12: MOVE #1,.R3;
E13: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E10
MOVE .SP,.R2 ;incio write string
;cuerpo write string verdadero\n
WRSTR /E14
BR /E15
E14: DATA "verdadero\n"
E15: NOP ;fin cuerpo
;cuerpo else 10
BR /E11
E10: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string falso\n
WRSTR /E16
BR /E17
E16: DATA "falso\n"
E17: NOP ;fin cuerpo
E11: 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 4 eti 20
POP .R1
POP .R0
CMP .R0,.R1
BN /E20
BR /E21
E20: MOVE #1,.R3;
E21: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E18
MOVE .SP,.R2 ;incio write string
;cuerpo write string verdadero\n
WRSTR /E22
BR /E23
E22: DATA "verdadero\n"
E23: NOP ;fin cuerpo
;cuerpo else 18
BR /E19
E18: NOP
MOVE .SP,.R2 ;incio write string
;cuerpo write string falso\n
WRSTR /E24
BR /E25
E24: DATA "falso\n"
E25: NOP ;fin cuerpo
E19: NOP; fin if
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
Compiladores
181
Grupo 98
C# Compiler
MOVE #0[.IX],.R0
PUSH .R0
;valor inmediato 4
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
Compiladores
182
Grupo 98
C# Compiler
Ejecucin
Compiladores
183
Grupo 98
C# Compiler
verdadero
falso
verdadero
falso
verdadero
verdadero
10.14 Prueba 14
prueba114.cs
class clase{
public static void Main(){
short num;
Console.Write("Escribe un numero: ");
num=Console.Read();
Console.Write("Has escrito un {0}\n",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_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
Compiladores
184
Grupo 98
C# Compiler
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
185
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
186
Grupo 98
C# Compiler
PUSH #INICIO_PILA
CALL /E0
HALT
INICIO_PILA:
Ejecucin
Escribe un numero: 2334
Has escrito un 2334
10.15 Prueba 15
prueba115.cs
class aritmetica{
private short mulaux(short a,short b){
if (b==1)
return a;
else if (b==0)
return 0;
else
return a+mulaux(a,b-1);
}
public short mul(short a,short b){
//Console.Write("MUL: {0},{1}\n",a,b);
if (a>=0) // a es positivo
if (b>=0) // b es positivo
return mulaux(a,b);
else // b es negativo
return 0-mulaux(a,0-b);
else // a es negativo
if (b>=0) // b es positivo
return 0-mulaux(0-a,b);
else // b es negativo
return mulaux(0-a,0-b);
}
private short divaux(short a,short b){
if (b==1)
return a;
else if (b>a)
return 0;
else
return 1+divaux(a-b,b);
}
public short div(short a,short b){
Compiladores
187
Grupo 98
C# Compiler
//Console.Write("DIV: {0},{1}\n",a,b);
if (a>=0) // a es positivo
if (b>=0) // b es positivo
return divaux(a,b);
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);
}
public short mod(short a,short b){
//Console.Write("MOD: {0},{1}\n",a,b);
return a-mul(div(a,b),b);
}
public short fact(short a){
//Console.Write("factorial: {0}\n",a);
if (a<0) {
Console.Write("ERROR: factorial negativo");
return -1;
}
else if (a==0 || a==1)
return 1;
else
return mul(a,fact(a-1));
}
class principal{
aritmetica o;
public static void Main(){
short n1;
short n2;
short op;
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();
Console.Write("Introduzca el Operando1: ");
n1 = Console.Read();
if (op!=4) {
Console.Write("Introduzca el Operando2: ");
n2 = Console.Read();
}
if (op==1)
Compiladores
188
Grupo 98
C# Compiler
n1=o.mul(n1,n2);
else if (op==2)
n1=o.div(n1,n2);
else if (op==3)
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
Compiladores
189
Grupo 98
C# Compiler
-----------------------------------------------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_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 11
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 12
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 13
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 14
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 15
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 7
Tipo: TR_NUMERO
Valor: 7
-----------------------------------------------Direccion: 16
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 17
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 18
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 7
Tipo: TR_NUMERO
Valor: 7
-----------------------------------------------Direccion: 19
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
------------------------------------------------
Compiladores
190
Grupo 98
C# Compiler
Direccion: 20
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
191
Grupo 98
C# Compiler
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
192
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 45
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
Compiladores
193
Grupo 98
C# Compiler
Tipo: TR_NADA
-----------------------------------------------Direccion: 57
Operacion: TR_METODO_RET
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
Compiladores
194
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 69
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 70
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 71
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 72
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 73
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 74
Operacion: TR_FIN_IF
Tipo: TR_NUMERO
Valor: 16
Tipo: TR_NUMERO
Valor: 16
-----------------------------------------------Direccion: 75
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 12
Tipo: TR_NUMERO
Valor: 12
-----------------------------------------------Direccion: 76
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 77
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 78
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 79
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 80
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 20
Tipo: TR_NUMERO
Valor: 20
------------------------------------------------
Compiladores
195
Grupo 98
C# Compiler
Direccion: 81
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------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
Compiladores
196
Grupo 98
C# Compiler
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
197
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 106
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
Compiladores
198
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 118
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 119
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 25
Tipo: TR_NUMERO
Valor: 25
-----------------------------------------------Direccion: 120
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 121
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 122
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 25
Tipo: TR_NUMERO
Valor: 25
-----------------------------------------------Direccion: 123
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 124
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 125
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 126
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 127
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 29
Tipo: TR_NUMERO
Valor: 29
-----------------------------------------------Direccion: 128
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 129
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores
199
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 130
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 29
Tipo: TR_NUMERO
Valor: 29
-----------------------------------------------Direccion: 131
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 132
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 133
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 134
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 135
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 136
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 137
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 138
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 139
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 140
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 141
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 24
Tipo: TR_NUMERO
Valor: 24
------------------------------------------------
Compiladores
200
Grupo 98
C# Compiler
Direccion: 142
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
201
Grupo 98
C# Compiler
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 34
Tipo: TR_NUMERO
Valor: 34
-----------------------------------------------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
Compiladores
202
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 167
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
Compiladores
203
Grupo 98
C# Compiler
Tipo: TR_NADA
-----------------------------------------------Direccion: 179
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 180
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 181
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 24
Tipo: TR_NUMERO
Valor: 24
-----------------------------------------------Direccion: 182
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 183
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 184
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 185
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 186
Operacion: TR_FIN_IF
Tipo: TR_NUMERO
Valor: 38
Tipo: TR_NUMERO
Valor: 38
-----------------------------------------------Direccion: 187
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 34
Tipo: TR_NUMERO
Valor: 34
-----------------------------------------------Direccion: 188
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 189
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 190
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
Compiladores
204
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 191
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 5
Tipo: TR_NUMERO
Valor: 5
-----------------------------------------------Direccion: 192
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 42
Tipo: TR_NUMERO
Valor: 42
-----------------------------------------------Direccion: 193
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 194
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 195
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 196
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 197
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 198
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 199
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 200
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 201
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 202
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores
205
Grupo 98
C# Compiler
Direccion: 203
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 24
Tipo: TR_NUMERO
Valor: 24
-----------------------------------------------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
Compiladores
206
Grupo 98
C# Compiler
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
207
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 228
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
Compiladores
208
Grupo 98
C# Compiler
Tipo: TR_NADA
-----------------------------------------------Direccion: 240
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 241
Operacion: TR_FIN_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 242
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 243
Operacion: TR_ACTIVAR_MISMA_CLASE
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 244
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 11
Tipo: TR_NUMERO
Valor: 11
-----------------------------------------------Direccion: 245
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 246
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 247
Operacion: TR_SUMA
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 248
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 249
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 250
Operacion: TR_METODO
Tipo: TR_NUMERO
Valor: 47
Tipo: TR_NUMERO
Valor: 47
-----------------------------------------------Direccion: 251
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
Compiladores
209
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 252
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 253
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 254
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------Direccion: 255
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 256
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 257
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 52
Tipo: TR_NUMERO
Valor: 52
-----------------------------------------------Direccion: 258
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 259
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 260
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 261
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 262
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 263
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
------------------------------------------------
Compiladores
210
Grupo 98
C# Compiler
Direccion: 264
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
211
Grupo 98
C# Compiler
Operacion: TR_INICIO_ARGUMENTOS
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
212
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 289
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
Compiladores
213
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 63
-----------------------------------------------Direccion: 301
Operacion: TR_INICIO_WRITE_STRING
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
Compiladores
214
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 313
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 314
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 315
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 75
Tipo: TR_NUMERO
Valor: 75
-----------------------------------------------Direccion: 316
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 317
Operacion: TR_CONSOLE_READ
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 318
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 319
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 320
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 321
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 4
Tipo: TR_NUMERO
Valor: 4
-----------------------------------------------Direccion: 322
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 323
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 77
Tipo: TR_NUMERO
Valor: 77
-----------------------------------------------Direccion: 324
Operacion: TR_INICIO_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
------------------------------------------------
Compiladores
215
Grupo 98
C# Compiler
Direccion: 325
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 81
Tipo: TR_NUMERO
Valor: 81
-----------------------------------------------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
Compiladores
216
Grupo 98
C# Compiler
Operacion: TR_GUARDAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
217
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 83
Tipo: TR_NUMERO
Valor: 83
-----------------------------------------------Direccion: 350
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
Compiladores
218
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 362
Operacion: TR_ACTIVAR_REGISTRO_CLASE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 363
Operacion: TR_SALTO_METODO
Tipo: TR_NUMERO
Valor: 33
Tipo: TR_NUMERO
Valor: 33
-----------------------------------------------Direccion: 364
Operacion: TR_RESTAURAR_ESTADO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 365
Operacion: TR_VALOR_DEVUELTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 366
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 367
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 368
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 87
Tipo: TR_NUMERO
Valor: 87
-----------------------------------------------Direccion: 369
Operacion: TR_INICIO_IF
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 370
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 371
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 372
Operacion: TR_COMP_IGUAL
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------Direccion: 373
Operacion: TR_CUERPO_IF
Tipo: TR_NUMERO
Valor: 91
Tipo: TR_NUMERO
Valor: 91
Compiladores
219
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 374
Operacion: TR_ASIGNACION_INFORMATIVA
Tipo: TR_NADA
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
------------------------------------------------
Compiladores
220
Grupo 98
C# Compiler
Direccion: 386
Operacion: TR_ASIGNACION
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------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
Compiladores
221
Grupo 98
C# Compiler
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
222
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------Direccion: 411
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
Compiladores
223
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 105
-----------------------------------------------Direccion: 423
Operacion: TR_WRITE_SHORT
Tipo: TR_NUMERO
Valor: 48
Tipo: TR_NUMERO
Valor: 48
-----------------------------------------------Direccion: 424
Operacion: TR_WRITE_STRING
Tipo: TR_NUMERO
Valor: 107
Tipo: TR_NUMERO
Valor: 107
-----------------------------------------------Direccion: 425
Operacion: TR_FIN_WRITE_STRING
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 426
Operacion: TR_CUERPO_ELSE
Tipo: TR_NUMERO
Valor: 101
Tipo: TR_NUMERO
Valor: 101
-----------------------------------------------Direccion: 427
Operacion: TR_FIN_IF
Tipo: TR_NUMERO
Valor: 101
Tipo: TR_NUMERO
Valor: 101
-----------------------------------------------Direccion: 428
Operacion: TR_METODO_RET
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 429
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 430
Operacion: TR_REGISTRO_CLASE
Tipo: TR_NUMERO
Valor: 0
Tipo: TR_NUMERO
Valor: 0
-----------------------------------------------Direccion: 431
Operacion: TR_REGISTRO_METODO
Tipo: TR_NUMERO
Valor: 3
Tipo: TR_NUMERO
Valor: 3
-----------------------------------------------Direccion: 432
Operacion: TR_FIN_PROGRAMA
Tipo: TR_NADA
Tipo: TR_NADA
salida.ens
MOVE #INICIO_PILA,.SP
Compiladores
224
Grupo 98
C# Compiler
BR /SALTO
E1: NOP ;clase
E2: NOP ;metodo
MOVE .SP,.IY;metodo
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #1[.IX],.R0
PUSH .R0
;valor inmediato 1
MOVE #1,.R0
PUSH .R0
;comp igual op 1 eti 5
POP .R1
POP .R0
CMP .R0,.R1
BZ /E5
BR /E6
E5: MOVE #1,.R3;
E6: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E3
;valor de variable
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 3
BR /E4
E3: 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 1 eti 9
POP .R1
POP .R0
CMP .R0,.R1
BZ /E9
BR /E10
E9: MOVE #1,.R3;
E10: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E7
;valor inmediato 0
MOVE #0,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 7
BR /E8
E7: NOP
;valor de variable
MOVE #-3[.IY],.IX
Compiladores
225
Grupo 98
C# Compiler
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 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
Compiladores
226
Grupo 98
C# Compiler
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
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
Compiladores
227
Grupo 98
C# Compiler
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 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
Compiladores
228
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 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
Compiladores
229
Grupo 98
C# Compiler
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
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
Compiladores
230
Grupo 98
C# Compiler
;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
;valor devuelto
PUSH .R0
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 20
BR /E21
E20: 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
Compiladores
231
Grupo 98
C# Compiler
Compiladores
232
Grupo 98
C# Compiler
MOVE .SP,.IY;metodo
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
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
Compiladores
233
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
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
Compiladores
234
Grupo 98
C# Compiler
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
MOVE .IY,.SP
RET
E30: NOP; fin if
E26: NOP; fin if
MOVE .IY,.SP
RET
E33: 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 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 #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 40
POP .R1
POP .R0
CMP .R0,.R1
BP /E40
BR /E41
E40: MOVE #1,.R3;
E41: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E38
;guardar estado
PUSH .SP
PUSH .SR
PUSH .IX
PUSH .IY
PUSH .A
Compiladores
235
Grupo 98
C# Compiler
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 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
Compiladores
236
Grupo 98
C# Compiler
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 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
Compiladores
237
Grupo 98
C# Compiler
Compiladores
238
Grupo 98
C# Compiler
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
POP .R0 ;operacion aritmetica
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.R0
PUSH .R0
MOVE .IY,.SP
RET
;cuerpo else 42
BR /E43
E42: 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
Compiladores
239
Grupo 98
C# Compiler
;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 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
Compiladores
240
Grupo 98
C# Compiler
;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
;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
Compiladores
241
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
;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
Compiladores
242
Grupo 98
C# Compiler
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 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
Compiladores
243
Grupo 98
C# Compiler
BZ /E58
BR /E59
E58: MOVE #1,.R3;
E59: NOP; fin comp igual
;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
Compiladores
244
Grupo 98
C# Compiler
POP .R3
SUB .R3,.R0 ;resta
MOVE .A,.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 misma clase
MOVE #-2[.IY],.R0
PUSH .R0
;Salto a metodo misma clase etiqueta E47
CALL /E47
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
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
Compiladores
245
Grupo 98
C# Compiler
POP .SR
POP .SP
;fin de restaurar estado
MOVE .IY,.SP
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
Compiladores
246
Grupo 98
C# Compiler
MOVE .R0,#2[.IX]
MOVE .SP,.R2 ;incio write string
;cuerpo write string Introduzca el Operando1:
WRSTR /E75
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
Compiladores
247
Grupo 98
C# Compiler
POP .R1
POP .R0
CMP .R0,.R1
BZ /E85
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
Compiladores
248
Grupo 98
C# Compiler
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 83
BR /E84
E83: NOP
MOVE #0,.R3 ;inicio if
;valor de variable
MOVE #-3[.IY],.IX
MOVE #2[.IX],.R0
PUSH .R0
;valor inmediato 2
MOVE #2,.R0
PUSH .R0
;comp igual op 1 eti 89
POP .R1
POP .R0
CMP .R0,.R1
BZ /E89
BR /E90
E89: MOVE #1,.R3;
E90: NOP; fin comp igual
;cuerpo if
CMP #0,.R3
BZ /E87
;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
Compiladores
249
Grupo 98
C# Compiler
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 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
Compiladores
250
Grupo 98
C# Compiler
;cuerpo if
CMP #0,.R3
BZ /E91
;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 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
Compiladores
251
Grupo 98
C# Compiler
;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 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
Compiladores
252
Grupo 98
C# Compiler
PUSH .A
;Salto a metodo misma clase etiqueta E47
CALL /E47
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 #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
Compiladores
253
Grupo 98
C# Compiler
POP .R1
POP .R0
CMP .R0,.R1
BNZ /E103
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:
Ejecucin
CALCULADORA
Operacines:
Compiladores
254
Grupo 98
1
2
3
4
..
..
..
..
C# Compiler
Multiplicar
Dividir
Resto
Factorial
Introduzca la operacion: 4
Introduzca el Operando1: 7
Resultado: 5040
10.16 Prueba 16
prueba116.cs
class clase{
short [] w = new short [5];
public static void Main(){
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
Compiladores
255
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 3
Operacion: TR_INICIO_VECTOR
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_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
------------------------------------------------
Compiladores
256
Grupo 98
C# Compiler
Direccion: 15
Operacion: TR_INICIO_VECTOR
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------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
Compiladores
257
Grupo 98
C# Compiler
Operacion: TR_ASIGNACION_INFORMATIVA
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_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
Compiladores
258
Grupo 98
C# Compiler
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 40
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
Compiladores
259
Grupo 98
C# Compiler
Tipo: TR_NUMERO
Valor: 11
-----------------------------------------------Direccion: 52
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
;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
Compiladores
260
Grupo 98
C# Compiler
Compiladores
261
Grupo 98
C# Compiler
MOVE #-3[.IY],.IX
MOVE #0[.IX],.R0
PUSH .R0
;cuerpo write string Resultados: v[4]=
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:
Ejecucin
Resultados: v[4]=3, numero1=3
10.17 Prueba 17
prueba117.cs
class clase{
short numero4=1;
public static void Main(){
short numero1=1,numero2=2;
short numero3=3;
Compiladores
262
Grupo 98
C# Compiler
Console.Write("Resultados: numero1={0}\n",numero1);
Console.Write("Resultados: numero2={0}\n",numero2);
Console.Write("Resultados: numero3={0}\n",numero3);
}
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
Compiladores
263
Grupo 98
C# Compiler
-----------------------------------------------Direccion: 10
Operacion: TR_VALOR_INMEDIATO
Tipo: TR_NUMERO
Valor: 2
Tipo: TR_NUMERO
Valor: 2
-----------------------------------------------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
------------------------------------------------
Compiladores
264
Grupo 98
C# Compiler
Direccion: 22
Operacion: TR_VALOR_VARIABLE
Tipo: TR_NUMERO
Valor: 1
Tipo: TR_NUMERO
Valor: 1
-----------------------------------------------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
Compiladores
265
Grupo 98
C# Compiler
Operacion: TR_SALTO
Tipo: TR_NADA
Tipo: TR_NADA
-----------------------------------------------Direccion: 35
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]
Compiladores
266
Grupo 98
C# Compiler
Compiladores
267
Grupo 98
MOVE
PUSH
PUSH
CALL
C# Compiler
.A,.SP
.R0
#INICIO_PILA
/E0
HALT
INICIO_PILA:
Ejecucin
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;
}
}
public static void Main(){
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
268
Grupo 98
C# Compiler
Lnea de comandos
C:\CSC\Debug> csc.exe o ..\pruebas\prueba1.cs salida
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba1.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba1.cs", Line 15: Sintactic Error: #21: Atribute not
valid
Generador de Codigo: ERROR: Metodo Main no encontrado
10.19 Prueba 19
En esta prueba podemos observar que se produce un error de tipo semntico debido a la
asignacin. Se intenta asignar un string a una variable de tipo short, y eso no es
correcto.
prueba2.cs
class clase{
short numero3;
public static void Main(){
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");
Lnea de comandos
C:\CSC\Debug> csc.exe o ..\pruebas\prueba2.cs salida
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba2.cs
Fichero Salida: salida
Compilando...
Compiladores
269
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 lxico.
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");
}
public static void Main(){
short n1;
n1=5;
metodo1();
n1+=3;
console.write("Estoy en Main {0}\n",n1);
metodo2();
Lnea de comandos
C:\CSC\Debug> csc.exe o ..\pruebas\prueba3.cs salida
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba3.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba3.cs", Line 4: Lexer Error: #150: Short Token not
valid
"..\pruebas\prueba3.cs", Line 4: Sintactic Error: #15: 'Primario' not
valid
Generador de Codigo: ERROR: Metodo Main no encontrado
10.21 Prueba 21
Compiladores
270
Grupo 98
C# Compiler
Esta prueba simplemente detecta que no existe un metodo main, o que si existe no tiene
los campos public y static necesarios.
prueba4.cs
class clase{
short numero3;
short metodo1() {
console.write("Estoy en el metodo1\n");
numero3=10;
return 5+numero3;
}
public void main(){
short n1;
n1=metodo1();
console.write("Estoy en main {0}\n",n1);
n1=3+metodo1()+1;
console.write("Sigo en main {0}\n",n1);
}
Lnea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba4.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba4.cs", Line 23: Semantic Error: #101: not a main
method in file
Generador de Codigo: ERROR: Metodo Main no encontrado
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;
short metodo1(short n1,short n2) {
console.write("Metodo1: n1={0}, n2={1}\n",n1,n2);
console.write("Metodo1: n1+n2={0}\n",n1+n2);
Compiladores
271
Grupo 98
C# Compiler
}
public static void Main(){
num=1;
console.write("Estoy en Main\n");
console.write("Resultado de metodo1: {0}\n",metodo1(5,6));
metodo1(5+num,6);
}
}
Lnea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba5.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba5.cs", Line 10: Semantic Error: #128: not return val
in method
"..\pruebas\prueba5.cs", Line 10: Sintactic Error: #3: token '}'
expected
Generador de Codigo: ERROR: Metodo Main no encontrado
10.23 Prueba 23
En esta prueba de demuestra que el compilador es capaz de saber en que momento se
esta ejecutando la palabra especial value. Por tanto, el compilador generar error,
cuando dicha palabra no se situe dentro de la declaracion de un atributo.
prueba6.cs
class prueba {
public short numero1=1;
public short metodo1() {
console.write("Estoy en Metodo1\n");
return numero1;
}
class clase{
short s1;
prueba p1;
public static void Main(){
p1.numero1=5;
s1=p1.numero1;
Compiladores
272
Grupo 98
C# Compiler
p1.numero1 = value;
}
class clase2{
short s1;
prueba p1;
public static void prueba2(){
}
s1=p1.numero1;
Lnea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba6.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba6.cs", Line 22: Semantic Error: #119: value is not
in atribute
"..\pruebas\prueba6.cs", Line 22: Sintactic Error: #9: 'SentMet' not
valid
"..\pruebas\prueba6.cs", Line 22: Sintactic Error: #3: token '}'
expected
Generador de Codigo: ERROR: Metodo Main no encontrado
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 asignacin, el compilador generar un error.
prueba7.cs
class prueba {
public short numero1;
public short metodo1() {
console.write("Estoy en Metodo1\n");
return numero1;
}
class clase{
short s1;
prueba p1;
Compiladores
273
Grupo 98
C# Compiler
class clase2{
short s1;
prueba p1;
public static void prueba2(){
s1=p1.numero1;
}
Lnea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba7.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba7.cs", Line 31: Semantic Error: #131: var no
inicializated
"..\pruebas\prueba7.cs", Line 31: Sintactic Error: #9: 'SentMet' not
valid
"..\pruebas\prueba7.cs", Line 31: Sintactic Error: #3: token '}'
expected
Generador de Codigo: ERROR: Metodo Main no encontrado
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 [] w = new short [5];
public static void Main(){
short numero1;
short [] v = new short [10];
v[4]=3;
v = {5,"hola"};
numero1=v[4];
Compiladores
274
Grupo 98
C# Compiler
Lnea de comandos
Mostrar Debug Sintactico Desactivado
Generador de Codigo Intermedio Activado
Generador de Codigo Objeto Activado
Fichero Fuente: ..\pruebas\prueba8.cs
Fichero Salida: salida
Compilando...
"..\pruebas\prueba8.cs", Line 13: Semantic Error: #118: differents
types of list
"..\pruebas\prueba8.cs", Line 13: Sintactic Error: #9: 'SentMet' not
valid
"..\pruebas\prueba8.cs", Line 13: Sintactic Error: #3: token '}'
expected
Generador de Codigo: ERROR: Metodo Main no encontrado
Compiladores
275
Grupo 98
C# Compiler
11 Anexo
Caractersticas Implementadas en el Generador de cdigo:
Compiladores
276
Grupo 98
C# Compiler
12 Bibliografa
Compiladores
277