Wykonanie rozkazu: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
 
(Nie pokazano 5 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
=== Wykonanie rozkazu ===
Na wykonanie rozkazu składają się następujące fazy:
Na wykonanie rozkazu składają się następujące fazy:
# Pobranie rozkazu 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
# '''Pobranie rozkazu'''
# Określenie efektywności rozkazu.
# '''Określenie efektywności rozkazu'''
# Wyznaczenie argumentu efektywnego
# '''Wyznaczenie argumentu efektywnego'''
# Wykonanie czynności określonej kodem rozkazu
# '''Wykonanie czynności określonej kodem rozkazu'''
# Jeśli rozkaz nie był rozkazem skoku i nie wystąpiły przypadki szczególne, IC zwiększany jest o długość wykonanego rozkazu
# '''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:
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
* zatrzymanie minikomputera w stanie STOP w wyniku wyłączenia klucza START
* wykonanie przerwania
* [[Przerwania|wykonanie przerwania]]
* przejście w stan CZEKAJ w wyniku rozkazu HLT
* przejście w stan CZEKAJ w wyniku rozkazu HLT
* wykonanie następnego cyklu rozkazowego
* wykonanie następnego cyklu rozkazowego


=== Efektywność rozkazu ===
== 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 i wynosi 1 lub 2.


== Efektywność rozkazu ==
Rozkaz jest nieefektywny (nie zostaje wykonany) w następujących przypadkach:
Rozkaz jest nieefektywny (nie zostaje wykonany) w następujących przypadkach:
* błędny kod operacji
* błędny kod operacji
Linia 21: Linia 21:
* rozkaz nielegalny został użyty w programie użytkowym
* rozkaz nielegalny został użyty w programie użytkowym
W przypadku napotkania rozkazu nieefektywnego wykonywane są następujące czynności:
W przypadku napotkania rozkazu nieefektywnego wykonywane są następujące czynności:
* wyzerowanie modyfikatora MOD
* wyzerowanie modyfikatora MOD,
* wpisanie 1 do pozycji 6 rejestru zgłoszeń przerwań RZ
* jeśli wskaźnik przeskoku P=0, wpisanie 1 do pozycji 6 rejestru zgłoszeń przerwań RZ,
* natychmiastowe zakończenie rozkazu
* jeśli wskaźnik przeskoku P=1, wyzerowanie wskaźnika P,
* natychmiastowe zakończenie rozkazu.


=== Wyznaczenie argumentu efektywnego ===
Zawartość rejestrów programowych nie ulega zmianie. Licznik rozkazów zawiera adres pierwszego słowa następnego 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.
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.
Linia 40: Linia 42:
gdzie:
gdzie:
* R/C/ - zawartość rejestru uniwersalnego o numerze wskazanym w polu c rozkazu (występuje w przypadku C≠0)
* 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)
* 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)
* 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)
* R/B/ - zawartośćś rejestru uniwersalnego wwskazanego w polu B rozkazu (występuje, gdy B≠0)
Linia 50: Linia 52:
* dla rozkazów, których pole C jest przedłużeniem kodu operacji, czynności wyznaczania argumentu efektywnego nie są wykonywane.
* 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
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.


{| class="wikitable"
{| class="wikitable"
! MOD !! /B=0/ &rArr; 0<br>/B&ne;0/ &rArr; 1 !! D !! /C=0/ &rArr; 0<br>/C&ne;0/ &rArr; 1 !! Argument efektywny
! MOD !! /B=0/ &rArr; 0<br>/B&ne;0/ &rArr; 1 !! D !! /C=0/ &rArr; 0<br>/C&ne;0/ &rArr; 1 !! n !! Argument efektywny
|-
|-
| 0 || 0 || 0 || 1 || N = R/C/
| 0 || 0 || 0 || 1 || I || N = R/C/
|-
|-
| 0 || 0 || 1 || 1 || N = S/R/C//
| 0 || 0 || 1 || 1 || A || N = S/R/C//
|-
|-
| 0 || 1 || 0 || 1 || N = R/C/ + R/B/
| 0 || 1 || 0 || 1 || I || N = R/C/ + R/B/
|-
|-
| 0 || 1 || 1 || 1 || N = S/R/C/ + R/B//
| 0 || 1 || 1 || 1 || A || N = S/R/C/ + R/B//
|-
|-
| 1 || 0 || 0 || 1 || N = R/C/ + MOD
| 1 || 0 || 0 || 1 || I || N = R/C/ + MOD
|-
|-
| 1 || 0 || 1 || 1 || N = S/R/C/ + MOD/
| 1 || 0 || 1 || 1 || A || N = S/R/C/ + MOD/
|-
|-
| 1 || 1 || 0 || 1 || N = R/C/ + MOD + R/B/
| 1 || 1 || 0 || 1 || I || N = R/C/ + MOD + R/B/
|-
|-
| 1 || 1 || 1 || 1 || N = S/R/C/ + MOD + R/B//
| 1 || 1 || 1 || 1 || A || N = S/R/C/ + MOD + R/B//
|-
|-
| 0 || 0 || 0 || 0 || N = M
| 0 || 0 || 0 || 0 || D || N = M
|-
|-
| 0 || 0 || 1 || 0 || N = S/M/
| 0 || 0 || 1 || 0 || R || N = S/M/
|-
|-
| 0 || 1 || 0 || 0 || N = M + R/B/
| 0 || 1 || 0 || 0 || D || N = M + R/B/
|-
|-
| 0 || 1 || 1 || 0 || N = S/M + R/B//
| 0 || 1 || 1 || 0 || R || N = S/M + R/B//
|-
|-
| 1 || 0 || 0 || 0 || N = M + MOD
| 1 || 0 || 0 || 0 || D || N = M + MOD
|-
|-
| 1 || 0 || 1 || 0 || N = S/M + MOD/
| 1 || 0 || 1 || 0 || R || N = S/M + MOD/
|-
|-
| 1 || 1 || 0 || 0 || N = M + MOD + R/B/
| 1 || 1 || 0 || 0 || D || N = M + MOD + R/B/
|-
|-
| 1 || 1 || 1 || 0 || N = S/M + MOD + R/B//
| 1 || 1 || 1 || 0 || R || N = S/M + MOD + R/B//
|-
|-
|}
|}

Aktualna wersja na dzień 21:22, 31 paź 2014

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

  1. Pobranie rozkazu
  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

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 i wynosi 1 lub 2.

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,
  • jeśli wskaźnik przeskoku P=0, wpisanie 1 do pozycji 6 rejestru zgłoszeń przerwań RZ,
  • jeśli wskaźnik przeskoku P=1, wyzerowanie wskaźnika P,
  • natychmiastowe zakończenie rozkazu.

Zawartość rejestrów programowych nie ulega zmianie. Licznik rozkazów zawiera adres pierwszego słowa następnego 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