Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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).
- dodatek do wniosków:
- 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
- ostatni rozkaz powinien brzmiec "sjmp $" a po nim pusty wiersz, bez tego nam się program wywalał
- przeznaczenie rejestrów:
- r3 -> przechowuje adres pamięci, z którego będzie czytany następny znak
- r1 -> przechowuje adres pamięci, pod który ewentualnie należy zapisać zmieniony znak
- (rejestry r1 i r3 różnią się wartością maksymalnie o 1)
- r2 -> rejestr pomocniczy do zapamiętania wartości znaku, gdy modyfikujemy akumulator sprawdzając, do jakiego przedziału należy
- org 0
- mov r3,#20h ; odczytujemy dane od 0x20
- st: mov r1,r3 ; etykieta startu algorytmu, kopiujemy aktualna wartosc adresu
- inc r3 ; inkrementacja licznika odczytu
- mov a,@r1 ; kopiujemy do akumulatora zawartosc komorki
- cjne a,#'*',dalej ; jesli nie trafilismy na gwiazdke, kontynuujemy algorytm
- sjmp koniec ; skok do konca programu
- dalej:
- mov r2,a ; kopiujemy akumulator do bufora - r2
- clr c ; czyscimy flagę przeniesienia przed odejmowaniem
- subb a, #'a' ; odejmujemy od akumulatora male 'a'
- jc st ; jesli wartosc jest ujemna, nic nie trzeba robić, przechodzimy do następnego znaku
- mov a,r2 ; przywracamy wartosc z bufora
- clr c ; czyscimy flagę przed odejmowaniem j.w.
- subb a, #'z'+1 ; odejmujemy od akumulatora znak nastepujacy po malych literkach
- jnc st ; jesli wartosc jest dodatnia, to jestesmy poza rozpatrywanym zakresem, przechodzimy do następnego znaku
- ; w przeciwnym wypadku mamy do czynienia z mala litera i nalezy ja zamienic na duza
- mov a,r2 ; przywrocenie bufora
- clr c ; czyscimy flagi, j.w.
- subb a, #20h ; odejmujemy 0x20 od aktualnego znaku, tj zmieniamy mala literke na duza
- mov @r1,a ; wpisujemy zmieniona wartosc pod odpowiedni adres
- sjmp st ; przechodzimy do nastepnego znaku
- koniec: sjmp $ ; koniec dzialania
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement