Wykonanie rozkazu: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 7 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
Na wykonanie rozkazu składają się następujące fazy: | Na wykonanie rozkazu składają się następujące fazy: | ||
# Pobranie rozkazu | # '''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 | ||
=== | == 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. | |||
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 | * 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/ ⇒ 0<br>/B≠0/ ⇒ 1 !! D !! /C=0/ ⇒ 0<br>/C≠0/ ⇒ 1 !! Argument efektywny | ! MOD !! /B=0/ ⇒ 0<br>/B≠0/ ⇒ 1 !! D !! /C=0/ ⇒ 0<br>/C≠0/ ⇒ 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 || S/ | | 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 |
Aktualna wersja na dzień 21:22, 31 paź 2014
Na wykonanie rozkazu składają się następujące fazy:
- Pobranie rozkazu
- Określenie efektywności rozkazu
- Wyznaczenie argumentu efektywnego
- Wykonanie czynności określonej kodem 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:
- 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:
- 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.
- 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.
- 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