Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;
- ; Prog5_ROT13Encoder.asm
- ;
- ; Kopiuje przykładowy tekst z p.programu do p.danych
- ; Koduje go zgodnie z algorytmem ROT13
- ;
- ; Autor(zy): B.Gnatowski
- .equ DATA_buf = INTERNAL_SRAM_START ; 0x2000
- init:
- ldi ZH,high(message<<1) ; Z = wskaźnik (adres początku) bufora z tekstem w pam. programu
- ldi ZL, low(message<<1)
- ldi XH,high(DATA_buf) ; X = wskaźnik do bufora dla tekstu w pam. danych
- ldi XL, low(DATA_buf)
- push XH ; zapamiętaj X
- push XL
- rcall copy_buf ; skopiuj r16 bajtów spod Z do X
- pop XL ; odtwórz X
- pop XH
- main_loop:
- rcall a_strlen
- mov r20, r16
- ; zakoduj tekst
- rcall Rot13Encoder ; zakoduj tekst wskazywany przez X o długości w r20
- rjmp main_loop
- ;____________________________________________________
- ;/
- ; Odejmowanie liczb n-bajtowych
- ; WE: X - bufor z tekstem do zakodowania
- ; r20 - długość tekstu
- ; WY: tekst zakodowany w buforze wejściowym (in-place)
- Rot13Encoder:
- push XH
- push XL
- push r20
- ;
- ; W TYM MIEJSCU UTWORZYĆ CIAŁO PROCEDURY
- ;
- petla:
- cpi r20, 0
- breq odtworz_ze_stosu
- dec r20
- ld r17, X
- cpi r17, 'A'
- brlo mala_litera
- cpi r17, 'Z'+1
- brsh mala_litera
- subi r17, 'A'-13
- cpi r17, 26
- brlo dodaj_duze_a
- subi r17, 26
- dodaj_duze_a:
- subi r17, -'A'
- rjmp zapamietaj_litere
- mala_litera:
- cpi r17, 'a'
- brlo zapamietaj_litere
- cpi r17, 'z'+1
- brsh zapamietaj_litere
- subi r17, 'a'-13
- cpi r17, 26
- brlo dodaj_male_a
- subi r17, 26
- dodaj_male_a:
- subi r17, -'a'
- rjmp zapamietaj_litere
- zapamietaj_litere:
- st X+, r17
- rjmp petla
- odtworz_ze_stosu:
- pop r20
- pop XL
- pop XH
- ret
- ;____________________________________________________
- ;/
- ; Oblicza długość tekstu w buforze wskazywanym
- ; przez rejestr Z w pam. programu
- ; WE: Z = adres bufora
- ; WY: r16 - długość tekstu (ilość bajtów niezerowych)
- a_strlen:
- push XH
- push XL
- ;
- ; W TYM MIEJSCU UTWORZYĆ CIAŁO PROCEDURY
- ;
- push r0
- clr r16
- asl_0:
- ld r0, X+
- or r0, r0
- breq asl_exit
- inc r16
- rjmp asl_0
- asl_exit:
- pop r0
- pop XL
- pop XH
- ret
- ;____________________________________________________
- ;/
- ; Kopiuje bufor z pamięci programu do pamięci danych (SRAM)
- ; WE: Z=wskaźnik (adres początku) bufora pamięci programu
- ; X=wskaźnik (adres początku) bufora pamięci danych
- ; r16=długość bufora w bajtach
- ; WY: r16 bajtów p.danych pod adresem X
- ; MOD: ... (uzupełnić które rejestry są modyfikowane przez procedurę)
- ;
- copy_buf:
- ;
- ; W TYM MIEJSCU SKOPIOWAĆ PROCEDURĘ copy_buf Z Prog1
- ;
- lpm r0, Z+
- st X+, r0
- dec r16
- brne copy_buf
- ret ; powrót z podprocedury
- message: .db "Witaj swiecie!", 0, 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement