Escolar Documentos
Profissional Documentos
Cultura Documentos
Rozkazy
Rozkaz Komentarz
ROZKAZ WPR; // wczytaj znak z urządzenia zewnętrznego (przerywalny)
ARGUMENTY 1;
czyt wys wei il;
wyak weja ode weak start; kasuj akumulator
@0 eni wyg weja ode weak JEŻELI Z TO @1 GDY NIE @0; czekaj na gotowość i skacz pod @1
@1 wyrb weja przep weak JEŻELI int TO @i; (RB) -> Ak, obsłuż przerwanie jeśli jest
wyl wea KONIEC; koniec jeśli nie ma przerwania
@i dws wyl as wes; przesuń wskaźnik stosu, przygotuj adres następnej instrukcji
wyws wea; zapisz adres szczytu stosu do A
pisz wyap wel wea rint; zapisz adres powrotu na stosie, skocz pod przerwanie
ROZKAZ WYP; // wyprowadź znak na urządzenie zewnętrzne (przerywalny)
ARGUMENTY 1;
czyt wys wei il;
wyak werb start weja ode weak; (Ak) -> RB, 0 -> Ak, rozpocznij wyprowadzanie danej
@0 eni wyg weja ode weak JEŻELI z TO @1 GDY NIE @0; czekaj na gotowość i skacz pod @1
@1 JEŻELI int TO @i; obsłuż przerwanie jeśli jest
wyl wea KONIEC; koniec jeśli nie ma przerwania
@i dws wyl as wes; przesuń wskaźnik stosu, przygotuj adres następnej instrukcji
wyws wea; zapisz adres szczytu stosu do A
pisz wyap wel wea rint; zapisz adres powrotu na stosie, skocz pod przerwanie
ROZKAZ PZS; // pobierz ze stosu (przerywalny)
Argumenty 0;
czyt wys wei il;
wyws wea iws eni; zapisz WS do A, przesuń WS w dół, rozpocznij obsługę przerwań
czyt wys weja przep weak JEŻELI int TO @i; prześlij adres ze szczytu stosu, do Ak, obsłuż ewentualne przerwanie
wyl wea KONIEC; koniec jeśli nie ma przerwania
@i dws wyl as wes; przesuń wskaźnik stosu, przygotuj adres następnej instrukcji
wyws wea; zapisz adres szczytu stosu do A
pisz wyap wel wea rint; zapisz adres powrotu na stosie, skocz pod przerwanie
ROZKAZ MAS; // Ustaw rejestr maski [(Ak) -> RM]
Argumenty 0;
czyt wys wei il;
wyak sa werm; (Ak) -> RM
wyl wea; koniec
ROZKAZ UMAS; // Odczytaj rejestr maski [(RM) -> Ak]
Argumenty 0;
czyt wys wei il;
wyrm as weja przep weak; (RM) -> Ak
wyl wea; koniec
sob start // wektor przerwań // przerwanie 1
sob int1 int1: dns // zachowaj Ak na stosie
sob int2 umas // odczytaj maskę...
sob int3 dns // i zachowaj na stosie
sob int4 pob Maska1 // przygotuj odpowiednią maskę
start: wpr 1 // wczytaj znak mas // załaduj do RM
ład znak // zapisz pob i1 // pobierz i1
p: wyp 2 // w pętli: ode Jeden // i dekrementuj
pob znak // wypisuj znak soz koncz1 // jeśli wykonano już 5 razy -> koniec
sob p ład i1 // zapisz nowy i1
znak: RPA pob Trzy // inicjalizuj Ak ilością wypisań
// etykiety kończące program, petla1: soz dalej1 // koniec pętli? -> idź do dalej1
// zachowujące numer przerwania w Ak ode Jeden // dekrementuj Ak
koncz1: pob Jeden ład ile1 // zachowaj Ak
stp pob CJeden // pobierz stałą znaku...
koncz2: pob Dwa wyp 2 // i wypisz
stp pob ile1 // przywróć licznik
koncz3: pob Trzy sob petla1 // skocz na początek pętli
stp dalej1: pzs // pobierz maskę ze stosu
koncz4: pob Cztery mas // przywróć starą maskę
stp pzs // pobierz ze stosu stary Ak
// stałe do liczników pętli pwr // koniec
Jeden: RST 1 CJeden: RST '1' // stała znaku do wypisywania
Dwa: RST 2 ile1: RPA // do tymczasowego przechowania Ak
Trzy: RST 3 Maska1: RST 15 // maskuje wszystko, bo int1 ma max.
Cztery: RST 4 // priorytet
Piec: RST 5 i1: RST 5 // ile wywołań przerw. i1 pozostało
Siedem: RST 7
Dziewiec: RST 9
Pozostałe przerwania int2, int3, int4 są analogiczne do int1, różnią się o stałe dotyczące ilości cyfr wypisywanych na ekran,
rodzaju tych cyfr, miejsc skoku w przypadku piątego wystąpienia danego przerwania i wartości maski: