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 ; save bx mov cx,bx ; pop bx sub al,[bx] inc bx push bx mov bx,cx ; restore bx mov cl,ah ; stosbnext: jmp short loop1exit:; xor al,al mov al,'$'; 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;el registro SI "apunta" a ParamStr mov dx,offset Usage ;el registro DX "apunta" a Usage xor ax,ax ; operacion XOR del contanido de AX consigo mismo da como resultado el "limpiado" de AX, o AX=0 lodsb ;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI or al,al ; 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 ;si es CERO(si la bandera Z esta en 1) al programa salta a la rutina ExitPrint mov cx,ax ;mueve el contenido de AX a CX (CX = AX)(CX contador) mov di,si ;mueve el contenido de SI a DI (DI apunta a ParamStr) lodsb ;;carga AL con un Byte de la "cadena de datos"(ParamStr); incrementa(o decrementa) SI repe scasb ;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; salta a ExitPrint si CX es cero mov dx,di ;mueve Di a DX dec dx ; decrementa DX inc cx ;invrementa CX repne scasb ;;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 ;pone cero en AX dec di ;decrementa DI stosb ;almacena contenido de AL en ParamStr, incrementa DI mov si,dx; mueve DX a SI call MD_decode; llama a MD_decode mov dx,si ; mueve SI a DX ExitPrint: mov ah,9 int 21h ;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; save bx mov cx,bx; pop bx sub al,[bx] inc bx push bx mov bx,cx; restore bx mov cl,ah; 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
Ir a la versión completa