Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org $0010 ;okreslenie poprawnych adresow segmentow
- db $00,$90,$00,$9F,$00,$a0
- org $0090 ;wartosci w pierwszym segmencie
- db $0f,$01,$02,$03,$04,$05,$06,$07,$a0,$a1,$a2,$a3,$a4,$dd,$bc,$aa
- org $00a0 ;wartosci w drugim segmencie
- db $b0,$b1,$b2,$b3,$b4,$ee,$ad,$99,$0a,$01,$02,$03,$04,$05,$06,$07
- org $0000 ;wartosci dla warunkow sprawdzenia
- db $00,$ff,$11
- org $0020
- ;poczatek programu, wczytanie poczatku pierwszego obszaru i czyszczenie pomocniczego adresu
- begin:
- ldaa 13h ;koniec pierwszego obszaru
- ldab 15h ;poczatek drugiego obszaru
- cba ;porownanie, czy zachodza na siebie (A-B)
- bge close2 ;skok do zapisu z 11h
- blt close0 ;jezeli ok, to skok do close0 i zapis do rejestru koncowego 00h
- back:
- ldx 10h ;wczytanie pierwszej wartosci, do sprawdzenia czy dobry zakres, jezeli zaczyna sie od 00h, to zle
- clra
- ldaa 0,X
- cmpa 05h ;sprawdzenie czy nie rowna sie zero
- beq close1 ;jezeli pierwsza = 0, to skok do koniec programu
- clra
- clrb
- ldx 10h ;wczytanie do rej index poczatku przestrzeni z wartosciami
- clr 16h ;czyszczenie 0016h, pomocnicza pamiec na pierwszy obszar
- clr 18h ;czyszczenie 0018h, pamiec na drugi obszar pomocnicza
- ldaa 0,X ;do acc A wczytanie wartosci z adresu w rej X
- stx 16h ;zapis do 16h wartosci adresu z X
- ldx 14h ;wczytanie do rej X poczatku przestrzeni z drugimi wartosciami
- ;suma obu wartosci i zapis wyniku do drugiej wartosci
- add:
- ldab 0,X ;do acc B wczytanie drugiej wartosci do dodania
- stx 18h ;zapis do 18h ostatniej drugiej wartosci dodawanej
- aba ;A=B+A
- staa 0,X ;zapis wartosci dodanej do komorki z druga wartoscia
- clrb ;czyszczenie akumulatora B, na koncu programu tam wyswietla sie status
- ;sprawdzenie czy koniec puli wartosci
- clra
- ldaa 13h ;zaladowanie do A adresu konca obszaru
- ldab 17h ;zaladowanie adresu ostatniej wykorzystanej wartosci z pierwszej puli
- cba ;porownanie czy wartosc 16h jest rowna ostatniemu adresowi
- beq end_program ;jezeli Z=1, to skok do konca programu
- clra ;czyszczenie A, zeby wczytac ostatnia pierwsza wartosc
- ldaa 17h
- ;jezeli nie skonczyl program, to zwiekszam o 1 adres pierwszego i drugiego obszaru
- inca ;wartosc w acc A (adres pierwszej wartosci) + 1
- staa 17h
- ldx 18h ;wczytanie do inkrementacji ostatniej wartosci sumowania z drugiego obszaru
- inx ;wartosc w reg X (adres drugiej wartosci) + 1
- stx 18h
- ldx 16h
- ldaa 0,X
- ldx 18h
- jmp add ;skok bezwarunkowy do wczytania pierwszej wartosci do sumowania
- ;sprawdzenie wszystkich warunkow wyswietlenia do acc B
- ;ffh gdy blednie pierwszy adres, 11h gdy gdy obszary zachodza na siebie, 00h gdy ok
- close0: ;gdy wszystko ok
- clrb
- clr 00h
- ldab 00h
- stab 00h
- jmp back
- close1: ;ffh
- clrb
- clr 00h
- ldab 01h
- stab 00h
- jmp end_program
- close2: ;11h
- clrb
- clr 00h
- ldab 02h
- stab 00h
- jmp back
- end_program:
- ldab 00h
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement