; Autor reseni: roman necas xnecasr00 ; Projekt 2 - INP 2024 ; Vigenerova sifra na architekture MIPS64 ; DATA SEGMENT .data msg: .asciiz "romannecas" ; sem doplnte vase "jmenoprijmeni" cipher: .space 31 ; misto pro zapis zasifrovaneho textu ; zde si muzete nadefinovat vlastni promenne ci konstanty, ; napr. hodnoty posuvu pro jednotlive znaky sifrovacho klice key: .asciiz "nec" params_sys5: .space 8 ; misto pro ulozeni adresy pocatku ; retezce pro vypis pomoci syscall 5 ; (viz nize "funkce" print_string) ; CODE SEGMENT .text main: ; ZDE NAHRATE KOD VASIM RESENIM daddi r4, r0, msg ;nacitanie msg do r4 daddi r5, r0, cipher ;nacitanie adr. cipher do r5 daddi r6, r0, key ;adr. kluca do r6 daddi r7, r0, 1 ;init priz. smeru(1 vpred, -1 vzad) encrpt_loop: lb r8, 0(r4) ;nacitanie znaku z msg beqz r8, end_encrpt ; ak 0, tak konec siforvania lb r9, 0(r6) ;nacitanie znaku z key beqz r9, reset_key ;ak 0, reset an zacaitok key j continue_encrpt reset_key: daddi r6, r0, key ;reset adresy kluca na zaciatok lb r9, 0(r6) ;nacitanie prveho kluca continue_encrpt: daddi r9, r9, -96 ; prevod znaku kluce na cislo (a=0, b=1, ...) mult r9, r7 ; smeru posuvu mflo r9 ; ziskani vysledku nasobeni dadd r10, r8, r9 ; posuvu na znak zpravy slti r11, r10, 97 ; kontrola, ci je vysledek mensi nez 'a' bnez r11, wrap_forward slti r11, r10, 123 ; kontrola, ci je vysl. vetsi nez 'z' beqz r11, wrap_backward j store_char wrap_forward: daddi r10, r10, 26 ; wrap zpet do rozsahu j store_char wrap_backward: daddi r10, r10, -26 ; wrap zpet do rozsahu store_char: sb r10, 0(r5) ; ulozeni zasifrovaneho znaku daddi r4, r4, 1 ; posun na dalsi znak zpravy daddi r5, r5, 1 ; posun na dalsiu poziciu v encrpt zprave daddi r6, r6, 1 ; posun na dalsi znak kluca dsub r7, r0, r7 ; zmena smeru z 1 na -1 nebo z -1 na 1 j encrpt_loop end_encrpt: sb r0, 0(r5) ;ukonc, 0 do cipher daddi r4, r0, cipher ;priprava pre vypis encprt jal print_string ;vypis encrpt textu ; NASLEDUJICI KOD NEMODIFIKUJTE! syscall 0 ; halt print_string: ; adresa retezce se ocekava v r4 sw r4, params_sys5(r0) daddi r14, r0, params_sys5 ; adr pro syscall 5 musi do r14 syscall 5 ; systemova procedura - vypis retezce na terminal jr r31 ; return - r31 je urcen na return address