Der Bonsai-Computer history menue Letztmalig dran rumgefummelt: 13.10.13 11:25:50


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.

Mikroprozessor und Peripherie

das Logo des Bonsai-Computers

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

Wissen für Fortgeschrittene 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
... was man beachten muss:
  • Kommentarzeilen mit Semikolon einleiten
  • Hauptspeicher mit 72 Speicherzellen für Programme
  • Zahlendarstellung nur im Dezimalsystem
  • Zahlenbereich von -9999 bis 9999
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
... 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    

Logische Struktur einer CPU

Computer für Anfänger

   
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 1:

ausgangsoperand aus eingaberegister holen
ausgangswert auf speicherplatz schreiben
zwischenergebnis mit 2 multiplizieren
vom wert a b subtrhieren
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

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

 

MOPS-Programme 2009



zur Hauptseite
© Samuel-von-Pufendorf-Gymnasium Flöha © Frank Rost am 13. Oktober 2013 um 11.25 Uhr

... 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 ;-)