Programación General > ASM (Ensamblador)

 No Se Ensamblador, Necesito Ayuda!!!!

(1/1)

Kesar:
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 --- start:        mov  si,offset ParamStr        mov  dx,offset Usage        xor  ax,ax        lodsb        or   al,al        jz   ExitPrint        mov  cx,ax        mov  di,si        lodsb        repe scasb        jcxz ExitPrint        mov  dx,di        dec  dx        inc  cx        repne scasb         xor  ax,ax        dec  di        stosb         mov  si,dx        call MD_decode        mov  dx,si ExitPrint:        mov  ah,9        int  21h        ret MD_decode  proc near; In/Out: si -> string in asciz         push si        xor  dx,dx        xor  cx,cx        mov  di,si        push offset MD_xlat2        mov  bx,offset MD_xlat1loop1:        xor  ax,ax        lodsb        or   al,al        jz   short exit         xlat        cmp  al,'@'        jnb  short exit         shl  dx,6        add  cl,6        or   dx,ax        cmp  cl,8        jb   short next        sub  cl,8        mov  ax,dx        shr  ax,cl         mov  ah,cl &#59; save bx        mov  cx,bx &#59;         pop  bx             sub  al,[bx]        inc  bx             push bx              mov  bx,cx &#59; restore bx        mov  cl,ah &#59;          stosbnext:        jmp short loop1exit:;        xor  al,al        mov  al,'$'&#59; for this realisation        stosb        pop  bx        pop  si        retnMD_decode  endp  

Super_G:

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

ParamStr, Usage: Direcciones de memoria.


--- Fin de la cita ---




--- Código: Text ---  start:       mov  si,offset ParamStr&#59;el registro SI "apunta" a ParamStr       mov  dx,offset Usage    &#59;el registro DX "apunta" a Usage       xor  ax,ax                    &#59; operacion XOR del contanido de AX consigo mismo da como resultado el "limpiado" de AX, o AX=0       lodsb                     &#59;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI       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)       jz   ExitPrint &#59;si es CERO(si la bandera Z esta en 1) al programa salta a la rutina ExitPrint       mov  cx,ax  &#59;mueve el contenido de AX a CX (CX = AX)(CX contador)       mov  di,si    &#59;mueve el contenido de SI a DI  (DI apunta a ParamStr)       lodsb           &#59;;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI       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       jcxz ExitPrint&#59; salta a ExitPrint si CX es cero       mov  dx,di   &#59;mueve Di a DX       dec  dx        &#59; decrementa DX       inc  cx         &#59;invrementa CX       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       xor  ax,ax &#59;pone cero en AX       dec  di      &#59;decrementa DI       stosb        &#59;almacena contenido de AL en ParamStr, incrementa DI       mov  si,dx&#59; mueve DX a SI       call MD_decode&#59; llama a MD_decode       mov  dx,si &#59; mueve  SI a DX ExitPrint:       mov  ah,9       int  21h     &#59;muestra el contenido de la cadena apuntada por DX       ret;;;;;;;;**************************Programa interesante**(me canse)******MD_decode  proc near; In/Out: si -> string in asciz        push si       xor  dx,dx       xor  cx,cx       mov  di,si       push offset MD_xlat2       mov  bx,offset MD_xlat1loop1:       xor  ax,ax       lodsb       or   al,al       jz   short exit        xlat       cmp  al,'@'       jnb  short exit        shl  dx,6       add  cl,6       or   dx,ax       cmp  cl,8       jb   short next       sub  cl,8       mov  ax,dx       shr  ax,cl        mov  ah,cl&#59; save bx       mov  cx,bx&#59;        pop  bx            sub  al,[bx]       inc  bx            push bx             mov  bx,cx&#59; restore bx       mov  cl,ah&#59;         stosbnext:       jmp short loop1exit:;        xor  al,al       mov  al,'$'; for this realisation       stosb       pop  bx       pop  si       retnMD_decode  endp  

Kesar:
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:
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:
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

Navegación

[0] Índice de Mensajes

Ir a la versión completa