caffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;zadanie 5 Michcal Mikláš TLK 5 Os:35794 ZAS SEGMENT STACK ;prikaz pre assembler (zaciatok zasobnikoveho segmentu) DW 1024 DUP(?) ZAS ENDS ;prikaz pre ukoncenie zasobnikoveho segmentu DATA SEGMENT ;zaciatok datoveho segmentu INPUT db 'INPUT.TXT',0 HANDLE1 DW ? HANDLE2 DW ? PR DB 100 DUP(?) OUTPUT DB 'OUTPUT.TXT',0 POCET DB 1 chyba1 db 10, 13,'Chyba. Nepodarilo sa otvorit subor INPUT.TXT. (asi neexistuje)' ,10, 13,'$' vpohode db 10, 13,'Zasifrovanie prebehlo vpohode :)' ,10, 13,'$' DATA ENDS vypis MACRO t ;zobraz - vypise text na obrazovku mov dx, offset t ;vloz do registra DX posunutie retazca txt mov ah,09h ;vloz do registra AH (spodna cast registra AX) cislo sluzby int 21h ;prikaz na vypis na obrazovku endm ;ukonci makro CODE SEGMENT ; zaciatok segmentu instrukcii assume cs:code,ss:zas, ds:data clrscr: mov ax, 3h ; sluzba VIDEO BIOSu (mazanie obrazovky) int 10h ret zasifruj: mov al,[bx] ;nacitaj znak z pola pr add al,15 ;prpipocitaj konstantu 15 add al,dl ;al+dl takze kazdy znak bude mat k sebe pripocitanu konstantu v zavislosti od pozicie (hodnota poctu znakou do konca odznaku co sifrujeme ) mov [bx],al ;uloz znak na povodne miesto inc bx ;posunie sa na dalsi znak dec dl ;zniz pocet znakov o 1 cmp dl,0h ;ak je pocet znakov 0 tak chod na vytvorenie noveho suboru jz vytvor jmp zasifruj ;ak pocet znakov nie je 0, tak pokracuj v nacitani ret Start: mov ax,seg data mov ds,ax call clrscr ;procedura na vymazanie obrazovky ;---------------------------------------------- otvorenie suboru INPUT ------------------------------ mov ah,3DH ;sluzba BIOSu na otvorenie suboru xor al,al ;open mode, 0 - read only atributa mov dx,offset INPUT ;nastavenie subor, ktory sa bude otvrat int 21h jnc pokracuj ;ak nenastala chyba pokracuj v citani jmp koniec1 ;ak nastala chyba skoc na koniec1 pokracuj: mov handle1,ax ;uloz handle otvoreneho (citaneho) suboru xor cx,cx ;vynuluj cx, kvoli citaniu potrebujeme vynnulovat ;---------------------------------------------- citanie zo suboru INPUT ------------------------------ mov ah, 3FH ;sluzba BIOSu na citanie zo suboru mov bx, handle1 ;nacitaj handle suboru, z ktoreho chceme citat mov cl,100 ;pocet znakov, ktore chceme citat Ak je ax=0, tak si na konci suboru mov dx,offset pr ;miesto v pamati, kam chceme citat int 21h mov pocet,al ;uloz pocet nacitanych znakov mov dl,pocet ;uloz pocet nacitanych znakov mov bx,offset pr ;nacitaj si zaciatok pola, kde mas ulozene znaky call zasifruj ;zavolaj si sifrovanie ;---------------------------------------------- vytvorenie suboru OUTPUT ------------------------------ vytvor: mov ah,3ch ;sluzba BIOSu na vytvorenie suboru mov cx,0h ;atribut pre vytvorenie 0-normal mov dx,offset OUTPUT ;nazov suboru int 21h mov HANDLE2,ax ;handle suboru sa ulozi ;---------------------------------------------- zapis do suboru OUTPUT ------------------------------ xor cx,cx ;vynuluje sa cx mov cl,pocet ;pocet znakov, ktore sa maju zapisat mov ah,40h ;sluzba BIOSu na zapis mov bx,HANDLE2 ;handle suboru do ktoreho zapisat mov dx,offset pr ;adresa odkial zapisat int 21h ;---------------------------------------------- zatvorenie citaneho suboru INPUT ------------------------------ mov ah,3eh ;sluzba BIOSu na zatvorenie suboru mov BX,HANDLE1 ;handle suboru, ktory chcem zatvorit int 21H ;---------------------------------------------- zatvorenie noveho suboru OUTPUT ------------------------------ mov AH,3EH ;sluzba BIOSu na zatvorenie suboru mov BX,HANDLE2 ;handle suboru, ktory chcem zatvorit int 21H koniec: vypis vpohode mov ax,4c00h ;koniec normalny int 21h koniec1: vypis chyba1 mov ax,4c00h ;koniec ze sa nenasiel subor int 21h CODE ENDS END START ;program bude spusteny od navestia start ;Program bol navrhnuty pod systemom Windows Vista. Skompilovany s tasm 32 a tlink v prikazovom riadku, ;Program nacita obsah suboru input.TXT, vytvori subor OUTPUT.TXT kde zasifruje obsah vstupneho suboru. ;Na nacitanie suboru INPUT.TXT bola pouzita BIOS sluzba 3Dh, na citanie z tohto suboru bola pouzita sluzba 3FH, na vytvorenie noveho suboru sluzba 3CH a na zapis sluzba 40H. Dalsi ich popis aj vstupne a vystupne parametre sa opisane v ng.exe ;Na sifrovanie som pouzil proceduru zasifruj, ktora vyberie kazdy znak z pola, kde je nacitany subor a ku kazdemu znakju pripocita konstantu 15 a pocet zostavajucich znakou od sifrowaneho zmnaku do konca subora input.