• Lunes 12 de Mayo de 2025, 03:00

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - GsOiD

Páginas: 1 2 3 [4]
76
C/C++ / Re: Bmp En Escala De Grises A Bmp Monocromo
« en: Sábado 15 de Septiembre de 2007, 00:47 »
Hace tiempo trabajé con BMP's hice un programita que transformaba bitmaps a escala de grices... quizá esto te de una idea:

//TRANSFORMA A GRISES ARCHIVOS BMP

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define MAX_NOMARCH 256


int main (int argc, char *argv[])
{
   FILE *fpin;
   char *nome, str[MAX_NOMARCH + 1], id[] = "  ";
   long int despl, ancho, alto, bxp;

   if (argc > 1)
      nome = argv[1];
   else {
      printf ("Archivo BMP que se va a transformar: ");
      fgets (str, MAX_NOMARCH, stdin);
      nome = str;
   }

   if ((fpin = fopen (nome,"rb")) == NULL) {
      fprintf (stderr, "Error al abrir el archivo %s\n", nome);
      exit (EXIT_FAILURE);
   }

   printf ("Datos de la imagen:\n");
   fread (id, 2, 1, fpin);
   printf ("\tIdentificador de bitmap: %s\n", id);
   fseek (fpin, 10L, SEEK_SET);
   fread (&despl, sizeof (long), 1, fpin);
   printf ("\tDesplazamiento a los datos: %ld\n", despl);
   fseek (fpin, 18L, SEEK_SET);
   fread (&ancho, sizeof (long), 1, fpin);
   fread (&alto, sizeof (long), 1, fpin);
   printf ("\tDimensiones de la imagen, ancho: %ld, alto: %ld\n", ancho, alto);
   fseek (fpin, 28L, SEEK_SET);
   fread (&bxp, sizeof (long), 1, fpin);
   printf ("\tBits por pixel: %ld\n", bxp);

   if (strcmp (id, "BM"))
   { fprintf (stderr, "La imagen debe ser un bitmap.\n"); }

   //CAMBIO A GRIS PARA IMAGENES DE 8 BITS
   if(bxp==8)
   {
    int i;
    FILE *fpout;
    fseek (fpin, 0L, SEEK_SET);
    fpout = fopen ("Igris.bmp", "wb");
    for (i=0; i < despl; i++)
    fputc (fgetc (fpin), fpout);
    for (i=0; i < ancho * alto; i++) {
    int j,gris;
    char r, g, b, q;
    fread (&b, sizeof (0.25), 1, fpin);
    fread (&g, sizeof (0.25), 1, fpin);
    fread (&r, sizeof (0.25), 1, fpin);
    read(fpin,&q,(0.25));
    gris=(0.299*r)+(0.587*g)+(0.144*B);
         for (j = 0; j < 3; j++)
        fwrite (&gris, sizeof (0.25), 1, fpout);
    }
  fclose (fpout);
  printf ("\n\tArchivo en escala de grises ----> Igris.bmp\n");
 }
   
// CAMBIO A GRIS PARA ARCHIVOS DE 1,4 Y 24 BITS.
   else if(bxp!=8)  {
      int i;
      FILE *fpout;
      fseek (fpin, 0L, SEEK_SET);
      fpout = fopen ("Igris.bmp", "wb");
      for (i=0; i < despl; i++)
         fputc (fgetc (fpin), fpout);
      for (i=0; i < ancho * alto; i++) {
         int j,gris;
         char r, g, b;
         fread (&r, sizeof (char), 1, fpin);
         fread (&g, sizeof (char), 1, fpin);
         fread (&b, sizeof (char), 1, fpin);
         gris=(0.299*r)+(0.587*g)+(0.144*B);
    for (j = 0; j < 3; j++)
             fwrite (&gris, sizeof (char), 1, fpout);
      }
      fclose (fpout);
      printf ("\n\tArchivo en escala de grises ----> Igris.bmp\n");
   }
   fclose (fpin);

Espero te sirva de algo , la lógica es similar para lo que buscas hacer... es cuestión de hacer sólo unas pequeñas modificaciones =)..

77
ASM (Ensamblador) / Lectura Bit A Bit
« en: Sábado 15 de Septiembre de 2007, 00:38 »
Hola a todos  :hola: , quisiera saber que es eso de leer bit a bit el puerto paralelo, anteriormente ya había escrito en el puerto:

; Programa Puerto Paralelo como salida
   
                mov     al, 00h
      mov   dx, 37Ah
      out   dx, al
   
; Envia Ceros y Unos al Bit cero del Puerto Paralelo

                Mov     Cx,0FFFFH
atras:        mov   dx, 378h
                mov     al, 00h         ; Pone Ceros
      out    dx, al
      call     Retardo
                mov     dx, 378h
                mov     al, 01h         ; Pone Unos
      out   dx, al
                Call    Retardo
                Loop    atras
                Jmp     Salta

pero no se si ¿esto es bit a bit?, les agradezco la información que me puedan dar sobre este tema, de antemano muchas gracias =D.

78
PHP / Re: Apache
« en: Domingo 9 de Septiembre de 2007, 20:46 »
muchas gracias por la información =D...  y no había visto el foro de servidores por eso es que he colocado mi pregunta en este  :whistling: .. no volverá a pasar  :P

79
PHP / Re: Encriptar Codigo
« en: Sábado 8 de Septiembre de 2007, 23:13 »
conosco algo que se llaman CGI's según tengo entendido es para hacer partes de paginas web de las cuales no quieres que se sepa nada del código, yo he manejado un poco esto, los cgi's que he hecho los programo en bash, claro que es un poco latoso hacer esto pero vale la pena....

80
PHP / Apache
« en: Sábado 8 de Septiembre de 2007, 23:09 »
Hi, soy nueva en esto de la programación web, resulta que trabajo con linux y he probado que puedo tener el servidor de apache funcionando sin necesidad de que tenga  que activarlo, sólo basta con cambiar el tipo de módulo, es decir indicandole que se levante sólo.... esto tambien se puede hacer si manejo windows xp?¿

81
HTML / Re: Saltos De Línea En Parrafos
« en: Sábado 8 de Septiembre de 2007, 22:59 »
La segunda...
El estándar XHTML dice que toda etiqueta debe ser cerrada, incluso las llamadas etiquetas vacías.


según eso entonces por que me funciona bien cuando lo utilizo de la manera disque incorrecta <BR>  ?¿?¿... la utilizo así y me funciona bien para hacer saltos de linea... ¿será por que estoy trabajando con bash en linux? ...  :blink:

82
PHP / Re: Video Tutorial Php-sql + Aplicaciones Php
« en: Sábado 8 de Septiembre de 2007, 22:52 »
Interesante la información que proporcionas en tu foro...  me parece muy bueno  lo de los videotutoriales... =D

83
Pascal / Re: Programa Encuesta
« en: Sábado 8 de Septiembre de 2007, 08:52 »
Me imagino que quieres una especie de mejora en la lógica que maneja tu programa, y me temo que eso es cosa que tu debes hacer... así mejorarás tu razonamiento lógico =)

84
C/C++ / Re: Librerias En C++
« en: Sábado 8 de Septiembre de 2007, 08:36 »
Existen ciertas librerias estandar, es decir que las verciones de c++ las contienen, por ejemplo la conio.h, stdio.h, etc.... y si buscan una en específico ps sólo basta con checar la sección help e ir a topic search  y estan funciones y de mas cosas en orden alfabético.....  bueno, almenos esto me funciona a mi, que tengo la verción 3.0 de c++ =D...

85
ASM (Ensamblador) / Regreso De Un Largo Viaje...
« en: Sábado 8 de Septiembre de 2007, 08:12 »
Hola, tiene tiempo que no frecuento estos rumbos... resulta que regreso a las andadas, ahora con la novedad de que me han dado ganas de hacer unos proyectitos que requieren saber un poco del puerto paralelo.. ya antes había hecho algo con el, pero resulta que manejé sólo salidas de datos enviadas desde programa hacia el mundo exterior.. si no es mucha molestia les pido por favor me den la pequeña rutina de como leer datos con tasm ya que no la encuentro ... ='( ...  y de paso algunos consejillos para trabajar con entradas hacia el paralelo, no vaya a ser que queme mi ordenador xD...


muchas gracias por su ayuda... =)

86
ASM (Ensamblador) / Re: Programaciòn Hibrida
« en: Miércoles 13 de Junio de 2007, 00:54 »
&lt;_&lt;  rayos, me han dicho que es la mejor manera de poder tener un mejor control de los dispositivos de mi compu, y segùn he leido se utiliza para generar codigos de celulares y de rutinas del bios... lo que intento hacer aprendiendo esto es tener un mejor acceso a los recursos que me ofrece mi compu y todos eso..  :P ... si hay una mejor manera de poder hacer esto y de forma màs censilla , os ruego me lo digan, ya que es la ùnica opciòn que me han comentado por la que puedo optar..  :D  

y gracias por la info que me han proporcionado en este foro..  :)

87
ASM (Ensamblador) / Re: Programaciòn Hibrida
« en: Martes 12 de Junio de 2007, 08:19 »
que rapido... wow....  :lol: ...... ya los he compilado los dos primeros... ya se como se compila esto, pero ahora quiero info de como puedo enviar paràmetros creo q asì se dice... a TASM, no encuentro mucho de esto en intenet... quiero enviar el mensaje que capturo desde teclado con c++ a tasm, el tercer programita que escribì, es sòlo un boseto... la funciòn mensaje(texto)... es segùn como supongo que se  manda el arreglo... pero no estoy segura ...  :D

88
ASM (Ensamblador) / Programaciòn Hibrida
« en: Martes 12 de Junio de 2007, 08:00 »
Hola.... quien pueda proporcionarme informaciòn sobre programaciòn hibrida, os agradesco..  :P , lo que intento hacer es enviar un mensaje desde c++ capturado de teclado a tasm he hecho esto:

.MODEL SMALL
.DATA
   Mensaje   DB  13,10,13,10,'Es de ensamblador okis dokis ??'
                  DB  13,10,13,10,'$'
  .CODE                       ; Area de codigo
PUBLIC _Mensaje
_Mensaje PROC
  push bp
  push si
  push ds
  mov  DX,offset Mensaje
  mov Ah,9
  int 21h
  pop ds
  pop si
  pop bp
ret
_Mensaje ENDP
END

////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
extern "C" Mensaje();
main()
{
printf("\n Turbo C++ antes de ensamblador...");
Mensaje();
printf("Turbo C++ despues de ensamblador...\n");
return(0);
}

pero ya no se como pasar una cadena o algo asì.. a tasm   :whistling:  cualquier info es de ayuda..

hice esto en c++:

#include <stdio.h>
extern "C" Mtexto();
char texto[20];
main()
{
printf("\n Introduce Mensaje: ");
gets(texto);
return(0);
}
 pero hora como se lo mando al tasm ¿?  :P ...  gracias por la info que puedan proporcionar...

89
ASM (Ensamblador) / Re: Enviando Dato Ascii
« en: Sábado 9 de Junio de 2007, 05:17 »
:hola:  Muchas gracias... mi programita a quedado re chulo :P os muestro aquì :   :rolleyes:

;******************************************************************************
; Nombre del programa   :   CONTANDO.ASM
; Objetivo              :   Realizar manejo del puerto
;******************************************************************************
; COMANDO DE ENSAMBLE   : Tasm CONTANDO.ASM;
; COMANDO DE ENLACE     : Tlink CONTANDO;
; COMANDO DE EJECUCION  : CONTANDO [Enter]
;******************************************************************************
;------------------------------------------------------------------------------
; Define el MODELO DE MEMORIA
;------------------------------------------------------------------------------
.MODEL SMALL
;------------------------------------------------------------------------------
; Define el area DE DATOS
;------------------------------------------------------------------------------
.Data
  ErrorCAP DB  0     ; Bandera de error en la captura de las cantidades
  Cantidad DB  0     ; La cantidad sobre la que se opera. Si es 0 se opera
                     ; sobre la cantidad 1, si es 1 se opera sobre la
                     ; cantidad 2.
  CantUnoR DW  0     ; Variable que guarda la cantidad 1 convertida a binario.
  CantDosR DW  0     ; Variable que guarda la cantidad 2 convertida a binario.
  CantUnoN DB  4,0,4 DUP(?)  ; Variable que almacena la cantidad 1
  CantDosN DB  4,0,4 DUP(?)  ; Variable que almacena la cantidad 2
  Funcion  DB  0             ; Variable que guarda la funcion a realizar
  Resulta  DB  13,10,13,10,'NuMeRoS: $'
  ResultaR DB  11 DUP('?')
  Mensaje  DB  'Bienvenidos a Contando,... Al fin terminamos banda GsOiD'
          DB  13,10,13,10,'$'
  Pregunta DB  13,10,13,10,'DIGITE:',13,10,13,10
           DB  ' (1) para Incrementar.',13,10
           DB  ' (2) para Decrementar.',13,10
           DB  ' (3) para Autor.',13,10
           DB  ' (4) para TERMINAR.',13,10,'$'
  Error    DB  7,7,7,13,10,'ERROR : en la seleccion de las opciones.'
           DB  13,10,13,10,'$'
  Error1   DB  7,7,7,13,10,'ERROR : digito INVALIDO en CANTIDAD 1.'
           DB  13,10,13,10,'$'
  Error2   DB  7,7,7,13,10,'ERROR : digito INVALIDO en CANTIDAD 2.'
           DB  13,10,13,10,'$'
  Error3   DB  7,7,7,13,10,'ERROR : cantidad fuera de RANGO ( 255).'
          DB  ' !!!.'
           DB  13,10,13,10,'$'
  CantunoM DB  13,10,13,10,'DiGiTe CaNtIdAd (debe ser < a 256)'
          DB  ' : $'
  CantDosM DB  13,10,13,10,'NúMeRo de Inc o Dec'
          DB  ' : $'
           DB  13,10,13,10
  Autores  DB  'Code by EsToIcA GsOiD   !  ',13,10
       DB  13,10,13,10,'$'

;------------------------------------------------------------------------------
; TABLA DE POTENCIAS USADA PARA CONVERTIR EL RESULTADO BINARIO DE LA
; OPERACION EN FORMATO ASCII.
;------------------------------------------------------------------------------
  Potencia  DW  0001h, 000ah, 0064h  ;, 03E8h, 2710h
;------------------------------------------------------------------------------
; Define el area del Stack
;------------------------------------------------------------------------------
.STACK
;------------------------------------------------------------------------------
; Define el area de codigo
;------------------------------------------------------------------------------
.CODE                       ; Area de codigo
;------------------------------------------------------------------------------
; Inicia programa
;------------------------------------------------------------------------------
Empieza:                    ; Etiqueta de comienzo de programa
;------------------------------------------------------------------------------
; BORRA LA PANTALLA CAMBIANDO LA MODALIDAD DE VIDEO.
;------------------------------------------------------------------------------
  Mov  Ah, 0Fh              ; Obtiene la modalidad de video actual
  Int  10h
  Mov  Ah, 0                ; Cambia la modalidad de video que se obtuvo
  Int  10h
  Mov  Ax,@Data             ; Inicializa DS con la direccion de @Data
  Mov  Ds, Ax
  Mov  Dx, Offset Mensaje   ; Despliega el mensaje de bienvenida
  Call Imprime
  Mov  Si, Offset ResultaR  ; Inicializa la variable ResultaR
  Add  Si, 11
  Mov  Al, '$'
  Mov  [Si], Al
;------------------------------------------------------------------------------
; SE DESPLIEGA EL MENU DE OPCIONES A ELEGIR.
;------------------------------------------------------------------------------
OTRA:
  Mov  Dx, Offset Pregunta  ; Despliega menu de opciones
  Call Imprime
  Call ObtenTecla           ; Espera a que el usuario seleccione la
                            ; funcion a realizar (1 a 4)
  Cmp  Al, 49               ; La seleccion del usuario es mayor o igual
  Jae  SIGUE                ; a 1 ?.
  Mov  Dx, Offset Error     ; NO, despliega mensaje de error
  Call Imprime
  Jmp  OTRA

SIGUE:
  Cmp  Al, 52               ; La seleccion del usuario es menor o igual
  Jbe  TODOBIEN             ; a 4?.
  Mov  Dx, Offset Error     ; NO, despliega mensaje de error
  Call Imprime
  Jmp  OTRA

TODOBIEN:
  Cmp  Al, 52
  Jnz  CHECATODO
  Jmp  FUNCION4

CHECATODO:
  Mov  Funcion, Al          ; Guarda la funcion a realizar
;------------------------------------------------------------------------------
; SE CAPTURAN LAS CANTIDADES Y SE GUARDAN EN SUS RESPECTIVAS VARIABLES PARA
; PODER TRABAJAR SOBRE ELLAS MAS ADELANTE.
;------------------------------------------------------------------------------
;------------------------------------------------------------------------------
; CAPTURA PRIMER CANTIDAD.
;------------------------------------------------------------------------------

CAPCANT01:
  Mov  Dx, Offset CantUnoM  ; Mensaje de captura de cantidad 1
  Call Imprime
  Mov  Ah, 0Ah              ; Captura la cantidad (hasta 3 digitos)
  Mov  Dx, Offset CantUnoN
  Int  21h
  Mov  ErrorCAP, 0          ; Supone que no hay errores y que se esta
  Mov  Cantidad, 0          ; operando sobre la cantidad 1.
  Call ConvNUM              ; Convierte cantidad 1 a binario
  Cmp  ErrorCAP, 1          ; ¨Hubo error?
  Jz   CAPCANT01            ; S¡, regresa a la captura
  Mov  CantUnoR, Bx         ; Guarda resultado de conversion
  cmp  CantUnoR,255
  jg   CAPCANT01
   
;------------------------------------------------------------------------------
; CAPTURA SEGUNDA CANTIDAD.
;------------------------------------------------------------------------------
CAPCANT02:
  Mov  ErrorCAP, 0          ; Supone que no hay error
  Mov  Cantidad, 1          ; Indica a ConvNUM que es la segunda cantidad
  Mov  Dx, Offset CantDosM  ; Mensaje de captura de cantidad 2
  Call Imprime
  Mov  Ah, 0Ah              ; Captura la segunda cantidad
  Mov  Dx, Offset CantDosN
  Int  21h
  Call ConvNUM              ; Convierte cantidad 2 a binario
  Cmp  ErrorCAP, 1          ; ¨Hay error?
  Jz   CAPCANT02            ; S¡, regresa a capturar la cantidad
  Mov  CantDosR, Bx         ; Guarda conversion de cantidad 2

;------------------------------------------------------------------------------
; DESPUES DE CAPTURAR LAS DOS CANTIDADES SOBRE LAS CUALES SE VA A OPERAR,
; SE DEFINE CUAL ES LA FUNCION POR REALIZAR.
;------------------------------------------------------------------------------
  Mov  Al, Funcion          ; Funcion que selecciono el usuario
  Cmp  Al, 31h              ; Es 1?
  Jne  FUNCION2             ; No.
  Call Incrementa           ; Incremento
  Jmp  OTRA
FUNCION2:
  Cmp  Al, 32h              ; Es 2?
  Jne  FUNCION3             ; No.
  Call Decrementa           ; Decrementa
  Jmp  OTRA
FUNCION3:
  Cmp  Al, 33h              ; Es 3?
  Jne  FUNCION4             ; No.
  Call MuestraAutores       ; Muestra Autores
  Jmp  OTRA

FUNCION4:
;------------------------------------------------------------------------------
; TERMINA EL PROGRAMA
;------------------------------------------------------------------------------
  Mov  Ax, 4C00h          ; Termina el programa sin errores.
  Int  21h
;******************************************************************************
;                   R U T I N A S    D E    S O P O R T E
;******************************************************************************
;------------------------------------------------------------------------------
; Rutina      : Incrementa
;------------------------------------------------------------------------------
Incrementa Proc Near
  Mov  Ax, CantUnoR         ; Primera cantidad (multiplicando)
  Call Incremento  
  ;Call convASCII
  ;Mov  Dx, Offset Resulta   ; Despliega la cadena del resultado
  ;Call Imprime
  ;Mov  Dx, Offset ResultaR  ; Despliega el resultado.
  ;Call Imprime
  Ret
Incrementa Endp

Incremento proc near
   mov   ax, 00h
   mov   dx, 37Ah
   out   dx, ax
   
   
     
atras:          mov     dx, 378h      ;Indica que puerto se utiliza como salida
                mov     ax, CantUnoR  ;Envía la cantidad uno determinada en el segmento de           Not     ax            ;invierte el dato que enviará al puerto
                Not     ax
                out   dx, ax      ;Envia el dato al puerto paralelo
                cmp     CantDosR,0
          je      salta
             mov     dx,00h
                mov     ax,00h
                mov     ax,CantUnoR
                Call    ConvASCII
                mov     Dx, Offset ResultaR
          call    Imprime  
                inc     CantUnoR      ;Incrementa en uno el valor del dato uno
          dec     CantDosR
                Call    Retardo       ;llama a retardo para poder visualizar el dato
                Loop    atras         ;Itera hasta que llegue al dato maximo
salta:  
  ret
Incremento endp

Retardo Proc Near
                mov     Ax,00ffh
atras0:         mov     Bx,0ffffh
atras1:       nop
                dec     Bx
                cmp     Bx,0000h
          jne   atras1
                dec     Ax
                cmp     Ax,0000h
                jne     atras0
   ret
Retardo Endp

;------------------------------------------------------------------------------
; Rutina      : Decrementa
;------------------------------------------------------------------------------
Decrementa Proc Near
  Mov  Ax, CantUnoR        
  Call Decre  
  ;Mov  Dx, Offset Resulta   ; Despliega la cadena del resultado
  ;Call Imprime
  ;Mov  Dx, Offset ResultaR  ; Despliega el resultado.
  ;Call Imprime
  Ret
Decrementa Endp

Decre proc near
   mov   ax, 00h
   mov   dx, 37Ah
   out   dx, ax
       
atras3:         mov     dx, 378h      ;Indica que puerto se utiliza como salida
                mov     ax, CantUnoR  ;Envía la cantidad uno determinada en el segmento de           Not     ax            ;invierte el dato que enviará al puerto
                Not     ax
                out   dx, ax      ;Envia el dato al puerto paralelo
                cmp     CantDosR,0
          je      salta2
             mov     dx,00h
                mov     ax,00h
                mov     ax,CantUnoR
                Call    ConvASCII
                mov     Dx, Offset ResultaR
          call    Imprime  
                dec     CantUnoR      ;Incrementa en uno el valor del dato uno
          dec     CantDosR
          Call    Retardo       ;llama a retardo para poder visualizar el dato
                Loop    atras3         ;Itera hasta que llegue al dato maximo
salta2:  
  ret
Decre endp
;------------------------------------------------------------------------------
; Rutina      :Muestra Autores
;------------------------------------------------------------------------------
MuestraAutores Proc Near
  Mov  Dx, Offset Autores  ; Despliega nombre de autores
  Call Imprime
  ret
MuestraAutores Endp

;------------------------------------------------------------------------------
; Rutina      : Imprime
; Prop¢sito   : Despliega una cadena
; Par metros  : El registro DX contiene el desplazamiento de la cadena
; Regresa     : Nada
;------------------------------------------------------------------------------
Imprime Proc Near
  Mov  Ah, 9               ; Prepara para desplegar la cadena a traves de la
  Int  21h                 ;  INT 21h.
  Ret
Imprime Endp
;------------------------------------------------------------------------------
; Rutina      : ObtenTecla
; Proposito   : Espera a que el usuario digite una tecla
; Parametros  : Ninguno
; Regresa     : En el registro AL el codigo ASCII de la tecla
;------------------------------------------------------------------------------
ObtenTecla Proc Near
  Mov  Ah, 0               ; Lee una tecla del teclado a traves de la INT 16h
  Int  16h
  Ret
ObtenTecla Endp
;------------------------------------------------------------------------------
; Rutina      : ConvNUM
; Prop¢sito   : Convertir una cadena a un entero largo
; Par metros  : La longitud de la cadena y la direccion de la misma, y se
;               pasan a la pila.
; Regresa     : En el registro BX la cadena convertida en un entero
;------------------------------------------------------------------------------

ConvNUM Proc Near
  Mov  Dx, 0Ah                   ; Multiplicador es 10
  Cmp  Cantidad, 0               ; ¨Es la cantidad 1?
  Jnz  CONVNUM01                 ; NO, asi que es la cantidad 2
  Mov  Di, Offset CantUnoN + 1   ; Bytes leidos de la cantidad 1
  Mov  Cx, [Di]
  Mov  Si, Offset CantUnoN + 2   ; La cantidad 1
  Jmp  CONVNUM02

CONVNUM01:
  Mov  Di, Offset CantDosN + 1   ; Bytes leidos de la cantidad 2
  Mov  Cx, [Di]
  Mov  Si, Offset CantDosN + 2   ; La cantidad 2

CONVNUM02:
  Xor  Ch, Ch                    ; CH = 0
  Mov  Di, Offset Potencia       ; Direccion de la tabla de potencias
  Dec  Si                        ; Posiciona Si en el primer byte de la
  Add  Si, Cx                    ; cadena capturada y le suma el
  Xor  Bx, Bx                    ; desplazamiento de bytes leidos
  Std                            ; para que podamos posicionarnos en el
                                 ; final de la misma (apunta al ultimo
                                 ; digito capturado). BX = 0 y lee la
                                 ; cadena en forma inversa; es decir, de
                                 ; atras hacia adelante.

CONVNUM03:
  Lodsb                 ; Levanta un byte del numero (esta instruccion indica
                        ; que el registro AL sera cargado con el contenido
                        ; de la direccion apuntada por DS:SI).
  Cmp  AL,"0"           ; ¨Es menor a 0? (entonces NO es un digito valido)
  Jb   CONVNUM04        ; S¡, despliega el mensaje de error y termina
  Cmp  AL,"9"           ; ¨Es mayor a 9? (entonces NO es un d¡gito valido)
  Ja   CONVNUM04        ; S¡, despliega el error y salta
  Sub  Al, 30h          ; Convierte el digito de ASCII a binario
  Cbw                   ; Convierte a palabra
  Mov  Dx, [Di]         ; Obtiene la potencia de 10 que sera usada para
  Mul  Dx               ; multiplicar, multiplica numero y lo suma
  ;Jc   CONVNUM05        ; a BX. Revisa si hubo acarreo, y si lo hubo, esto
  Add  Bx, Ax           ; significa que la cantidad es > 65535.
  ;Jc   CONVNUM05        ; Si hay acarreo la cantidad es > 65535
  Add  Di, 2            ; Va a la siguiente potencia de 10
  Loop CONVNUM03        ; Itera hasta que CX sea = 0
  Jmp  CONVNUM06

CONVNUM04:
  Call HuboERROR        ; Algo ocurrio, despliega mensaje y salta
  Jmp  CONVNUM06

CONVNUM05:
  Mov  Cantidad, 2      ; Hubo acarreo en la conversion, por lo tanto la
  Call HuboERROR        ; cantidad capturada es mayor a 65535.

CONVNUM06:
  Cld                   ; Regresa la bandera de direccion a su estado normal
  Ret                   ; y REGRESA.

ConvNum Endp

;------------------------------------------------------------------------------
; Rutina      : ConvASCII
; Prop¢sito   : Convertir un valor binario en ASCII
; Par metros  : El registro par DX:AX
; Regresa     : Nada, pero almacena el resultado en el buffer ResultaR
;------------------------------------------------------------------------------

ConvASCII Proc Near

;------------------------------------------------------------------------------
; Lo primero que se hace es inicializar la variable que contendra el
; resultado de la conversion.
;------------------------------------------------------------------------------

  Push Dx
  Push Ax                  ; Guarda el resultado
  Mov  Si, Offset ResultaR ; Inicializa la variable ResultaR llenandola
  Mov  Cx, 10              ; con asteriscos
  Mov  Al, '*'

ConvASCII01:
  Mov  [Si], Al
  Inc  Si
  Loop ConvASCII01
  Pop  Ax
  Pop  Dx
  Mov  Bx, Ax                  ; Palabra baja de la cantidad
  Mov  Ax, Dx                  ; Palabra alta de la cantidad
  Mov  Si,Offset ResultaR      ; Cadena donde se guardara el resultado
  Add  Si, 11
  Mov  CX, 10                  ; Divisor = 10

OBTENDIGITO:
  Dec  Si
  Xor  Dx, Dx                  ; DX contendra el residuo
  Div  Cx                      ; Divide la palabra alta (AX)
  Mov  Di, Ax                  ; Guarda cociente (AX)
  Mov  Ax, Bx                  ; AX = palabra baja (BX)
  Div  Cx                      ; DX tenia un residuo de la division anterior
  Mov  Bx, Ax                  ; Guarda el cociente
  Mov  Ax, Di                  ; Regresa la palabra alta
  Add  Dl,30h                  ; Convierte residuo en ASCII
  Mov  [Si], Dl                ; Lo almacena
  Or   Ax, Ax                  ; ¨Palabra alta es 0?
  Jnz  OBTENDIGITO             ; No, sigue procesando
  Or   Bx, Bx                  ; ¨Palabra baja es 0?
  Jnz  OBTENDIGITO             ; No, sigue procesando
  Ret

ConvASCII Endp

;------------------------------------------------------------------------------
; Rutina      : HuboERROR
; Prop¢sito   : Desplegar el mensaje de error adecuado.
; Par metros  : Nada
; Regresa     : Nada
;------------------------------------------------------------------------------

HuboERROR  Proc Near

  Cmp  Cantidad, 0        ; ¨Es la cantidad 1?
  Jnz  HUBOERROR02        ; No.
  Mov  Dx, Offset Error1
  Call Imprime
  Mov  ErrorCAP, 1        ; Enciende la bandera de error
  Jmp  HUBOERROR05

HUBOERROR02:
  Cmp  Cantidad, 1        ; ¨Es la cantidad 2?
  Jnz  HUBOERROR03        ; No.
  Mov  Dx, Offset Error2
  Call Imprime
  Mov  ErrorCAP, 1
  Jmp  HUBOERROR05

HUBOERROR03:
  Cmp  Cantidad, 2        ; ¨Cantidad capturada esta fuera de rango ?
  Jnz  HUBOERROR05        ; No.
  Mov  Dx, Offset Error3
  Call Imprime
  Mov  ErrorCAP, 1
 
HUBOERROR05:
  Ret

HuboERROR Endp

;------------------------------------------------------------------------------
; Termina programa
;------------------------------------------------------------------------------

  End  Empieza

Agrego que hay cosillas que no se ocupan pero me dìo flojera quitarlas  :P ... despues de todo no hando tan mal en esto del ensamblador...
Ademas dicen que se ocupa pa los celulares y no se q otras cosas... entons seguirè en esto... si ago otros programitas os enviarè pa que los vean... jijijijijiji   :D

90
ASM (Ensamblador) / Enviando Dato Ascii
« en: Jueves 7 de Junio de 2007, 08:21 »
Os molesto de nuevo.... me han dicho que nomàs no quieren con otro programita...  que a producto de gallina debe ser en ensamblador... dis que pa tener mayor control del dispositivo que manejamos...  tengo esto:

mov dl, caracter ascii
mov ah, 05h
int 21h

esto me sirve igual que esto:

mov dx, 378h
mov al, dato  
out  dx, al

????

ya puedo enviar datos numericos, pero  quiero enviar un dato que muestro en pantalla al puerto, este dato  fuè convertido a ASCII antes de ser enviado a pantalla.. y asì quiero enviarlo al paralelo....  se podra??  

Y agrego:  me disculpo por mi actitud inicial... y si q no es tarea.. me urge por que es un proyecto con unos cuates .....  y muchas gracias por la info que me puedan proporcionar   :) ...

91
ASM (Ensamblador) / Re: Encender 8 Leds
« en: Domingo 3 de Junio de 2007, 01:29 »
:hola:  Aquì os va una ayudada....


EDITADO:

NO HACEMOS TAREAS Y MUCHO MENOS A GENTE QUE DEJA UN MENSAJE Y NO APARECE NUNCA MAS POR EL FORO.

92
ASM (Ensamblador) / Re: Escribiendo En Puerto Paralelo
« en: Domingo 3 de Junio de 2007, 01:14 »
Ok ... comprendo... pero no os preocupeis.. que no es tarea, bueno, asì como lo expliquè creo que eso doy a entender  :P  ....... como sea...  ya he encontrado un programa que hace esto... aùn que no es ensambaldor està muy bueno.....   y calmado Idolo eterno...  :D

Bueno, seguirè en este sitio pa aquellos novatos que quieran entrar en el mundo de la programaciòn con gusto os ayudarè  :), claro, menos en ensamblador jejejeje, ... tambien se algo de circuitos, y de openGL, y un poco del mundo linux...



Chao...

93
ASM (Ensamblador) / Escribiendo En Puerto Paralelo
« en: Viernes 1 de Junio de 2007, 07:07 »
Hola, me han dado buenas referencias de este foro, y es por eso que os pido ayuda....!!

Os explico lo que estoy tratando de hacer... he armado un circuito en un protoboar que tiene un buffer 74LS244 el cual se conectan las entradas de este CI a las salidas de datos del puerto paralelo... a su vez 8 leds con sus resistencias adecuadas cada uno, se conectan a las salidas del buffer.. lo que pretendo hacer es un còdigo en ensamblador que haga una cuenta ascendente que estè en un procedimiento,  enviando los datos al puerto paralelo LTP1 uno por uno, de tal manera que puedan verse en los leds los datos de salida, por asì decirlo...
es decir que el programa envìe un cero al inicio y que se vea en los leds, despues un uno, y asì sucesivamente hasta el nùmero màximo que serìa ver todos los leds encendidos...

Estoy trabajando en TASM con windows 98 y en una compu compatible con IBM...

Os agradecerìa bastante si me pudieran enviar un còdigo de este procedimiento que pretendo hacer, le he dado mil bueltas  :(  y no se como hacer esto..  de antemano muchas gracias  :D ... realmente me urge la ayuda pretendo entregar este trabajo para el dìa 3 de junio... asì que ya se daràn una idea de como estoy en estos momentos...  :unsure: .... me despido y espero puedan ayudarme... gracias  :hola:

Páginas: 1 2 3 [4]