18 agosto 2008

Un compilador sencillo paso a paso (12 - Condiciones simples)

Ahora que sabemos hacer saltos, podemos hacer comprobaciones del tipo if..then..else

La idea es que un bloque como

if condicion then
begin
bloque1
end
else
begin
bloque2
end
restoDePrograma


Se podría reescribir como

if not condicion then goto inicioBloque2;
begin
bloque1
goto inicioRestoDePrograma;
end;
inicioBloque2
begin
bloque2
end
inicioRestoDePrograma:
restoDePrograma


Y esa construcción ya tiene una traducción casi directa a ensamblador (y, por tanto, a código máquina).


En cuanto a las condiciones, nos centraremos por ahora en condiciones muy sencillas, del estilo de "if x > 2 then ...".

La forma en que lo haremos en código máquina de Z80 será la siguiente:


  • El primer valor a comparar lo guardaremos en el registro A.

  • El segundo valor lo guardaremos en el registro B.

  • Compararemos los valores guardados en ambos registros, usando la orden CP (que realmente hace una resta entre ambos valores).

  • Usaremos el "flag" adecuado para cada tipo de comparación: para "if a = b" usaríamos "JP Z" (saltar si se activa el flag Z porque el resultado de la última operación sea cero); para "if a <> b" usaríamos "JP P" (saltar si resultado positivo).



También es necesario algún otro cambio pequeño en el fuente, para permitir bloques begin...end, pero eso es muy sencillo...

2 comentarios:

Unknown dijo...

Hola, recién he descubierto tu blog y el tutorial que estás haciendo sobre creación de compiladores :) , me ha parecido una idea bastante interesante, la verdad. Aún me falta bastante para hacer esa asignatura en la universidad y tengo demasiada curiosidad como para esperar. (Por cierto, ¿fuiste tú quien hizo el tutorial para hacer juegos con Allegro? Con lo que aprendí hice mi trabajo de fin de bachillerato! :D)

Solo una cosa ¿como es que solo pones un post por página? marea un poco tener que estar dando al "páginas anteriores" todo el rato :p .

Saludos :) .

Nacho Cabanes dijo...

¿Tutorial de juegos? Sí, es posible que fuera mío... ;-)

Y lo de un único post por página es porque normalmente hablo de temas no demasiado relacionados: proyectos que haga yo, herramientas que use y me parezca interesante compartir, dudas frecuentes de mis alumnos, etc.

Aun así, si te interesa el proyecto del compilador, sabes que en la página en Google Code tienes toda la información junta, con los fuentes, de modo que posiblemente te será más cómodo consultarlo allí.