Wykonanie rozkazu: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 27: | Linia 27: | ||
=== Wyznaczenie argumentu efektywnego === | === 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. | ||
Możliwe są trzy modyfikacje argumentu: | 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 | # '''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. | # '''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. | # '''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. | ||
Linia 44: | Linia 41: | ||
* 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 | * 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) | ||
* S/x/ - zawartość miejsca pamięci o adresie x | * 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. |
Wersja z 17:49, 10 sie 2012
Wykonanie rozkazu
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
- Określenie efektywności rozkazu.
- Wyznaczenie argumentu efektywnego
- 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
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:
- 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.