Obsługa stanów wyjątkowych w mikroprocesorze PC 603
Po HRESET zablokowane jest wykonywanie operacji zmiennoprzecinkowych ( w rejestrze stanu procesora MSR : bit FP=0 ). Po HREESET początkowa wartość licznika rozkazów wynosi FFF00100. Pod tym adresem znajduje się instrukcja lfd fri, (0 + #400). Jest to rozkaz ładowania słowa zmiennoprzecinkowego podwójnej precyzji. Procesor stwierdzi wyjątek: wystąpienie rozkazu zmp. Po stwierdzeniu tego wyjątku jego obsługa zaczyna się od FFF00800.
Podwójna pętla programowa (pętla zewnętrzna, w niej pętla wewnętrzna)
FFF00100 |
40 00 00 11 |
bel - pętla zewnętrzna (pierwsza)- skok ze śladem (LINK) do adresu FFF00110 czyli wywołanie podprogramu |
FFF00104 |
42 80 00 00 |
bc - skok do tej samej instrukcji |
FFF00108 |
64 21 00 00 |
oris ri, 0000 (“NOP” - kolejka) |
FFF0010C |
64 21 00 00 |
oris rj , 0000 (“NOP” - kolejka) |
FFF00110 |
mf spr r2 , LR | |
FFF00114 |
andi ri , 0000 | |
FFF00118 |
andis r!, 0000 | |
FFF0011C |
oris rj , 0000 | |
FFF00120 |
stw (r,), r2 | |
FFF00124 |
40 00 00 OD |
bel - pętla wewnętrzna (druga) - skok ze śladem do adresu FFF00130 |
FFF00128 |
oris ri , 0000 | |
FFF0012C |
oris rj , 0000 | |
FFF00130 |
mf spr r3, LR | |
FFF00134 |
stw (rj + 4), r3 | |
FFF00138 |
bclr - skok wg śladu (czyli powrót z podprogramu) | |
FFF0013C |
64 21 00 00 |
oris n , 0000 (“NOP” - kolejka) |
Jak widać z powyższego programu, poprzedni LR (z pierwszej pętli), został utracony. Aby go odzyskać, należy „programowo” czyli osobnym rozkazem (mt spr) wpisać go z r2 (gdzie został zachowany) do LR . Należy w tym celu zmienić program następująco:
FFF00138
FFF0013C
FFF00140
mt spr LR, r2 bclr
oris n , 0000 (“NOP” - kolejka)