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_xlat1
loop1:
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;
stosb
next:
jmp short loop1
exit:
; xor al,al
mov al,'$'; for this realisation
stosb
pop bx
pop si
retn
MD_decode endp