Wykonanie rozkazu

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

Wykonanie rozkazu

Na wykonanie rozkazu składają się następujące fazy:

  1. Pobranie rozkazu. Rozkaz pobierany jest z miejsca pamięci operacyjnej wskazanej zawartością IC. Jeśli Q=0 rozkaz jest pobierany z bloku pamięci systemowej, jeśli Q=1 - z bloku pamięci wskazanego zawartością rejestru NB. Adres pierwszego słowa rozkazu wskazany jest zawartością licznika rozkazów IC. Liczba pobranych słów zależy od długości rozkazu (1 lub 2).
  2. Określenie efektywności rozkazu
  3. Wyznaczenie argumentu efektywnego
  4. Wykonanie czynności określonej kodem rozkazu
  5. Ustalenie nowej zawartości licznika rozkazów. Jeśli rozkaz nie był rozkazem skoku i nie wystąpiły przypadki szczególne, IC zwiększany jest o długość wykonanego rozkazu.

Po zakończeniu każdego cyklu rozkazowego, w zależności od warunków zaistniałych w minikomputerze, następuje przejście do jednej z następujących czynności:

  • zatrzymanie minikomputera w stanie STOP w wyniku wyłączenia klucza START
  • wykonanie przerwania
  • przejście w stan CZEKAJ w wyniku rozkazu HLT
  • wykonanie następnego cyklu rozkazowego

Efektywność rozkazu

Rozkaz jest nieefektywny (nie zostaje wykonany) w następujących przypadkach:

  • błędny kod operacji
  • po raz czwarty użyty został rozkaz MD
  • rozkaz nielegalny został użyty w programie użytkowym

W przypadku napotkania rozkazu nieefektywnego wykonywane są następujące czynności:

  • wyzerowanie modyfikatora MOD
  • wpisanie 1 do pozycji 6 rejestru zgłoszeń przerwań RZ
  • natychmiastowe zakończenie rozkazu

Wyznaczenie argumentu efektywnego

Argument efektywny (oznaczony symbolem N) rozkazu jest to argument uzyskany z argumentu pierwotnego przez wykonanie wszystkich wskazanych modyfikacji i jest zawsze pełną liczbą 16-bitową. Jeśli żadna z modyfikacji nie jest wykonywana, argumentem efektywnym jest argument pierwotny rozkazu, wydłużony w razie potrzeby do pełnej 16-bitowej długości.

Możliwe są trzy modyfikacje argumentu:

  1. Pre-modyfikacja - możliwa jest w każdym rozkazie zawierającym pierwotny argument i ma miejsce wówczas, gdy zostanie on poprzedzony rozkazem MD (modyfikuj). Argument efektywny rozkazu M' nazywamy modyfikatorem (MOD). Pre-modyfikacja polega na dodaniu modyfikatora do argumentu pierwotnego. Dodawanie wykonywane jest z zaniedbaniem ewentualnego nadmiaru. Rozkaz M' może być również poprzedzony rozkazem MD, ale czwarty z kolei rozkaz MD jest traktowany jako nieprawidłowy i nie jest wykonywany, natomiast powoduje zgłoszenie przerwania.
  2. B-modyfikacja - możliwa jest w rozkazach z argumentem normalnym, w którym B oznacza numer rejestru indeksowego. Polega ona na dodaniu zawartości rejestru indeksowego do argumentu rozkazu. Dodawanie jest wykonywane z zaniedbaniem ewentualnego nadmiaru. Jako rejestry indeksowe mogą być użyte rejestry R1-R7. Zerowa zawartość pola B oznacza brak B-modyfikacji.
  3. D-modyfikacja - możliwa jest w rozkazach z normalnym argumentem. Polega ona na tym, że uzyskany w wyniku poprzednich operacji argument traktowany jest jako adres argumentu efektywnego. Zerowa zawartość pola D oznacza brak D-modyfikacji. Jeśli D=1 to w celu otrzymania argumentu efektywnego dokonywany jest odczyt z bloku pamięci systemowej (przy Q=1) lub z bloku o numerze wskazanym zawartością NB (przy Q-1). Jeśli D=0, argumentem efektywnym jest argument wyznaczony w wyniku poprzednich modyfikacji.

Argument efektywny rozkazu obliczany jest według wzoru:

  • dla D=0: N = R/C/ + M + MOD + R/B/
  • dla D=1: N = S/R/C/ + M + MOD + R/B//

gdzie:

  • R/C/ - zawartość rejestru uniwersalnego o numerze wskazanym w polu c rozkazu (występuje w przypadku C≠0)
  • M - zawartość następnego słowa za słowem podstawowym rozkazu (występuje, gdy C≠0)
  • MOD - modyfikator, argument efektywny rozkazu MD (występuje, gdy poprzednio użyto rozkazu MD)
  • R/B/ - zawartośćś rejestru uniwersalnego wwskazanego w polu B rozkazu (występuje, gdy B≠0)
  • S/x/ - zawartość miejsca pamięci o adresie x

Występowanie modyfikacji zależy od typu argumentu pierwotnego:

  • dla rozkazów z normalnym argumentem możliwe są wszystkie przypadki modyfikacji
  • dla rozkazów z krótkim argumentem możliwa jest tylko pre-modyfikacja
  • dla rozkazów, których pole C jest przedłużeniem kodu operacji, czynności wyznaczania argumentu efektywnego nie są wykonywane.

Poniższa tabela przedstawia wszystkie możliwe modyfikacje i ich kombinacje. Kolumna n zawiera przyrostek dodawany do rozkazów, których nazwa zależy od lokalizacji argumentu normalnego i bitu D-modyfikacji.

MOD /B=0/ ⇒ 0
/B≠0/ ⇒ 1
D /C=0/ ⇒ 0
/C≠0/ ⇒ 1
n Argument efektywny
0 0 0 1 I N = R/C/
0 0 1 1 A N = S/R/C//
0 1 0 1 I N = R/C/ + R/B/
0 1 1 1 A N = S/R/C/ + R/B//
1 0 0 1 I N = R/C/ + MOD
1 0 1 1 A N = S/R/C/ + MOD/
1 1 0 1 I N = R/C/ + MOD + R/B/
1 1 1 1 A N = S/R/C/ + MOD + R/B//
0 0 0 0 D N = M
0 0 1 0 R N = S/M/
0 1 0 0 D N = M + R/B/
0 1 1 0 R N = S/M + R/B//
1 0 0 0 D N = M + MOD
1 0 1 0 R N = S/M + MOD/
1 1 0 0 D N = M + MOD + R/B/
1 1 1 0 R N = S/M + MOD + R/B//

Jeśli w wyniku obliczenia argumentu efektywnego operacja zawiera odwołanie do nieistniejącego słowa pamięci operacyjnej, to zawartość rejestru wynikowego operacji jest nieokreślona, oraz:

  • dla Q=1 następuje zgłoszenie przerwania brak pamięci operacyjnej
  • dla Q=0 maszyna przechodzi w stan STOP przy zapalonym wskaźniku ALARM