Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- rozkazy:
- //daj na stos
- ROZKAZ dns;
- argumenty 0;
- czyt wys wei il;
- dws;
- wyws wea wyak wes;
- pisz wyl wea;
- //(AK+((Ad))-> Ak
- ROZKAZ DOD;
- czyt wys wei il;
- wyad wea eni
- JEŻELI INT TO @przerw GDY NIE @norm;
- @norm czyt wys weja dod weak wyl wea KONIEC;
- @przerw czyt wys weja dod weak dws;
- wyls wes wyws wea;
- pisz wyap wel wea rint;
- // (Ak)->(Ad)
- ROZKAZ ŁAD;
- czyt wys wei il;
- wyad wea wyak wes eni
- JEŻELI INT TO @przerw GDY NIE @norm;
- @norm pisz wyl wea KONIEC;
- @przerw pisz dws;
- wyls wes wyws wea;
- pisz wyap wea wel rint;
- // Rozkaz maskowania adresowanie natychmiastowe
- ROZKAZ MAS;
- czyt wys wei il;
- wyad werm;
- wyl wea;
- // Rozkaz maskowania adresowanie bezpośrednie
- ROZKAZ MSK;
- czyt wys wei il;
- wyad wea;
- czyt wys sa werm;
- wyl wea;
- //(Ak)-((Ad))->Ak
- ROZKAZ ODE;
- czyt wys wei il;
- wyad wea eni
- JEŻELI INT TO @przerw GDY NIE @norm;
- @norm czyt wys weja ode weak wyl wea KONIEC;
- @przerw czyt wys weja ode weak dws;
- wyls wes wyws wea;
- pisz wyap wel wea rint;
- //((Ad))->Ak
- ROZKAZ POB;
- czyt wys wei il;
- wyad wea eni
- JEŻELI INT TO @przerw GDY NIE @norm;
- @norm czyt wys weja przep weak wyl wea KONIEC;
- @przerw czyt wys weja przep weak dws;
- wyls wes wyws wea;
- pisz wyap wel wea rint;
- //powrot
- rozkaz pwr;
- argumenty 0;
- czyt wys wei il;
- wyws wea iws;
- czyt wys as wea wel;
- //pobierz ze stosu
- rozkaz pzs;
- argumenty 0;
- czyt wys wei il;
- wyws wea iws;
- czyt wys weja przep weak wyl wea;
- // Odczyt rejestru maski
- ROZKAZ RMSK;
- czyt wys wei il;
- wyad wea;
- wyrm sa wes;
- pisz wyl wea;
- // wczytanie znaku z UZ o numerze podanym jako argument rozkazu
- ROZKAZ WPR;
- czyt wys wei il;
- start wyak weja ode weak;
- @czekaj wyg weja ode weak JEŻELI Z to @dalej GDY NIE @czekaj;
- @dalej wyrb weja przep weak wyl wea;
- // rozkaz WYP przerywalny
- ROZKAZ WYP;
- czyt wys wei il;
- wyak weja ode weak wes werb start;
- @czekaj wyg weja ode weak JEŻELI Z to @dalej GDY NIE @czekaj;
- @dalej eni Jeżeli Int to @przerw Gdy nie @norm;
- @norm wys weja przep weak wyl wea KONIEC;
- @przerw wys weja przep weak dws;
- wyls wes wyws wea;
- pisz wyap wel wea rint;
- PROGRAM 1:
- SOB START
- SOB PRZE1 //przerwanie 1
- SOB PRZE2 //przerwanie 2
- SOB PRZE3 //przerwanie 3
- SOB PRZE4 //przerwanie 4
- POB ST0
- ŁAD IL1 //zerowanie ilości przer1
- ŁAD IL2 //zerowanie ilości przer2
- ŁAD IL3 //zerowanie ilości przer3
- ŁAD IL4 //zerowanie ilości przer4
- //PETLA WYPISUJACA
- START: WPR 1 //odczyt znaku
- ŁAD ZNAK //i załadowanie go do zmiennej
- PETLA: POB ZNAK//główna pętla wypisująca znak
- WYP 2 //w oczekiwaniu na przerwania
- SOB PETLA
- //===== PROCEDURY PRZERWAN =====
- PRZE1: DNS // akumulator na stos
- POB IL1 //pob aktualnej il przerwań1
- DOD ST1 //zapam ilość przerwań1 ++
- ŁAD IL1 //zapisanie nowej ilości przer1
- ODE ST5 //if<0 -nie było jeszcze 5 prze
- SOM POWROT //if nie było 5 przer, skok
- POB ST1 //if było 5, w AK numer przerw
- STP //KONIEC PROGRAMU
- PRZE2: DNS
- POB IL2
- DOD ST1
- ŁAD IL2
- ODE ST5
- SOM POWROT
- POB ST2
- STP
- PRZE3: DNS
- POB IL3
- DOD ST1
- ŁAD IL3
- ODE ST5
- SOM POWROT
- POB ST3
- STP
- PRZE4: DNS
- POB IL4
- DOD ST1
- ŁAD IL4
- ODE ST5
- SOM POWROT
- POB ST4
- STP
- // POWROT Z PRZERWANIA
- POWROT: PZS//pobranie akumulatora ze stosu
- PWR //powrót z przerwa, zwrot licznika
- //===== DEKLARACJE=====
- ST0: RST 0 // stała zero
- ST1: RST 1 // stała jeden
- ST2: RST 2 // stała dwa
- ST3: RST 3 // stała trzy
- ST4: RST 4 // stała cztery
- ST5: RST 5 // stała pięć
- IL1: RPA // zmienna przech il przerwań 1
- IL2: RPA // zmienna przech il przerwań 2
- IL3: RPA // zmienna przech il przerwań 3
- IL4: RPA // zmienna przech il przerwań 4
- ZNAK: RPA // zmienna przech wczytany znak
- PROGRAM 2:
- SOB START
- SOB PRZER1 //przerwanie 1
- SOB PRZER2 //przerwanie 2
- SOB PRZER3 //przerwanie 3
- SOB PRZER4 //przerwanie 4
- POB ST0
- ŁAD IL_PRZER1 //zerowanie ilości przerwan1
- ŁAD IL_PRZER2 //zerowanie ilości przerwan2
- ŁAD IL_PRZER3 //zerowanie ilości przerwan3
- ŁAD IL_PRZER4 //zerowanie ilości przerwan4
- START: WPR 1 //pobranie wprowadzonego znaku
- ŁAD ZNAK //zapisanie go w zmiennej
- PETLA: POB ZNAK //pętla wypisująca pobrany znak
- WYP 2 // w oczekiwaniu na przerwania
- SOB PETLA //następne wywołanie pętli
- // ==== P R O C E D U R Y przerwań ====
- PRZER1: DNS //akumulator na stos
- RMSK MASKA_TMP //odczyt maski, zapis w zmiennej
- MSK MASKA_1 //maskowanie 1111
- POB MASKA_TMP //pobranie zapisanej maski
- DNS // i umieszczenie jej na stosie
- POB ST3 //pobranie ilości wypisywanej liczby
- ŁAD LICZNIK_1 //ład do licz pętli wypisującej
- // wypisanie 111
- PISZ_1: POB ASCII_1 //pętla wypisująca 1 (49 w ASCII)
- WYP 2 //wyprowadzenie jedynki
- POB LICZNIK_1
- ODE ST1 //licznik pętli --
- ŁAD LICZNIK_1 //nowy licznik pętli
- SOZ NEXT_1 //gdy już koniec pętli skok
- SOB PISZ_1 //gdy nie koniec, ponowne wypisanie
- //kontynuowanie procedury, po wypisaniu 111
- NEXT_1: POB IL_PRZER1 //pob aktualnej il zglosz przer1
- DOD ST1 //zwiększenie ilości zgłosz przerwań
- ŁAD IL_PRZER1 //zapis nowej ilości zgłoszeń
- ODE ST5 //sprawdzenie czy przerwano 5 razy
- SOM POWR_1 //gdy nie zgłoszono 5 przer, skok
- POB ST1 //gdy zgłoszono 5 przer, 1 do AK
- STP // KONIEC PROGRAMU
- //powrót z procedury przerwania
- POWR_1: PZS //pobranie poprzedniej maski ze stosu
- ŁAD MASKA_TMP //zapisanie w zmiennej
- MSK MASKA_TMP //maskowanie poprzednią maską
- PZS //pobranie akumulatora ze stosu
- PWR //powrót z przerw, zwrot licznika ze stosu
- // ANALOGICZNIE WYGLĄDA OPIS PROCEDUR PRZERWAŃ 2, 3, 4
- PRZER2: DNS
- RMSK MASKA_TMP
- MSK MASKA_2
- POB MASKA_TMP
- DNS
- POB ST5
- ŁAD LICZNIK_2
- PISZ_2: POB ASCII_2
- WYP 2
- POB LICZNIK_2
- ODE ST1
- ŁAD LICZNIK_2
- SOZ NEXT_2
- SOB PISZ_2
- NEXT_2: POB IL_PRZER2
- DOD ST1
- ŁAD IL_PRZER2
- ODE ST5
- SOM POWR_2
- POB ST2
- STP
- POWR_2: PZS
- ŁAD MASKA_TMP
- MSK MASKA_TMP
- PZS
- PWR
- PRZER3: DNS
- RMSK MASKA_TMP
- MSK MASKA_3
- POB MASKA_TMP
- DNS
- POB ST7
- ŁAD LICZNIK_3
- PISZ_3: POB ASCII_3
- WYP 2
- POB LICZNIK_3
- ODE ST1
- ŁAD LICZNIK_3
- SOZ NEXT_3
- SOB PISZ_3
- NEXT_3: POB IL_PRZER3
- DOD ST1
- ŁAD IL_PRZER3
- ODE ST5
- SOM POWR_3
- POB ST3
- STP
- POWR_3: PZS
- ŁAD MASKA_TMP
- MSK MASKA_TMP
- PZS
- PWR
- PRZER4: DNS
- RMSK MASKA_TMP
- MSK MASKA_4
- POB MASKA_TMP
- DNS
- POB ST9
- ŁAD LICZNIK_4
- PISZ_4: POB ASCII_4
- WYP 2
- POB LICZNIK_4
- ODE ST1
- ŁAD LICZNIK_4
- SOZ NEXT_4
- SOB PISZ_4
- NEXT_4: POB IL_PRZER4
- DOD ST1
- ŁAD IL_PRZER4
- ODE ST5
- SOM POWR_4
- POB ST4
- STP
- POWR_4: PZS
- ŁAD MASKA_TMP
- MSK MASKA_TMP
- PZS
- PWR
- // ====== DEKLARACJE =====
- ZNAK: RPA //miejsce na pobrany znak do wyp
- ST0: RST 0 //stała zero
- ST1: RST 1 //stała jeden
- ST2: RST 2 //stała dwa
- ST3: RST 3 //stała trzy
- ST4: RST 4 //stała cztery
- ST5: RST 5 //stała pięć
- ST7: RST 7 //stała siedem
- ST9: RST 9 //stała dziewięć
- LICZNIK_1: RPA //licznik pętli wypro {111}
- LICZNIK_2: RPA //licznik pętli wypro {22222}
- LICZNIK_3: RPA //licznik pętli wypro {3333333}
- LICZNIK_4: RPA //licznik pętli wypr {444444444}
- MASKA_TMP: RPA //zmienna pomoc do przech maski
- IL_PRZER1: RPA //ilość przerwań priorytetu 1
- IL_PRZER2: RPA //ilość przerwań priorytetu 2
- IL_PRZER3: RPA //ilość przerwań priorytetu 3
- IL_PRZER4: RPA //ilość przerwań priorytetu 4
- ASCII_1: RST 49 //’1’ w ASCII, do wypisywania 1
- ASCII_2: RST 50 //’2’ w ASCII, do wypisywania 2
- ASCII_3: RST 51 //’3’ w ASCII, do wypisywania 3
- ASCII_4: RST 52 //’4’ w ASCII, do wypisywania 4
- MASKA_1: RST 15 //MASKA 1111
- MASKA_2: RST 7 //MASKA 0111
- MASKA_3: RST 3 //MASKA 0011
- MASKA_4: RST 1 //MASKA 0001
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement