Vistas de página en total

lunes, 6 de mayo de 2013

ARGUM

ARGUM.MAC - TOMA DE ARGUMENTOS DE LA LÍNEA DE COMANDOS


Al igual que en "C", necesitamos tomar los argumentos que nos pasen del sistema, al ejecutar un programa, desde la linea de comandos, para tratarlos en nuestro programa. Esta función llamada como en "C", toma el argumento indicado, para poder tratarles posteriormente.

  En realidad son dos funciones ARGV y ARGC.
  
  Argc nos dará el número de argumentos y Argv nos permitirá tomar un puntero uno específico.
  Los datos de argumentos están cargados en la memoria, como una lista de cadenas. El proceso de descomponer la linea de comandos y almacenar cada argumento en una cadena independiente la realiza una rutina llamada Main, que será expuesta posteriormente y que será llamada al comienzo de cada programa, para la correcta inicialización de este.

  Este caso es más complejo que el anterior. Esta función utiliza el precompilador para crear una macro con parámetro adicional. El numero, que nos permitirá recoger el argumento que necesitemos de la lista de argumentos, y la dirección, que nos dirá en que dirección de memoria está este argumento.

   la función ifdif nos va a permitir usar la macro de dos modos. Podremos indicar en su llamada el argumento deseado y la dirección en la que queremos que nos almacene el puntero del argumento, o podemos no indicar argumentos y tomar bl y ax como indice y puntero por respectivamente. Esto nos permitirá utilizar la función en bucles ahorrando código, si utilizamos bl como contador.

  Como se ve la función es macro directa, su código es muy corto y no tiene sentido almacenarla en librería.
  En cambio se declara una función y dos variables que no están usadas. Las declaraciones extrn están puestas para indicar al compilador las variables  declaradas en _lin_comand.
   Están aquí y no en Main.mac, que es donde se usan, para que podamos eliminarlas de la compilación, simplemente no incluyendo esta cabecera si no necesitamos usar argumentos.
    


ARGUM.MAC
; 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/>.

     
extrn _argv:word     
extrn _argc:byte


argc macro dato
        mov dato,_argc
endm


argv macro numero,direccion
        push bx
        mov bh,0
   ifdif <numero>,<bl>    ;DECLARACION CONDICIONAL PARA USO CON Y SIN PARÁMETROS
        mov bl,numero
    endif
        dec bx
        shl bx,1
        add bx,offset _argv
        mov ax,[bx]
        pop bx
    ifdif <numero>,<ax>  ;DECLARACION CONDICIONAL PARA USO CON Y SIN PARÁMETROS
        mov direccion,ax
    endif
endm

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.