Vistas de página en total

sábado, 22 de junio de 2013

ENTRADA POR TELCADO

    Como se puede ver ya vamos obteniendo resultados en el avance de la estructuración del lenguaje.
     Debemos tener en cuenta, que lo estamos haciendo con la versión más simple de compilador, y que lo estamos haciendo a nuestro modo. No me estoy adaptando a un compilador, estoy creando el mio propio.
    Es por eso que una vez se empieza este proceso, es muy difícil adaptarse a un compilador nuevo. por mucho que se sepa vender el nuevo compilador, siempre tendrá la visión de otra persona y siempre le faltarán cosas desde nuestro punto de vista.
    Es por ello por lo que, mi intención no es implementar in procedimiento, sino demostar a quien lea esto post, que no necesito un gran compilador para hacer grandes cosas, y que muchas veces es mejor partir de uno sencillo, porque me permitirá hacer las cosas a mi gusto.
   Cualquiera que vaya siguiendo estos pasos, ya habrá podido ver que puede cambiar los nombres de las macros, las funciones, o las etiquetas, para crear sus programas de forma más legible para él.

   Igualmente podrá facilmente ampliar cualquier parte, pues no hay nada oculto, ni a nivel de directivas de compilación.
    Más adelante, mostraré la forma de crear directivas de compilación para realizar if, while y for, de forma que al final estaremos creando un lenguaje basándonos en el simplemente en el compilador.

   Esta es la entrada estándar por teclado. Con ella, podremos solicitar entrada de cadenas o de variables.
   Lo interesante de este post es ver como ya vamos obteniendo resultados positivos del trabajo que hemos hecho hasta ahora en la estructuración y organización de nuestra librería.
    Como podéis ver el código fuente de esta librería es sumamente corto. Aunque seguimos trabajando en ensamblador, y seguimos usando un compilador muy, muy simple el TASM 2.0. Sin embargo solo esixten dos instrucciones de ensamblador (pop bp y ret) que pertenecen al fin de la rutina. Como ya habreis apreciado estas funciones se mantienen siempre al final de las rutinas, pues son la recuperación de la pila y el retorno a la función principal.
 
   En el siguiente Post haré una modificación para mejorar y completar esto, de manera que se vea lo facil que es hacer mejoras sin destruir nada de lo anterior.

  !OJO¡  Al usar variables que van a ser usadas como parámetros para una función ha de tenerse en cuenta que si la variable es local se usará su nombre, pero si ha sido pasada como parámetro a la función madre ha de usarse el formato [bp].nombre de la variable. Igualmente usamos Lea si la variable es local y mov si ha sido pasada como parámetro. por eso no usamos la macro sino la copiamos cambiando los lea por mov.
 
SACNF.ASM
; Copyright (C) 2013  José Ángel Moneo Fernández

;    This program is free software: you can redistribute it and/or modify
;    it under the terms of the GNU General Public License as published by
;    the Free Software Foundation, either version 3 of the License, or
;   (at your option) any later version.

;    This program is distributed in the hope that it will be useful,
;    but WITHOUT ANY WARRANTY; without even the implied warranty of
;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;    GNU General Public License for more details.

;    You should have received a copy of the GNU General Public License
;    along with this program.  If not, see <http://www.gnu.org/licenses/>.

include main.mac
include stdio.mac
_modelo exe
_code
rutina _scanf dest, base
      gets numero
      ;atoi [bp].dest,numero+2,[bp].base

  ifndef _atoi
        extrn _atoi:near
  endif
        mov ax,[bp].base
        push ax
        lea ax,numero+2
        push ax
        mov ax,dest
        push ax
        call _atoi
        add sp,6


      pop bp
      ret
_scanf endp
_data
numero db 34,0,35 dup (0)
_end

No hay comentarios:

Publicar un comentario

Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.