;:::::::::::::::::::::::::::::::::::::::::
;:      Sito:  www.byteman.it  OpenWeb  ::
;:  Raccolta:  Particelle PAS+ASM       ::
;:    Autore:  Salvo Rosta aka byteman  ::
;:    Titolo:  XCRIPDEX.ASM             ::
;: Revisione:  08-01-1995               ::
;:::::::::::::::::::::::::::::::::::::::::



;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;: Function XCriptoDeX(St: String;      { Stringa Originaria }
;:                     Ky: Byte         { Chiave             }
;:                      ): String;      { Stringa prodotta   }
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

La CriptoDecriptografia di ciascun carattere consiste nel seguente algoritmo:
1) - I caratteri di controllo (ASCII 00h1Fh) restano inalterati
2) - XOR di un carattere di String con Chiave
3) - Se il risultato  un carattere di controllo si prende il carattere originario
4) -   altrimenti si accetta il risultato e si incrementa la chiave
 


CODE        SEGMENT BYTE PUBLIC
            ASSUME  CS:CODE
            PUBLIC  XCriptoDeX

Function    EQU     DWORD PTR [BP+12]
String      EQU     DWORD PTR [BP+8]
Chiave      EQU     BYTE  PTR [BP+6]

XCriptoDeX  PROC    FAR
Inizio:     PUSH    BP
            MOV     BP,SP
            PUSH    DS
            LES     DI,Function             ;Lettura Puntatore Funzione Stringa ES:DI
            LDS     SI,String               ;Lettura Puntatore Stringa DS:SI
            CLD
            LODSB
            STOSB                           ;Modifica Lunghezza Funzione Stringa
            XOR     CH,CH
            MOV     CL,AL                   ;Numero di Caratteri in CL
            JCXZ    EndXC                   ;Smetti se lunghezza=0
            MOV     AH,Chiave               ;Lettura Prima Chiave

XDrpt0:     LODSB                           ;Carica in AL il puntato da SI
            CMP     AL,32
            JB      Store
            MOV     DH,AL
            XOR     AL,AH
            CMP     AL,31
            JA      StorInc
            MOV     AL,DH
            JMP     Store
StorInc:    INC     AH
Store:      STOSB                           ;Copia AL al puntato da DI
            LOOP    XDrpt0                  ;Riciclo carattere

EndXC:      POP     DS                      ;Ripristino Registri
            POP     BP
            RET     6
XCriptoDeX  ENDP


CODE        ENDS
            END