El compilador
de Tinto utiliza un código intermedio propio formado por un total de 23
instrucciones. Se trata de un código de tres direcciones que se almacenan en los campos
target, source1 y source2. Las instrucciones
utilizadas son las siguientes:
Describe una etiqueta a la que se puede saltar. El campo target almacena el identificador de
la etiqueta.
Describe una instrucción de asignación. El campo target almacena la referencia a la variable de
destino y el campo source1 almacena el origen de la asignación, que puede ser una referencia a
una variable o un valor constante (un literal).
Describe una instrucción de suma. El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de resta. El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de multiplicación. El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de división. El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de módulo. El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de cambio de signo. El campo target almacena la referencia a la variable de
destino y el campo source1 almacena el operando.
Describe una instrucción de conjunción lógica (and). El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de disyunción lógica (or). El campo target almacena la referencia a la variable de
destino y los campos source1 y source2 almacenan los operandos.
Describe una instrucción de negación lógica (not). El campo target almacena la referencia a la variable de
destino y el campo source1 almacena el operando.
Describe una instrucción de salto incondicional. El campo target almacena el identificador de
la etiqueta de salto.
Describe una instrucción de salto condicionado a la igualdad entre los operandos. El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es igual que source2 se producirá el salto.
Describe una instrucción de salto condicionado a la desigualdad entre los operandos. El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es distinto a source2 se producirá el salto.
Describe una instrucción de salto condicionado a la comparación "mayor". El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es mayor que source2 se producirá el salto.
Describe una instrucción de salto condicionado a la comparación "mayor o igual". El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es mayor o igual que source2 se producirá el salto.
Describe una instrucción de salto condicionado a la comparación "menor". El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es menor que source2 se producirá el salto.
Describe una instrucción de salto condicionado a la comparación "menor o igual". El campo target almacena
la etiqueta de salto. Los campos source1 y source2 contienen las referencias a los datos que hay que
comparar. Si source1 es menor o igual que source2 se producirá el salto.
Describe una instrucción de salto condicionado a un valor booleano. El campo target almacena
la etiqueta de salto. El campo source1 contiene la referencia al dato booleano. Si source1
es 1 (codificación de true) se producirá el salto.
Describe una instrucción de almacenamiento de un parámetro de llamada a una función. Antes de realizar la llamada
a la función es necesario evaluar los parámetros y almacenar sus valores. El campo target contiene el
valor a almacenar. El campo source1 contiene el índice del parámetro, es decir, su posición en la llamada
a la función.
Describe una instrucción de llamada a una función. El campo source1 contiene el identificador de la función
(la etiqueta de comienzo de la función). El campo target indica la variable en la que se almacenará el valor
de retorno de la función. Los parámetros de la llamada deben ser almacenados previamente con instrucciones PARAM.
Describe una instrucción de retorno de una función. El campo target contiene la referencia al dato a devolver.
Describe una instrucción de preparación de una llamada a función. El campo target contiene el número
de parámetros que tendrá la llamada. El proceso de llamada a una función comienza indicando el número de
parámetros de la llamada (PRECALL), a continuación se calculan los valores de los parámetros y se almacenan
en su posición (PARAM) y por último se realiza la llamada (CALL).
|