Rozkazy nieefektywne i nielegalne: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
(Utworzono nową stronę "W architekturze procesora MERY-400 rozróżniane są dwa szczególne przypadki rozkazów, które mimo, że zostaną przeczytane z miejsca programu wskazanego licznikiem...")
 
Nie podano opisu zmian
Linia 34: Linia 34:
# Dla nieefektywnych rozkazów dwusłowowych może nastąpić zwiększenie zawartości licznika rozkazów o 1, tak, aby ominąć również argument natychmiastowy rozkazu, znajdujący się w drugim słowie. Dzieje się to w dwóch przypadkach:
# Dla nieefektywnych rozkazów dwusłowowych może nastąpić zwiększenie zawartości licznika rozkazów o 1, tak, aby ominąć również argument natychmiastowy rozkazu, znajdujący się w drugim słowie. Dzieje się to w dwóch przypadkach:
#* Jeśli rozkaz nie był nielegalny (WMI & ~XI) - jest to przypadek legalnych rozkazów skoku z argumentem w drugim słowie, np JZ 0x1234
#* Jeśli rozkaz nie był nielegalny (WMI & ~XI) - jest to przypadek legalnych rozkazów skoku z argumentem w drugim słowie, np JZ 0x1234
#* Lub jeśli ustawiony był wskaźnik przedkoku P (WMI & P) - jest to przypadek przeskoku przez dowolny rozkaz dwusłowowy
#* Lub jeśli ustawiony był wskaźnik przeskoku P (WMI & P) - jest to przypadek przeskoku przez dowolny rozkaz dwusłowowy
# Bezwarunkowo - wyzerowanie wewnętrznych wskaźników: B-modyfikacji (WBI), premodyfikacji (WPI), rozkazu dwusłowowego (WMI), przeskoku (P), oraz licznika premodyfikacji (MC).
# Bezwarunkowo - wyzerowanie wewnętrznych wskaźników: B-modyfikacji (WBI), premodyfikacji (WPI), rozkazu dwusłowowego (WMI), przeskoku (P), oraz licznika premodyfikacji (MC).


Po tej operacji rozpoczynany jest kolejny cykl rozkazowy.
Po tej operacji rozpoczynany jest kolejny cykl rozkazowy.

Wersja z 14:54, 2 paź 2018

W architekturze procesora MERY-400 rozróżniane są dwa szczególne przypadki rozkazów, które mimo, że zostaną przeczytane z miejsca programu wskazanego licznikiem rozkazów, to ich wykonanie będzie zaniechane. Dzieje się to wcześnie, bo na etapie dekodowanie rozkazu, co w niektórych przypadkach staje się jednocześnie sprytnym skrótem do realizacji jego treści.

Wszystkie rozkazy, dla których nie zostanie podjęta faza wykonania nazywane są rozkazami nieefektywnymi. Sygnał NEF na pakiecie P-D ma dla takich przypadków wartość "1". Szczególną grupę rozkazów nieefektywnych stanowią rozkazy nielegalne, czyli takie, które są niepoprawne, lub kontekst, w jakim następuje próba ich wykonania jest niewłaściwy. Dla takich rozkazów sygnał XI na pakiecie P-D przyjmuje wartość "1". Zaliczają się do nich:

  • Rozkazy o kodach binarnych, które nie reprezentują żadnego z rozkazów na liście rozkazów. Są to:
    • Wszystkie rozkazy, które w zapisie binarnym na dwóch najstarszych bitach mają wartość "0".
    • Niektóre rozkazy z grupy "C". W tej grupie istnieją również rozkazy znajdujące się na liście rozkazów, ale nie obejmuje ona wszystkich możliwych kombinacji
    • Niektóre rozkazy z grupy "S", z przyczyn jak wyżej.
  • Rozkazy przeznaczone do wykonaywania wyłącznie w kontekście systemu operacyjnego (Q=0), jeśli próbę ich wywołania podjęto z programu użytkowego:
    • Wszystkie rozkazy istniejące w grupie "S": HLT, MCL, SIT, SIL, SIU, CIT, GIU, LIP, GIL, także rozkazy dodane w procesorze MX-16: CRON, SINT, SIND.
    • Niektóre rozkazy z grupy "B/N": MB, IM, KI, FI, SP.
    • Rozkazy IN oraz OU, jeśli na pakiecie P-D zwora 1-2-3 jest w pozycji 1-3.
  • Rozkaz premodyfikacji MD, jeśli został wywołany po raz czwarty

Pozostałe rozkazy nieefektywne to:

  • Dowolny rozkaz, jeśli poprzedni rozkaz ustawił flagę przeskoku (P=1).
  • Rozkazy skoków, jeśli nie są spełnione warunki wymagane do podjęcia danego skoku (np. nie jest ustawiona flaga zera "Z" w trakcie dekodowania skoku JZ).

Ten ostatni przypadek jest ciekawym trikiem powodującym, że rozkazy niepodejmowanych skoków kończone są bardzo wcześnie, co skraca czas ich wykonania do minimum. Nie tylko nie przechodzą one do fazy wykonania, ale nawet nie są dla nich obliczane argumenty. To sprawia, że ich argumentem może być komórka pamięci nie należąca do żadnego ze skonfigurowanych obszarów, a rozkaz nie zakończy się w takim przypadku błędem dostępu do pamięci.

W przypadku napotkania rozkazu nieefektywnego procesor natychmiast kończy bieżący cykl rozkazowy, wykonując jednak kilka dodatkowych czynności "porządkowych":

  1. Jeśli rozkaz był nielegalny i nie był ustawiony wskaźnik przeskoku P (XI & ~P), zapalane jest przerwanie 6 (nieprawidłowy rozkaz).
  2. Dla nieefektywnych rozkazów dwusłowowych może nastąpić zwiększenie zawartości licznika rozkazów o 1, tak, aby ominąć również argument natychmiastowy rozkazu, znajdujący się w drugim słowie. Dzieje się to w dwóch przypadkach:
    • Jeśli rozkaz nie był nielegalny (WMI & ~XI) - jest to przypadek legalnych rozkazów skoku z argumentem w drugim słowie, np JZ 0x1234
    • Lub jeśli ustawiony był wskaźnik przeskoku P (WMI & P) - jest to przypadek przeskoku przez dowolny rozkaz dwusłowowy
  3. Bezwarunkowo - wyzerowanie wewnętrznych wskaźników: B-modyfikacji (WBI), premodyfikacji (WPI), rozkazu dwusłowowego (WMI), przeskoku (P), oraz licznika premodyfikacji (MC).

Po tej operacji rozpoczynany jest kolejny cykl rozkazowy.