Introducción a la máquina Q
Introducción a la máquina Q
Introducción a la máquina Q
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q<br />
( versión 3.7 )<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.1
Objetivos de diseño<br />
Máquina didáctica inspirada en cuádrup<strong>la</strong>s<br />
Simple, simi<strong>la</strong>r a una <strong>máquina</strong> RISC<br />
pocos registros<br />
pocas operaciones, simples y ortogonales<br />
Cómoda como código objeto a generar por el compi<strong>la</strong>dor<br />
intérprete-depurador IQ —posibilidad de usar con<br />
VDE<br />
directamente compi<strong>la</strong>ble: subconjunto de C<br />
alta transportabilidad del código Q<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.2
¡<br />
¡<br />
¡<br />
¡<br />
Arquitectura (1/2)<br />
8 registros enteros (32 bits): R0<br />
¡R7<br />
4 registros coma flotante (64 bits): RR0<br />
¡RR3<br />
Memoria de datos<br />
bytes en big endian (preferiblemente alineados)<br />
direcciones de 32 bits<br />
pi<strong>la</strong> (zona estática en su base)<br />
R7 seña<strong>la</strong> al último byte ocupado de <strong>la</strong> pi<strong>la</strong><br />
pi<strong>la</strong> crece (al acceder a el<strong>la</strong>) hacia direcciones<br />
menores<br />
heap, para asignación dinámica<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.3
Arquitectura (2/2)<br />
Tipos de datos<br />
entero-32 sin signo (P)<br />
char/byte sin signo (U)<br />
entero-16 (S) y entero-32 (I)<br />
coma flotante-32 (F) y 64 (D)<br />
Memoria de código<br />
separada de <strong>la</strong> de datos<br />
sólo se puede saltar a instrucciones con etiqueta<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.4
Instrucciones Q (1/2)<br />
Hemos de leer<strong>la</strong>s como instrucciones C (que son :)<br />
únicamente: cálculo, lectura/escritura memoria y<br />
salto<br />
siempre terminadas en punto y coma<br />
pueden llevar etiqueta(s)<br />
R0=-R1;<br />
L 11: R3=R0*-2;<br />
U(R7)=’a’;<br />
R3=I(R7+12);<br />
IF(R3>0) GT(11);<br />
GT(R5);<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.5
Instrucciones Q (2/2)<br />
Operaciones:<br />
operadores binarios y unarios C no asignativos (++,<br />
+=, ..)<br />
Operandos: tipos C en registros y cantidades<br />
reales y enteros (incl. char), signo opcional<br />
Las de acceso a memoria llevan cálculo en dirección<br />
Las de salto llevan cálclo en el IF opcional<br />
¡TODAS LAS DEMÁS COMBINACIONES NO SON<br />
VÁLIDAS EN Q!<br />
Truco: usar IQ para comprobar si instrucción es Q o no<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.6
Dec<strong>la</strong>raciones en Q<br />
Permiten definir estáticamente (antes de ejecución) zonas<br />
de memoria y datos en el<strong>la</strong>.<br />
Ocupan desde Z-1 hacia 0 (por defecto Z=0x12000)<br />
MEM(0x11ff0,8);<br />
FIL(0x11f00,50,0xff);<br />
DAT(0x11ef8,U,’a’);<br />
STR(0x11ee0,”una ristra”);<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.7
Programas en Q<br />
Forma general de un programa en Q:<br />
BEGIN<br />
instrucciones<br />
...<br />
END<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.8
Programas en Q<br />
Forma general de un programa en Q:<br />
BEGIN<br />
instrucciones<br />
STAT(0)<br />
dec<strong>la</strong>raciones<br />
...<br />
END<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.8
Programas en Q<br />
Forma general de un programa en Q:<br />
BEGIN<br />
instrucciones<br />
STAT(0)<br />
dec<strong>la</strong>raciones<br />
CODE(0)<br />
instrucciones<br />
...<br />
END<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.8
Programas en Q<br />
Forma general de un programa en Q:<br />
BEGIN<br />
instrucciones<br />
STAT(0)<br />
dec<strong>la</strong>raciones<br />
CODE(0)<br />
instrucciones<br />
STAT(1)<br />
dec<strong>la</strong>raciones<br />
...<br />
END<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.8
Compi<strong>la</strong>ción de un programa en Q<br />
Normalmente mejor interpretar con IQ: ¡mensajes de<br />
error mucho mejores!<br />
Para compi<strong>la</strong>r: gcc nombre.q.c Qlib.c<br />
Es necesario encabezamiento<br />
#include “Q.h”<br />
—IQ, por compatibilidad, espera tal encabezamiento<br />
Antes de compi<strong>la</strong>r (o interpretar) interviene cpp, lo que<br />
permite usar macros, includes y comentarios tipo C.<br />
Por consiguiente, los “verdaderos” comentarios en Q<br />
tienen <strong>la</strong> forma:<br />
#comentario<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.9
Carga y ejecución<br />
1. Carga: se procesan todas <strong>la</strong>s dec<strong>la</strong>raciones por su<br />
orden<br />
2. Se inicializa R7 alineado justo debajo zona estática<br />
3. Comienza <strong>la</strong> ejecución de instrucciones desde L 0:<br />
GT(-1) breakpoint al interpretar<br />
GT(-2) termina ejecución<br />
Otras etiquetas negativas: Qlib<br />
Si se accede fuera de memoria asignada (p.e. debajo de<br />
R7) normalmente aborta<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.10
Ficheros<br />
Disponibles en serdis/˜ii-pl<br />
Qman.txt definición, insta<strong>la</strong>ción, ¡leer detenidamente!<br />
Q.h macros que definen Q<br />
Qlib.h dec<strong>la</strong>raciones macros opcionales<br />
Qlib.c biblioteca funciones (ampliable)<br />
IQ.o intérprete ya compi<strong>la</strong>do (para insta<strong>la</strong>r)<br />
ejemplos/ algunos programas en Q<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.11
Biblioteca Qlib<br />
Funciones de biblioteca en C l<strong>la</strong>mables desde Q<br />
Facilidad para acceder desde C a registros y<br />
memoria Q —atención: ristras Q en orden inverso<br />
vistas desde C<br />
Incialmente printf y malloc simples<br />
¡El paso de parámetros no tiene por qué coincidir<br />
con el generado por el compi<strong>la</strong>dor para <strong>la</strong>s funciones<br />
que compi<strong>la</strong>!<br />
Reinsta<strong>la</strong>r IQ al modificar Qlib<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.12
Máquina virtual Q<br />
Insta<strong>la</strong>ción: gcc IQ.o Qlib.c -o IQ<br />
Ejecución: IQ nombre.q.c<br />
Depuración: IQ nombre.q.c -g<br />
Comandos:<br />
Ayuda (h)<br />
Visualización registros, memoria, programa y estado<br />
Carga, ejecución, paso a paso, breakpoints<br />
Ejecución interactiva de instrucción Q<br />
Posibilidad de usar con VDE (visualización gráfica pi<strong>la</strong> y<br />
punteros)<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.13
Implementación de una QVM<br />
Q definido en Qman.txt<br />
Estructuras internas de datos, registros y código<br />
Trabajar con resultado de cpp<br />
Procesar primero dec<strong>la</strong>raciones, y luego sólo<br />
instrucciones<br />
Si el lenguaje de implementación no permite ciertas operaciones,<br />
crear funciones “externas” para ello<br />
<strong>Introducción</strong> a <strong>la</strong> <strong>máquina</strong> Q 3.7 (0.1) c 2006 José Fortes Gálvez – p.14