Indice
1. Programa FKIL.
2. Comentarios.
3. Directivas.
4. Juego de instrucciones.
5. Etiquetas.
6. Ejemplo de programa FKIL.
1.
Programa FKIL
Un programa en FKIL estará compuesto por un unico módulo con
la siguiente estructura:
directiva_1
directiva_2
...
instrucción_1
instrucción_2
...
Nota: Todas las directivas incluidas en el programa deberán aparecer
antes de cualquier instrucción.
2. Comentarios
Se podrán incluir comentarios en el código precediendo
la una linea con el caracter '#'.
3.
Directivas
Las directivas permitidas en FKIL son las siguientes:
|
Directiva |
Descripción |
Valor por defecto |
|
.program |
Indica el nombre del programa. |
|
|
.stack |
Indica el tamaño máximo de la pila. |
1024 |
|
.heap |
Indica el tamaño máximo de la memoria dinámica. |
1024 |
|
.locals |
Indica el número de variables locales utilizadas. |
0 |
Ejemplos:
.program Prueba
.stack 1500
.heap 1000
.locals 4
4. Juego de instrucciones
Las instrucciones permitidas en FKIL son las siguientes:
|
Instrucción |
Descripción |
Nº Par. |
Parámetro |
|
ipush |
Coloca una constante entera en la pila |
1 |
Constante |
|
fpush |
Coloca una constante real en la pila |
1 |
Constante |
|
spush |
Coloca una constante cadena en la pila |
1 |
Constante |
|
bpush |
Coloca una constante booleana en la pila |
1 |
Constante |
|
iload |
Carga el valor de una variable entera en la pila |
1 |
Nº de variable |
|
fload |
Carga el valor de una variable real en la pila |
1 |
Nº de variable |
|
sload |
Carga el valor de una variable cadena en la pila |
1 |
Nº de variable |
|
bload |
Carga el valor de una variable booleana en la pila |
1 |
Nº de variable |
|
istore |
Almacena en una variable entera el primer elemento de la pila |
1 |
Nº de variable |
|
fstore |
Almacena en una variable real el primer elemento de la pila |
1 |
Nº de variable |
|
sstore |
Almacena en una variable cadena el primer elemento de la pila |
1 |
Nº de variable |
|
bstore |
Almacena en una variable booleana el primer elemento de la pila |
1 |
Nº de variable |
|
pop |
Elimina el primer elemento de la pila |
0 |
|
|
iadd |
Suma de enteros |
0 |
|
|
fadd |
Suma de reales |
0 |
|
|
isub |
Resta de enteros |
0 |
|
|
fsub |
Resta de reales |
0 |
|
|
imul |
Producto de enteros |
0 |
|
|
fmul |
Producto de reales |
0 |
|
|
idiv |
División de enteros |
0 |
|
|
fdiv |
División de reales |
0 |
|
|
nneg |
Negación numérica |
0 |
|
|
bneg |
NO lógico |
0 |
|
|
ncmp |
Comparación numérica |
0 |
|
|
bcmp |
Comparación booleana |
0 |
|
|
goto |
Salto incondicional |
1 |
Etiqueta |
|
ifeq |
Salto si igual a 0 |
1 |
Etiqueta |
|
ifne |
Salto si distinto de 0 |
1 |
Etiqueta |
|
iflt |
Salto si menor que 0 |
1 |
Etiqueta |
|
ifgt |
Salto si mayor que 0 |
1 |
Etiqueta |
|
ifge |
Salto si mayor o igual que 0 |
1 |
Etiqueta |
|
ifle |
Salto si menor o igual que 0 |
1 |
Etiqueta |
|
scmp |
Comparación de cadenas |
1 |
Etiqueta |
|
sadd |
Concatenación de cadenas |
1 |
Etiqueta |
|
iret |
Retorno de entero |
0 |
|
|
fret |
Retorno de real |
0 |
|
|
sret |
Retorno de cadena |
0 |
|
|
bret |
Retorno de booleano |
0 |
|
|
callapi |
Llamada a función de la API externa |
1 |
Nombre Función |
La máquina virtual se basará únicamente en la pila, por lo
que los parámetros de la mayoría de las instrucciones
deberán apilarse antes de ejecutar la instrucción.
5.
Etiquetas
Las etiquetas incluidas en el código, a las cuales podrán
hacer referencia todas las instrucciones condicionales se
indicarán con un identificadro seguido del caracter ':'
Ejemplo:
ifeq etiqueta1
ipsuh 1
etiqueta1:
ipush 2
6. Ejemplo
programa FKScript
A continuación se muestra un programa simple escrito en
lenguaje FKScript:
#Programa de prueba
.program Prueba
.locals 1
ipush 5
istore 0
ipush 1
fload 0
ipush 2
ncmp
ifgt etiq1
pop
ipush 0
etiq1:
ifeq
etiq2
ipush 1
istore 0
goto etiq3
etiq3:
fload 0
ipush 3
fdiv
fret