Instrukcje wejścia-wyjścia

Z MERA 400 wiki
Wersja z dnia 20:13, 11 maj 2014 autorstwa Amo (dyskusja | edycje) (Utworzono nową stronę "Instrukcje wejścia-wyjścia służą do realizacji dwóch zadań: # programowego podziału pamięci, # komunikacji...")
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Instrukcje wejścia-wyjścia służą do realizacji dwóch zadań:

  1. programowego podziału pamięci,
  2. komunikacji z urządzeniami peryferyjnymi.

Rozkazy IN i OU są dwuargumentowe: pierwszym argumentem jest rejestr, drugim argument normalny. Najmłodszy bit argumentu normalnego mówi o tym, czy rozkaz jest kierowany do pamięci (1), czy do urządzeń zewnętrznych (0). Szczegóły pierwszego przypadku użycia opisane są w osobnym dokumencie, tutaj zajmiemy się jedynie kwestiami ogólnymi oraz szczegółami komunikacji z peryferiami.

Postać rozkazów IN/OU

Podstawowe argumenty rozkazów IN i OU nie różnią się niczym od pozostałych przypadków z grupy z argumentem normalnym - możliwe jest użycie wszystkich dostępnych modyfikacji. Wyjątkowe jest natomiast to, że cztery kolejne słowa pamięci po słowie (bądź dwóch, w przypadku bezpośredniego argumentu) rozkazu IN/OU zarezerwowane są dla czterech dodatkowych argumentów. Muszą one zawsze wystąpić i zawierają adresy pamięci, na które ustawiony zostanie licznik rozkazów po wykonaniu rozkazu IN/OU. W zależności od warunków, jakie wystąpiły w trakcie jego wykonywania, wybierany jest jeden z podanych adresów:

  • Adres 1 - brak odpowiedzi od kanału bądź urządzenia (brak kanału, brak urządzenia, niesprawność)
  • Adres 2 - kanał lub urządzenie zajęte
  • Adres 3 - rozkaz poprawnie przyjęty przez kanał lub urządzenie
  • Adres 4 - błąd parzystości pamięci

Tak więc poprawne użycie instrukcji IN/OU będzie miało na przykład postać:

         OU r2, r3
         .word noans, busy, ok, parity
 noans:  
         ... ; obsługa przypadku "brak odpowiedzi"
 busy:   
         ... ; obsługa przypadku "zajętość"
 parity: 
         ... ; obsługa przypadku "błąd parzystości"
 ok:     
         ... ; kontyunuacja programu