• Jueves 14 de Noviembre de 2024, 16:56

Autor Tema:  No Se Ensamblador, Necesito Ayuda!!!!  (Leído 2526 veces)

Kesar

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
No Se Ensamblador, Necesito Ayuda!!!!
« en: Viernes 27 de Agosto de 2004, 17:52 »
0
Antes de nada, daros las gracias a todos por leer mi post e intentar ayudarme.

Mi problema es k nunca he programado en ensamblador y ahora necesito saber que es lo que hace la siguiente funcion, pero por mas que busco no doy encontrado el significado de las lineas de la misma.

¿Alguien podria traducirme a grandes rasgos las lineas mas complicadas? el resto ya lo intentare averiguar yo, gracias ... por cierto, solo es una parte del codigo que tengo, digo esto por si alguien pregunta porque esta incompleto.

Gracias otra vez

Código: Text
  1.  
  2. start:
  3.         mov  si,offset ParamStr
  4.         mov  dx,offset Usage
  5.         xor  ax,ax
  6.         lodsb
  7.         or   al,al
  8.         jz   ExitPrint
  9.         mov  cx,ax
  10.         mov  di,si
  11.         lodsb
  12.         repe scasb
  13.         jcxz ExitPrint
  14.         mov  dx,di
  15.         dec  dx
  16.         inc  cx
  17.         repne scasb
  18.         xor  ax,ax
  19.         dec  di
  20.         stosb
  21.  
  22.         mov  si,dx
  23.         call MD_decode
  24.         mov  dx,si
  25.  
  26. ExitPrint:
  27.         mov  ah,9
  28.         int  21h
  29.         ret
  30.  
  31. MD_decode  proc near
  32. ; In/Out: si -> string in asciz
  33.  
  34.         push si
  35.         xor  dx,dx
  36.         xor  cx,cx
  37.         mov  di,si
  38.         push offset MD_xlat2
  39.         mov  bx,offset MD_xlat1
  40. loop1:
  41.         xor  ax,ax
  42.         lodsb
  43.         or   al,al
  44.         jz   short exit
  45.  
  46.         xlat
  47.         cmp  al,'@'
  48.         jnb  short exit
  49.  
  50.         shl  dx,6
  51.         add  cl,6
  52.         or   dx,ax
  53.         cmp  cl,8
  54.         jb   short next
  55.         sub  cl,8
  56.         mov  ax,dx
  57.         shr  ax,cl
  58.  
  59.         mov  ah,cl &#59; save bx
  60.         mov  cx,bx &#59;
  61.  
  62.         pop  bx    
  63.         sub  al,[bx]
  64.         inc  bx    
  65.         push bx    
  66.  
  67.         mov  bx,cx &#59; restore bx
  68.         mov  cl,ah &#59;
  69.  
  70.         stosb
  71. next:
  72.         jmp short loop1
  73. exit:
  74. ;        xor  al,al
  75.         mov  al,'$'&#59; for this realisation
  76.         stosb
  77.         pop  bx
  78.         pop  si
  79.         retn
  80. MD_decode  endp
  81.  
  82.  

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: No Se Ensamblador, Necesito Ayuda!!!!
« Respuesta #1 en: Viernes 27 de Agosto de 2004, 21:10 »
0
Citar

AX, BX, CX, DX, AL,AH,BL,BH,CL,CH,DL,DH, SI,DI: Registros en el uProcesador.

ParamStr, Usage: Direcciones de memoria.




Código: Text
  1.  
  2.  
  3. start:
  4.        mov  si,offset ParamStr&#59;el registro SI "apunta" a ParamStr
  5.        mov  dx,offset Usage    &#59;el registro DX "apunta" a Usage
  6.        xor  ax,ax                    &#59; operacion XOR del contanido de AX consigo mismo da como resultado el "limpiado" de AX, o AX=0
  7.        lodsb                     &#59;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI
  8.        or   al,al     &#59; efectua la operacion logica OR entre AL y si mismo, si el contenido es cero se "pondra" la bandera Z(de cero) (es una froma para saber si el contenido de AL es cero pondra la Bandera Z del registro de Banderas en 1)
  9.        jz   ExitPrint &#59;si es CERO(si la bandera Z esta en 1) al programa salta a la rutina ExitPrint
  10.        mov  cx,ax  &#59;mueve el contenido de AX a CX (CX = AX)(CX contador)
  11.        mov  di,si    &#59;mueve el contenido de SI a DI  (DI apunta a ParamStr)
  12.        lodsb           &#59;;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI
  13.        repe scasb  &#59;compara AL con Datos(ParamStr), decremeta CX, incrementa DI, repite la operacion mientras AL sea igual a Dato(en ParamStr) o hasta que CX sea cero
  14.        jcxz ExitPrint&#59; salta a ExitPrint si CX es cero
  15.        mov  dx,di   &#59;mueve Di a DX
  16.        dec  dx        &#59; decrementa DX
  17.        inc  cx         &#59;invrementa CX
  18.        repne scasb &#59;;compara AL con Datos(ParamStr), decremeta CX, incrementa DI, repite la operacion mientras AL no sea igual a Dato(en ParamStr) o hasta que CX sea cero
  19.        xor  ax,ax &#59;pone cero en AX
  20.        dec  di      &#59;decrementa DI
  21.        stosb        &#59;almacena contenido de AL en ParamStr, incrementa DI
  22.        mov  si,dx&#59; mueve DX a SI
  23.        call MD_decode&#59; llama a MD_decode
  24.        mov  dx,si &#59; mueve  SI a DX
  25.  
  26. ExitPrint:
  27.        mov  ah,9
  28.        int  21h     &#59;muestra el contenido de la cadena apuntada por DX
  29.        ret
  30. ;;;;;;;;**************************Programa interesante**(me canse)******
  31. MD_decode  proc near
  32. ; In/Out: si -> string in asciz
  33.  
  34.        push si
  35.        xor  dx,dx
  36.        xor  cx,cx
  37.        mov  di,si
  38.        push offset MD_xlat2
  39.        mov  bx,offset MD_xlat1
  40. loop1:
  41.        xor  ax,ax
  42.        lodsb
  43.        or   al,al
  44.        jz   short exit
  45.  
  46.        xlat
  47.        cmp  al,'@'
  48.        jnb  short exit
  49.  
  50.        shl  dx,6
  51.        add  cl,6
  52.        or   dx,ax
  53.        cmp  cl,8
  54.        jb   short next
  55.        sub  cl,8
  56.        mov  ax,dx
  57.        shr  ax,cl
  58.  
  59.        mov  ah,cl&#59; save bx
  60.        mov  cx,bx&#59;
  61.  
  62.        pop  bx    
  63.        sub  al,[bx]
  64.        inc  bx    
  65.        push bx    
  66.  
  67.        mov  bx,cx&#59; restore bx
  68.        mov  cl,ah&#59;
  69.  
  70.        stosb
  71. next:
  72.        jmp short loop1
  73. exit:
  74. ;        xor  al,al
  75.        mov  al,'$'; for this realisation
  76.        stosb
  77.        pop  bx
  78.        pop  si
  79.        retn
  80. MD_decode  endp
  81.  
  82.  

Kesar

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: No Se Ensamblador, Necesito Ayuda!!!!
« Respuesta #2 en: Lunes 30 de Agosto de 2004, 16:10 »
0
GRACIAS Super_G,

Ahora veo k realmente si era complicado y muy dificil intentar traducirlo, ahora a ver si soy capaz de seguir yo.

Gracias otra vez, y si te gustó el programita y lo quieres tener entero pidemelo que te lo mando, de todas formas, si te apetece continuar con la traducción no te prives de hacerlo  :)  :) ,

GRACIAS

Super_G

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: No Se Ensamblador, Necesito Ayuda!!!!
« Respuesta #3 en: Lunes 6 de Septiembre de 2004, 20:20 »
0
Si, la programacion usada es un que no veia hace tiempo no es muy sencillo d ecomprender. si me gustaria intentar continuar pero me gustaria tener los datos:

ParamStr
Usage

para comprobar la corrida del programa.

Kesar

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: No Se Ensamblador, Necesito Ayuda!!!!
« Respuesta #4 en: Viernes 10 de Septiembre de 2004, 16:47 »
0
Te adjunto un archivo zip que tiene un archivo de texto asm y un .com con el cual puedes probar el programa,

puedes probar el programa con esta cadena de texto: t9vXUaWY

Saludos
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.