MOPS - der MOdellrechner mit PSeudo-Assembler history menue Letztmalig dran rumgefummelt: 05.01.16 17:19:35


Der MOPS ist ein Modellrechner nach der von-Neumann-Architektur. Im Befehlsvorrat sowie der Registerzahl absolut vereinfacht ist er ausgezeichnet geeignet, auch schon komplexe interne Vorgänge wirklichkeitsnah abzubilden. Funktionalität, Speichergröße sowie Registeranzahl sind bewusst startk vereinfacht.
1. MOPS - die Grundlagen
2. MOPS - die Beschreibung sowie die Besonderheiten
3. Lösungsalgorithmen und andere Simulatoren
4. Programmvorschläge
5. Verwandte Themen

Mikroprozessor und Peripherie

MOPS - der universelle CPU-Simulator

inhaltlich auf korrektem Stand - evtl. partiell unvollständig ;-)

Basiswissen der Informatik

... hier startest Du das Programm und mit der Minikonsole kann es bedient werden:

MOPS direkt starten

MOPS-Steuerung

  • <F5> - Start
  •  <Leertaste> - nächster Schritt
  •  <Esc> - unterbricht das Programm


1. MOPS - die Grundlagen history menue scroll up
MOPS ist eine kleine CPU- besser eine Rechnerkern-Simulation. Das absolut Wesentliche von CPU sowie RAM  - und dies auch noch stark, jedoch sinnvoll vereinfacht, wird wieder gegeben. Es macht für Anfänger auch nur wenig Sinn, eine vollständige CPU mit ihren vielfältigen Möglichkeiten, jedoch auch Problemen (hier sei lediglich auf das Wärmeproblem hingewiesen) abzubilden. Pädagogisch also ein sehr wertvolles Werkzeug ;-)
Da auch der Befehlssatz absolut minimalistisch ist, sind natürlich praktische Problemlösungs-Algorithmen nur eingeschränkt abarbeitbar.
... MOPS arbeitet nach dem Compiler-Prinzip:

Programmiersprachen

... Basiswissen;
... was man beachten muss: ... der MOPS als Compiler-System: ... wie der MOPS arbeitet: ... wie der MOPS einliest und ausgibt:
  • Kommentarzeilen mit Semikolon einleiten
  • Hauptspeicher mit 72 Speicherzellen für Programme
  • Zahlendarstellung nur im Dezimalsystem
  • Zahlenbereich von -9999 bis 9999
  • Befehle bestehen aus Operationscode und evtl. einem Operanden
  • das Programm muss syntaktisch einwandfrei sein - es muss ohne Fehlermeldung über den Compiler laufen
  • alle Assemblerbefehle müssen in definierte Maschinen-Codes übersetzbar sein - sie müssen ergo in die Menge der definierten Befehle passen
  • vor dem Programmstart zeigt der Programmzähler (Program-Counter - PC) auf Adresse 00
  • jedes Programm startet also bei 00
  • auf 00 muss immer ein Operationscode stehen
  • die Befehle werden aufsteigend abgearbeitet wie bei realen Prozessoren
  • Eingaben können ausschließlich in Form von Zahlen im Bereich von -9999 bis 9999 ins Eingaberegister geschrieben werden und werden mit der ENTER-Taste übernommen
  • im Modus "Ausgabe-Stopp" ist nach dem Einschreiben in das Ausgaberegister Zwangsschluss
... Aufbau des MOPS-Rechners;
RAM Steuerwerk Rechenwerk Ein- Ausgaberegister Asseblertext-Eingafeld

Random Access Memory . RAM (Hauptspeicher)

  • arbeitet im Gegensatz zu realen Rechnern mit Dezimalzahlen

Steuerwerk

  • besteht im wesentlichen aus
    • der Steuerlogik
    • dem Programmzähler (Program-Counter)
    • dem Befehlsregister
    • die Aufgabe besteht im Lesen sowie interpretieren des aktuellen Befehls
  • erkennt aus dem Operationscode, ob ein weiterer Operand gelesen werden muss
  • aktueller OP-Code wird in das Befehls-Lese-Register eingetragen

Rechenwerk

  • die eigentliche "Recheneinheit" des Prozessors

IN/OUT-Register

  • das Eingaberegister ist in der Lage, Eingabewerte ausschließlich in Zahlenform entgegen zu nehmen
  • Ergebnisse können unter anderem in das Augaberegister geschrieben werden - das entspricht in etwa der Arbeitsweise realer Rechner

Assemblertext-Fenster

  • das Eingaberegister ist in der Lage, Eingabewerte ausschließlich in Zahlenform entgegen zu nehmen
  • Ergebnisse können unter anderem in das Augaberegister geschrieben werden - das entspricht in etwa der Arbeitsweise realer Rechner
... die Befehlsabläufe gliedern sich;
Operations-Code holen - PC auslesen Operations-Code holen - aktuellen OP-Code holen Zugriff auf Speicherzelle mit Adresse des aktuellen PC Eintragen des aktuellen OP-Codes in das Befehlsregister Op-Code sowie Operand stehen im entsprechenden Register

MOPS - ersten OP-Code holen

Befehlszählerstand auslesen

MOPS im Laufzeitmodus - Echtzeitablauf

MOPS im Laufzeitmodus - Echtzeitablauf

MOPS im Laufzeitmodus - Echtzeitablauf

Ativierung des aktuellen Ausgaberegisters "a" mit der Adresse "64" Erkennen, dass Adresse # 64 die aktuelle Einlesezelle auf dem RAM-Bereich ist Erkennen des Eingaberegiters zur Entgegennahme eines Dezimalwertes Freischalten des Eingaberegiters zur Entgegennahme eines Dezimalwertes  

MOPS im Laufzeitmodus - Echtzeitablauf

MOPS im Laufzeitmodus - Echtzeitablauf

MOPS im Laufzeitmodus - Echtzeitablauf

MOPS im Laufzeitmodus - Echtzeitablauf

 
... die Animation kann dazu jeweils AUS- schnell-, mittel. oder langsam geschalten werden
einfacher RUN-Modus Mikrozyklen - beste Demo-Möglichkeit für Teilschritte in Verbindung mit Animation VN-Zyklen Befehlszyklen - beste Demo-Möglichkeit für ganze Befehle

MOPS im Laufzeitmodus - Echtzeitablauf

  • das Programm wird von Anfang bis Ende ohne Unterbrechung abgearbeitet

  • gestoppt werden nur Ein- und Ausgaben über die entsprechenden Register (Quittiert mit ENTER)

MOPS im Mikrozyklen-Modus

MOPS im VN-Zyklen-Modus

  • jeder Einzelbefehl wird komplett abgearbeitet - die PAUSEN-Taste rastet danach automatisch ein

  • der Benutzer muss die PAUSEN-Taste aktivieren, um den nächsten Befehl abzuarbeiten

MOPS im VN-Zyklen-Modus

       

2. MOPS - die Beschreibung history menue scroll up
Das Rundreiseproblem gehört zu den klassischen, für große Mächtigkeiten, nicht lösbaren Problemen.
Zu ermitteln ist die kürzeste Trassierung aller gegeben Knoten durch einen Kreis, wobei jede Strecke möglichst nur einmal zu befahren ist. Einproblem, welches für Logistikunternehmen, Postzusteller sowie Schiffahrtsrouten (NEIN - das schreib' ich schon aus Prinzip nicht mit drei "f"!) ganz real ist.
Bereits für einen kleine Anzahl n gegebener Knoten in bekanntem Abstand m ergibt sich eine zu untersuchende Mächtigkeit, welche in realem Antwortzeitverhalten nicht erreichbar ist. Interessant dabei ist, dass bereits bei der Hälfte der untersuchten Fälle zumindest für bestimmte Strukturen eine Toleranzschwelle von 3 % erreicht wird - mit anderen Worten: bis auf 3 % Ungewissheit habe ich die Minimallösung.
Was alles verfügbar ist ...

MOPS-Doku

MOPS-Befehlssatz

Befehl Code Funktion
ld adr 10 load: Lade den Wert an der Adresse adr in den Akku
ld val 11 load: Lade den Wert val in den Akku
st adr 12 store: Speichere den Wert des Akku an der Adresse adr
in adr 20 input: Schreibe den Wert des Eingaberegisters an die Adresse adr
out adr 22 output: Schreibe den Wert an der Adresse adr ins Ausgaberegister
out val 23 output: Schreibe den Wert val ins Ausgaberegister
add adr 30 add: Addiere den Wert an der Adresse adr zum Akku
add val 31 add: Addiere den Wert val zum Akku
sub adr 32 subtract: Subtrahiere den Wert an der Adresse adr vom Akku
sub val 33 subtract: Subtrahiere den Wert val vom Akku
mul adr 34 multiply: Multipliziere den Wert an der Adresse adr mit dem Akku
mul val 35 multiply: Multipliziere den Wert val mit dem Akku
div adr 36 divide: Dividiere den Akku durch den Wert an der Adresse adr
div val 37 divide: Dividiere den Akku durch den Wert val - nur ganzzahliger Teil
mod adr 38 modulo: Rest bei Division des Akku durch den Wert an der Adresse adr
mod val 39 modulo: Rest bei Division des Akku durch den Wert val
cmp adr 40 compare: Vergleiche den Akkuinhalt mit dem Wert an der Adresse adr
cmp val 41 compare: Vergleiche den Akkuinhalt mit dem Wert val
jmp tar 50 jump: Springe zum Zielpunkt tar (Zeilennummer oder Marke)
jlt tar 52 jump if less then: Springe ..., wenn bei cmp der Akkuinhalt kleiner war
jeq tar 54 jump if equal: Springe ..., wenn bei cmp der Akkuinhalt gleich war
jgt tar 56 jump if greater then: Springe ..., wenn bei cmp der Akkuinhalt größer war
end 60 end: Beendet ein Programm
  • adr ist eine Adresse
  • val bildet einen Wert ab
  • der Akku ist das "Rechenregister" der CPU
  • In und Out stellen die Ein- und Ausgabeports dar - hier können Werte zur externen Verarbeitung abgeholt werden
  • tar für "target" ist das Ziel einer Sprunganweisung
Wie Besonderes gemacht wird ...
Sprunmarken Prozeduren  
es gibt zwei Möglichkeiten, Sprungziele zu definieren:
  • erstens - über einen definierten Namen:
    • eine Sprungmarke wird definiert durch die erste Anweisung des Sprungzieles gefolgt von einem Namen für das Sprungziel mit folgenden Besonderheiten:
    • keine reservierten Namen (das sind Zeichenfolgen mit Assembler-Codes (ADD, SUB, JMP u.s.w. (siehe Befehlsliste oben))
    • eingeleitet durch einen Doppelpunkt
    • angesprungen wird das Ziel durch einen der Sprungbefehle plus Name des Sprungzieles (ohne Doppelpunkt)
  • zweitens - über die Zeilennummer:
    • eine Sprungmarke wird gar nicht definiert - bekannt muss lediglich die Zeilennummer sein
    • angesprungen wird das Ziel durch einen der Sprungbefehle plus #zeilennummer

 

MOPS-Beispiel

MOPS-Befehlssatz

 

3. Lösungsalgorithmen und andere Simulatoren history menue scroll up
Das Rundreiseproblem gehört zu den klassischen, für große Mächtigkeiten, nicht lösbaren Problemen.
Zu ermitteln ist die kürzeste Trassierung aller gegeben Knoten durch einen Kreis, wobei jede Strecke möglichst nur einmal zu befahren ist. Einproblem, welches für Logistikunternehmen, Postzusteller sowie Schiffahrtsrouten (NEIN - das schreib' ich schon aus Prinzip nicht mit drei "f"!) ganz real ist.
Bereits für einen kleine Anzahl n gegebener Knoten in bekanntem Abstand m ergibt sich eine zu untersuchende Mächtigkeit, welche in realem Antwortzeitverhalten nicht erreichbar ist. Interessant dabei ist, dass bereits bei der Hälfte der untersuchten Fälle zumindest für bestimmte Strukturen eine Toleranzschwelle von 3 % erreicht wird - mit anderen Worten: bis auf 3 % Ungewissheit habe ich die Minimallösung.
... was man wissen muss - Sprungmarken:
Der MOPS ist in der Lage, so genannte Sprungmarken zu definieren. Das sind Einsprungpunkte, welche durch Sprungbefehle erreicht werden können und diese gelten genau dann, wenn das Programm nicht mit dem nächsten Schritt fortgesetzt werden soll. Sprungmarken werden mit Doppelpunkt eingeleitet und dürfen nicht mit Bezeichnern aus dem Befehlssatz belegt werden. Schauen wir uns die Gestaltung der Arbeit mit Sprungmarken am Beispiel an:

;test gerade zahl
;wenn gerade, dann in ausgaberegister "1", sonst "0"
in a
;testen
ld a
mod 2
cmp 0
jeq gerade
jgt ungerade
ld 1 :gerade
st b
out b
jmp ende
ld 0 :ungerade
st b
out b
jmp ende
end :ende

... wie man programmiert:
hier arbeitet man typischerweise mit dem so genannten Pseudocode - das ist noch kein Programm in MOPS-Sprache, wobei fast alles klein geschrieben wird - wiederum Demonstration am Beispiel
  • programm zum addieren zweier zahlen
  • zwei zahlen (operanden) einlesen
  • ersten operanden in den akku laden
  • addition mit speicherplatz des zweiten operanden
  • inhalt des akku auf den speicher
  • anzeige des akku im ausgaberegister
... wenn man mehr wissen will - Profis kriegen die Kurve:
Struktur einer realen CPU der Computer für Einsteiger Mikroprozessoren und ihre Entwicklung INTEL-Prozessoren der Opa i4004 Z-80

Logische Struktur einer CPU

Computer für Anfänger

Mikroprozessoren - The Histor

Standard-Mikroprozessoren

zum i4004

Z80-System

Doku LC.80 LC-80 starten ... Grundwissen  für den LC-80 Befehlssatz LC80 Doku POLYCOMPUTER Z1013

Der LC-80 Simulator

Der LC-80 Emulator zum direkten Starten

LC-80 und mehr LC-80 aktuell

die beliebte alphabetisch sortierte Schnell-Liste

POLYCOMPUTER

 

Z1013

Z80-Assembler HEX-Code - dieRealität ... Bitmuster      

zum ASIDE-Assemblers

The Mother of Tetraed Codes - der HEX-Code

Digital-Signale

     

4. MOPS - die Beispiele history menue scroll up
Das Rundreiseproblem gehört zu den klassischen, für große Mächtigkeiten, nicht lösbaren Problemen.
Zu ermitteln ist die kürzeste Trassierung aller gegeben Knoten durch einen Kreis, wobei jede Strecke möglichst nur einmal zu befahren ist. Einproblem, welches für Logistikunternehmen, Postzusteller sowie Schiffahrtsrouten (NEIN - das schreib' ich schon aus Prinzip nicht mit drei "f"!) ganz real ist.
Bereits für einen kleine Anzahl n gegebener Knoten in bekanntem Abstand m ergibt sich eine zu untersuchende Mächtigkeit, welche in realem Antwortzeitverhalten nicht erreichbar ist. Interessant dabei ist, dass bereits bei der Hälfte der untersuchten Fälle zumindest für bestimmte Strukturen eine Toleranzschwelle von 3 % erreicht wird - mit anderen Worten: bis auf 3 % Ungewissheit habe ich die Minimallösung.
Struktogramme und Programm-Ablaufpläne Pseudocode

Struktogramme

 
MOPS-Prograqmmbibliothek I

;eine Zahl in den Akku lesen
in a
ld a
end

Datei downloaden

MOPS-Prograqmmbibliothek II
Erstelle ein Programm zur Umwandlung einer Zahl  in ihren negativen Wert:
Pseudocode Variante 1:

ausgangsoperand aus eingaberegister holen
ausgangswert in akku schreiben
zwei mal subtrahieren
resultat auf ausgaberegister schreiben

Assemmblertext Variante 1:

;Zahl negativ darstellen
in a
ld a
sub a
sub a
st b
out b
end

Pseudocode Variante 2:

ausgangsoperand aus eingaberegister holen
ausgangswert auf speicherplatz schreiben
zwischenergebnis mit 2 multiplizieren
vom wert a b subtrahieren
resultat auf ausgaberegister schreiben

Assemmblertext Variante 2:

;Zahl negativ darstellen
in a
ld a
st b
mul 2
st a
ld b
sub a
st c
out c
end

Pseudocode Variante 3:

ausgangsoperand aus eingaberegister holen
operand in akuu schreiben
mit -1 mltiplizieren
resultat auf ausgaberegister schreiben

Assemmblertext Variante 2:

;Zahl negativ darstellen
in a
ld a
mul -1
st b
out b
end

MOPS-Prograqmmbibliothek III

; dritte potenz eines eingabewertes bis max 21
in a
; gerade machen
ld a
mod 2
cmp 0
ld a
jeq weiter
sub 1
; rückwärts zählen
st b :weiter
out b
sub 2
cmp 0
jgt weiter
end

Datei downloaden

Erstelle ein Programm zur Berechnung der dritten Potenz einer einzugebenden Zahl:
Pseudocode Variante 1:

ausgangsoperand aus eingaberegister holen
ausgangswert auf speicherplatz schreiben
zaehlregister mit 2 laden
ausgangswert von speicherplatz holen
ausgangswert in rechenregister laden
ausgangswert mit rechenregister multiplizieren
zaehlregister 1 abziehen
zwischenergebnis auf speicherplatz schreiben
zwischenergebnis holen
zwischenergebnis mit rechenregister multiplizieren
resultat auf ausgaberegister schreiben

Pseudocode Variante 2:

ausgangsoperand aus eingaberegister holen
ausgangswert auf speicherplatz schreiben
zaehlregister mit 2 laden
ausgangswert von speicherplatz holen
ausgangswert in rechenregister laden
ausgangswert in zwischenregister laden
wiederhole, bis zaehlregister=0
  ausgangswert mit rechenregister multiplizieren
  zwischenergebnis auf speicherplatz schreiben
  zaehlregister 1 abziehen
end
zwischenergebnis auf ausgaberegister schreiben

 

MOPS-Prograqmmbibliothek IV

;sortieren zweier zahlen
;h = help
in a
in b
ld a
cmp b
jlt ende
;tausch (a>b)
ld a
st h
ld b
st a
ld h
st b
end :ende

Datei downloaden

Erstelle ein Programm zum Sortieren zweier einzugebender Zahlen:
Pseudocode:

- zahlen einlesen
- zelle a in akku
- vergleiche akku mit zelle b
- wenn akku größer als b
dann gehe zu tausch
sonst gehe zu ende
- end

 

MOPS-Prograqmmbibliothek V

;sortieren zweier zahlen
;h = help
in a
in b
ld a
cmp b
jlt ende
;tausch (a>b)
ld a
st h
ld b
st a
ld h
st b
end :ende

Datei downloaden

Erstelle ein Programm zum Ermitteln, ob eine eingegebene Jahreszahl ein Schaltjahr ist oder nicht:
Pseudocode:

- zahlen einlesen
- zelle a in akku
- vergleiche akku mit zelle b
- wenn akku größer als b
dann gehe zu tausch
sonst gehe zu ende
- end

 

Programme 2009 Programme 2013 Programme 2015

MOPS-Programme 2009

 
  • Fakultätsberechnung
  • Gauß'sche Additionsreihe
  • Fibonacci-Zahlen
  • McCarthy-Algorithmus
 


5. Verwandte Themen history menue scroll up

Das alles, was hier so steht, geht auf Computern grundsätzlich zu lösen, bzw. lässt sich nachweisen, dass ein Problem in endlicher Zeit nicht sinnvoll lösbar sein kann - oder aber schlimmstenfalls niemals vollständig lösbar sein wird. In diesem Wissen sowie ein wenig Mathematik geben wir uns mitunter nicht ganz ohne schlussendlich recht zu behalten, mit Teillösungen zufrieden.

Struktogramme

Programmierung

Programme

Grundalgorithmen

Computergeschichte

von-Neumann-Architektur

Mikroprozessoren

 

Prozessoraufbau für Fortgelaufene ;-)

... und so funktioniert ein Computer

Prozesorarchitektur

Z80

i8086

Assembler/Disassambler

       

das 8-Dame-Problem

des Cliquen-Problem

Domino-Problem

das Entscheidbarkeitsproblem

das Erfüllbarkeitsproblem

die Fibonacci-Zahlen

das Flaggenproblem

das Halteproblem

das Hamilton-Problem

das K-Farben-Problem

der Kaprekar-Algorithmus

die Magischen Quadrate

das PASCAL'sche Dreiecksproblem

das Philosophenproblem

das Königsberger-Brückenproblem

das Rucksackproblem

das Rundreiseproblem

das Springer-Problem

die Türme von Hanoi

das Wortproblem

das Wüstenfit-Problem

das 153-Problem

The Busy Beaver-Problem

Greedy Algorithm

SUDOKU

   

Worst-Case-Denken

Algorithmentheorie

Komplexität, Mächtigkeit und Aufwand

Praktische Elementaralgorithmen

Lösbarkeit und Problemlösungsstrategien

Klassische algorithmisch lösbare Probleme

Zufall und Computer

Graphentheorie

Petri-Netze

Informationsbegriff

Logo für die Signale

Nachrichten

Wissen

Systembegriff

Modellbegriff

Simulation

Denken und Sprache

Zahlen, Daten und Datentypen

Gegenläufigkeit und Verklemmung

Pattern-Matching

 



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost am 10. November 2009

... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-)

„Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“

Diddi Hallervorden, dt. Komiker und Kabarettist

Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-)