Advertisement
Guest User

Untitled

a guest
Jul 6th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 2.34 KB | None | 0 0
  1.        Zadanie zmiany małych literek na duże, jeśli trafimy na '*' to następuje koniec działania. Zaczynamy od adresu 0x20 (ponieważ ten jest akurat widoczny od razu w okienku emulatora).
  2.        
  3.        dodatek do wniosków:
  4.        linijka z cjne - gdyby istniała przeciwna funkcja, tj dokonująca skoku gdy wartosci są równe, możnaby wtedy ominąć jedną flagę (dalej). ale NIE MA TAKIEJ
  5.     ostatni rozkaz powinien brzmiec "sjmp $" a po nim pusty wiersz, bez tego nam się program wywalał
  6.        
  7. przeznaczenie rejestrów:
  8. r3 -> przechowuje adres pamięci, z którego będzie czytany następny znak
  9. r1 -> przechowuje adres pamięci, pod który ewentualnie należy zapisać zmieniony znak
  10. (rejestry r1 i r3 różnią się wartością maksymalnie o 1)
  11. r2 -> rejestr pomocniczy do zapamiętania wartości znaku, gdy modyfikujemy akumulator sprawdzając, do jakiego przedziału należy
  12.  
  13.        org 0
  14.        mov r3,#20h  ; odczytujemy dane od 0x20
  15. st:    mov r1,r3   ; etykieta startu algorytmu, kopiujemy aktualna wartosc adresu
  16.        inc r3       ; inkrementacja licznika odczytu
  17.        mov a,@r1    ; kopiujemy do akumulatora zawartosc komorki
  18.        cjne a,#'*',dalej ; jesli nie trafilismy na gwiazdke, kontynuujemy algorytm
  19.        sjmp koniec  ; skok do konca programu
  20. dalej:
  21.        mov r2,a     ; kopiujemy akumulator do bufora - r2
  22.        clr c        ; czyscimy flagę przeniesienia przed odejmowaniem
  23.        subb a, #'a' ; odejmujemy od akumulatora male 'a'
  24.        jc st        ; jesli wartosc jest ujemna, nic nie trzeba robić (Aku< #'a'), przechodzimy do następnego znaku
  25.        mov a,r2     ; przywracamy wartosc z bufora
  26.        clr c        ; czyscimy flagę przed odejmowaniem j.w.
  27.        subb a, #'z'+1 ; odejmujemy od akumulatora znak nastepujacy po malych literkach
  28.        jnc st        ; jesli wartosc jest dodatnia (Aku>= #'z'+1), to jestesmy poza rozpatrywanym zakresem, przechodzimy do następnego znaku
  29.              ; w przeciwnym wypadku mamy do czynienia z mala litera i nalezy ja zamienic na duza
  30.        mov a,r2        ; przywrocenie bufora
  31.        clr c         ; czyscimy flagi, j.w.
  32.        subb a, #20h  ; odejmujemy 0x20 od aktualnego znaku, tj zmieniamy mala literke na duza
  33.        mov @r1,a     ; wpisujemy zmieniona wartosc pod odpowiedni adres
  34.        sjmp st       ; przechodzimy do nastepnego znaku
  35. koniec: sjmp $       ; koniec dzialania
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement