Klausur 27.09.2012

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Klausur 27.09.2012
Servus Leute,

ich hatte mal eine Frage zur Aufgabe 1.4)

Man soll ein Mikroprogramm schreiben, dass Zeichenweise aus der Eingabe liest und sie ausgibt, bis die ‘0’ (null) eingelesen wird.

Zunächst meine Sprungüberlegung: Das Programm soll solange zurück zum Anfang springen, bis die ‘0’ eingelesen wird.

Mein Programm:

  1. Wähle Eingabe → Lade D;
  2. Wähle D → Lade E, Lade A //somit liegt in E schonmal das vielleicht auszugebende Zeichen
  3. A-1 //Falls 0-1 = -1 => Springe nicht, “laufe ins leere” , Falls irgend ein anderes Zeichen -1 => Ergebnis >= 0
  4. Lade C
  5. Springe auf Adresse 0000 falls nicht ‘0’, Wähle Ausgabe //hier würde er aber auch die ‘0’ ausgeben (not sure if allowed)

Was haltet ihr davon? Richtig ?

Kann man 2. und 3. auch in einem Takt realisieren, sprich führe A-1 aus und Lade Ergebnis in C ?
Wie schaut es aus, wenn man auf die Adresse 0 springen will, schreibt man dann in die Zieladresse (Bit 18 19 20 21) dann 0 0 0 0 rein ?

Vielen Dank und grüßeee


Ich glaube schon, das man das 2 und 3 befehl zusammen fügen kann.
Ich bin gerade auch am rumrätseln.

  1. Wähle Eingabe → Lade D;
  2. Wähle D → Lade E, Lade A //somit liegt in E schon mal das vielleicht auszugebende Zeichen
  3. A-1 , Lade C
  4. Springe falls C>=0, nach 0111 //ist das Ende.
  5. Wähle Ausgabe, Wähle C, Lade B
  6. A-B (damit sind wir sicher kleiner 0) , Lade C
  7. Springe falls C>=0 nach 0000
  8. ENDE

Ich finde den Multiplexer da unten sehr verwirrend, so wie ich das verstanden habe, springe ich wenn !(C>=O) ist, da S==0, und S ist null wenn C>=0 nicht erfüllt ist.
Bitte ob Rückmeldung, ob meine Überlegung überhaupt richtig ist!


Genau diese Frage müsste doch aber im ersten Tutorium besprochen worden sein, blos gerade da war ich nicht da… könnte vll jemand nachschauen???


du musst negative zahlen noch berücksichtigen


S**t! Thx


kein ding, ist auch einfach reinzucoden, weil du in dem fall ja direkt zur ausgabe springen kannst.


mit negativen Zahlen

  1. Wähle Eingabe → Lade D;

  2. Wähle D → Lade E, Lade B //somit liegt in E schon mal das vielleicht auszugebende Zeichen

  3. B , Lade C

  4. Springe falls C>=0, nach 1010 //wenn es negativ ist

  5. Wähle D → Lade E, Lade A

  6. A-1 , Lade C

  7. Springe falls C>=0, nach 1100 //ist das Ende.

  8. Wähle Ausgabe, Wähle C, Lade B

  9. A-B (damit sind wir sicher kleiner 0) , Lade C

  10. Springe falls C>=0 nach 0000

  11. Wähle Ausgabe

  12. Springe nach 0000

  13. ENDE

Richtig, falsch???


aber weiß nicht, für 6 Punkte kommt es mir ziemlich viel vor


ich hab dein mikroprogramm jetzt nicht ganz durchgeschaut, aber hinzuschreiben “springe wenn es negativ ist” und davor steht “Springe falls C>=0” passt nicht zusammen, oder?


ja, genau das ist der komische multiplexer da, wenn die Sprung bedingung Erfüllt ist, dann springe ich eben nicht
zumindest habe ich es so verstanden


Du springst, wenn deine Zahl nicht negativ ist! Steht ja so auch im Schaltbild der Aufgabe.


ok, ich gehe es mal durch,
ich habe eine negative zahl Eingelesen, durchgreicht, blabla, sie steht in C.
so wenn dann habe ich die Beddingung C>=0, was ich ja nicht erfülle, das heißt hier wird 0 weitergeleitet
so jetzt bin ich am Multiplexer.
if(S==0)
then
Springe
else
nicht springen

meine S ist das Ergebnis von C>=0, was bei einer negativen Zahl nicht true ist, also ist S = 0. Da dann S==0 erfüllt ist, Springe ich

bitte korregiere mich, wenn ich falsch liege, aber so habe ich es zumindest verstanden


Was ist denn an dem Multiplexer so komisch?
Du rechnest was, lädst es ins Register C, setzt die Steuerleitung 17 und wenn C==0 ist, kannst du zu einer Adresse springen, und wenn C>0 springst du zum übernächsten Befehl (=übernächste Adresse), für C<0 machst du gar nichts und gehst normal zum nächsten Befehl über.

Versteh ich nicht wie du darauf kommst das man nicht springen soll wenn die Bedingung dafür erfüllt ist?!


D.h. du wirst auch nicht springen! Weil die Sprungbedingung nicht erfüllt ist und daher gehts normal im Programmtext weiter.

Eben, es ist !nicht! erfüllt also geht ab hier auch nix weiter und du leitest auch keine 0 weiter oder sonstiges.

Rest deines Beispiels spar ich mal zu kommentieren weil du sowieso nicht springst, also die Schaltungen auch nicht erreichst.


Ich glaube nicht dass du (ganz) recht hast, weil ich nicht verstehe, wie du bei C>0 eine Adresse überspringen willst.


ok, wieso Steht dann aber if(S==0) ??? das verstehe ich überhaupt nicht


moment! ich denke grad, es rattert

das mit dem Überspringen wenn C>0 verstehe ich immer noch nicht


Beispiel: C=5
Leitung 17 setzen => C>=0 => Wir springen
if(S==0) then O=A else O=B // Da S!=0 kommen wir in den else-Zweig
D.h. Aus dem Multiplexer kommt (die aktuelle Adresse + 1) raus, der Befehlszähler erhöht die Adresse nochmal um 1
=> Wir sind zur übernächsten Adresse gesprungen.


S ist übrigens einfach nur das weitergeleitete C, weil es ja aus dem selben Register kommt, eventuell hat dich das irritiert?