Advertisement
n3r0nq

tm-rot13

Apr 20th, 2022
2,714
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ;
  2. ; Prog5_ROT13Encoder.asm
  3. ;
  4. ;   Kopiuje przykładowy tekst z p.programu do p.danych
  5. ;   Koduje go zgodnie z algorytmem ROT13
  6. ;
  7. ;   Autor(zy): B.Gnatowski
  8.  
  9. .equ    DATA_buf = INTERNAL_SRAM_START ; 0x2000
  10.  
  11. init:
  12.         ldi     ZH,high(message<<1)     ; Z = wskaźnik (adres początku) bufora z tekstem w pam. programu
  13.         ldi     ZL, low(message<<1)
  14.         ldi     XH,high(DATA_buf)       ; X = wskaźnik do bufora dla tekstu w pam. danych
  15.         ldi     XL, low(DATA_buf)
  16.         push    XH                      ; zapamiętaj X
  17.         push    XL
  18.         rcall   copy_buf                ; skopiuj r16 bajtów spod Z do X
  19.         pop     XL                      ; odtwórz X
  20.         pop     XH
  21.  
  22. main_loop:
  23.         rcall   a_strlen
  24.         mov     r20, r16
  25.         ; zakoduj tekst
  26.         rcall   Rot13Encoder    ;   zakoduj tekst wskazywany przez X o długości w r20
  27.         rjmp main_loop
  28.  
  29.  
  30.  
  31. ;____________________________________________________
  32. ;/
  33. ;       Odejmowanie liczb n-bajtowych
  34. ;   WE: X - bufor z tekstem do zakodowania
  35. ;       r20 - długość tekstu
  36. ;   WY: tekst zakodowany w buforze wejściowym (in-place)
  37. Rot13Encoder:
  38.         push    XH
  39.         push    XL
  40.         push    r20
  41.         ;
  42.         ; W TYM MIEJSCU UTWORZYĆ CIAŁO PROCEDURY
  43.         ;
  44. petla:
  45.         cpi     r20, 0
  46.         breq    odtworz_ze_stosu
  47.         dec     r20
  48.         ld      r17, X
  49.         cpi     r17, 'A'
  50.         brlo    mala_litera
  51.         cpi     r17, 'Z'+1
  52.         brsh    mala_litera
  53.         subi    r17, 'A'-13
  54.         cpi     r17, 26
  55.         brlo    dodaj_duze_a
  56.         subi    r17, 26
  57. dodaj_duze_a:
  58.         subi    r17, -'A'
  59.         rjmp    zapamietaj_litere
  60. mala_litera:   
  61.         cpi     r17, 'a'
  62.         brlo    zapamietaj_litere
  63.         cpi     r17, 'z'+1
  64.         brsh    zapamietaj_litere
  65.         subi    r17, 'a'-13
  66.         cpi     r17, 26
  67.         brlo    dodaj_male_a
  68.         subi    r17, 26
  69. dodaj_male_a:
  70.         subi    r17, -'a'
  71.         rjmp    zapamietaj_litere
  72. zapamietaj_litere:
  73.         st      X+, r17
  74.         rjmp    petla
  75. odtworz_ze_stosu:
  76.         pop     r20
  77.         pop     XL
  78.         pop     XH
  79.         ret
  80.  
  81.  
  82.  
  83. ;____________________________________________________
  84. ;/
  85. ;       Oblicza długość tekstu w buforze wskazywanym
  86. ;       przez rejestr Z w pam. programu
  87. ;   WE: Z = adres bufora
  88. ;   WY: r16 - długość tekstu (ilość bajtów niezerowych)
  89. a_strlen:
  90.         push    XH
  91.         push    XL
  92.         ;
  93.         ; W TYM MIEJSCU UTWORZYĆ CIAŁO PROCEDURY
  94.         ;
  95.         push    r0
  96.         clr     r16
  97. asl_0: 
  98.         ld      r0, X+
  99.         or      r0, r0
  100.         breq    asl_exit
  101.         inc     r16
  102.         rjmp    asl_0
  103. asl_exit:
  104.         pop     r0
  105.         pop     XL
  106.         pop     XH
  107.         ret
  108.  
  109.  
  110. ;____________________________________________________
  111. ;/
  112. ;  Kopiuje bufor z pamięci programu do pamięci danych (SRAM)
  113. ;   WE: Z=wskaźnik (adres początku) bufora pamięci programu
  114. ;       X=wskaźnik (adres początku) bufora pamięci danych
  115. ;       r16=długość bufora w bajtach
  116. ;   WY: r16 bajtów p.danych pod adresem X
  117. ;   MOD: ... (uzupełnić które rejestry są modyfikowane przez procedurę)
  118. ;
  119. copy_buf:
  120.         ;
  121.         ; W TYM MIEJSCU SKOPIOWAĆ PROCEDURĘ copy_buf Z Prog1
  122.         ;
  123.         lpm     r0, Z+
  124.         st      X+, r0
  125.         dec     r16
  126.         brne    copy_buf
  127.         ret             ; powrót z podprocedury
  128.  
  129.  
  130.  
  131. message:    .db "Witaj swiecie!", 0, 0
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement