to jest to co mam
;xor.exe nazwapliku haslo
.MODEL TINY
.DATA
buf db 512 dup (?)
errortext1 db 'Blad podczas otwierania pliku: $'
infotext1 db 'Rozpoczeto kodowanie','$'
infotext2 db 0Ah, 0Dh, 'Zakonczono kodowanie','$'
z db ?
tmp dw ?
.CODE
org 100h
START:
jmp GETPSP
EXIT:
mov AX,4C00h
int 21h
GETPSP: ;\
mov CL,DS:[80h] ; >dlugosc argumentow
xor CH,CH ;/
or CX,CX ; >dlugosc=0 to koniec
jz EXIT
GETARG:
mov SI,82h ;\
lea DI,buf ; |zapisuje argumenty
cld ; |do bufora
rep movsb ;/
xor SI,SI
PTL1:
cmp buf[SI],' ' ;\
je ENDPTL1 ; |spacja=koniec zliczania
cmp buf[SI],0Dh ; |0Dh=brak hasla
je EXIT ;/
inc SI
jmp PTL1
ENDPTL1:
mov buf[SI],00h ;\
inc SI ; >nazwa pliku w ASCIZ
mov tmp,SI ;/
cmp buf[SI],0Dh ; >0Dh=brak hasla
je EXIT
mov AX,3D02h ;\
lea DX,buf ; |otwiera plik z/o
int 21h ; |
jc ERROR ;/
mov BX,AX ; >numer do pliku do BX
mov AH,09h ;\
mov DX,offset infotext1 ; >info o starcie kodowania
int 21h ;/
PTL2:
jmp CHECKPOINT
SET:
mov SI,tmp ; >zacznij od poczatku hasla
jmp CONTINUE
CHECKPOINT:
cmp buf[SI],0Dh ; >sprawdz czy koniec hasla
je SET
CONTINUE:
mov AH,3Fh ;\
mov CX,01h ; |odczyt bajtu
lea DX,z ; |do zmiennej 'z'
int 21h ;/
or AX,AX ;\jezeli AX=0
jz ENDPTL2 ;/to koniec pliku
mov DH,buf[SI] ;\
mov DL,z ; |
xor DH,DL ; |xoruj na podstawie hasla
mov z,DH ;/
mov AX,4201h ;\
mov CX,0FFFFh ; |przesun pozycje kursora
mov DX,-01h ; |o jeden w tyl
int 21h ;/
mov AH,40h ;\
mov CX,01h ; |zapis zmienionego znaku
lea DX,z ; |na stary znak
int 21h ;/
inc SI
jmp PTL2 ; >powtarzaj do konca pliku
ENDPTL2:
mov AH,3Eh ; >zamknij plik
int 21h
mov AH,09h ;\
mov DX,offset infotext2 ; >info o koncu kodowania
int 21h ;/
jmp EXIT
ERROR:
mov AH,09h ;\
mov DX,offset errortext1 ; \
int 21h ; |wyswietlenia wiadomosc bledu
mov buf[SI],'$' ; |oraz powiadomienie, ktorego pliku
lea DX, buf ; |nie mozna otworzyc
int 21h ; /
jmp EXIT ;/
END
rzecz w tym ze mam problem z parametrami (lub warunkami), tzn wyswietla mi bledne komunikaty chociaz plik zostaje zaszyfrowany.
nie wiem co z tym do konca zrobic.</asm>