Hallo erstmal! Habe da ein paar wichtige Fragen die ich mir heute schon den ganzen Tag stelle (bin relativer Anfänger in Sachen mikroprozeossoren)!! Und zwar Von Neumann: 1.)Daten und Programm in einem Speicher => lesen und schreiben => RAM???? 2.)Wohin zeigt der Stackpointer? In dasselbe RAM oder gibts da einen eigenen Stack irgendwo? Harvard: 1.) was genau steht jetzt im datenspeicher und was im Programmspeicher? versteh das nicht so ganz? z.b.: Befehl MOV A,05h (A...register) heisst das, dass der wert 05h im Datenspeicher steht und der OPCODE zum Befehl im Programmmspeicher???? wenn ja, dann müsst man ja noch die Adresse wissen wo 05h im Datenspeicher liegt oder? der Programm Counter gibt ja nur die nächste Adresse des Programmspeichers an!? 2.) Wohin zeigt hier der Stackpointer? Wär echt super wenn mir da jemand weiterhelfen kann! Grüße, Lukas
LUKAS schrieb: > Von Neumann: > 1.)Daten und Programm in einem Speicher => lesen und schreiben => > RAM???? Zum Beispiel, jo. > 2.)Wohin zeigt der Stackpointer? In dasselbe RAM oder gibts da einen > eigenen Stack irgendwo? Ja, wohin soll er sonst gehen? > Harvard: > 1.) was genau steht jetzt im datenspeicher und was im Programmspeicher? > versteh das nicht so ganz? z.b.: Befehl MOV A,05h (A...register) heisst > das, dass der wert 05h im Datenspeicher steht und der OPCODE zum Befehl > im Programmmspeicher???? Nene, die MOV-Instruktion steht vollständig im Programmspeicher. > 2.) Wohin zeigt hier der Stackpointer? Irgendwo in den Datenspeicher. Ich glaub, du verstehst 'Datenspeicher' etwas falsch -- 'Datenspeicher' meint i.d.R. einen Speicher, der zur Laufzeit beschreibbar ist, dessen Inhalt aber nicht ausgeführt werden kann. Programmspeicher dagegen ist derjenige Speicher, aus dem sich die CPU ihre Instruktionen besorgen kann. Man kann natürlich auch bei Harvard Instruktionen in den Datenspeicher schreiben, aber da kommt die CPU definitionsgemäß halt nicht ran und kann sie nicht ausführen. Umgekehrt kannst du auch 'Daten', etwa Tabellen, in den Programmspeicher einbauen. Dann sollteste allerdings dafür sorgen, dass die CPU nicht versehentlich in so eine Tabelle hineinläuft, da die wohl nur selten sinnvolle Instruktionen enthält.
v. Neumann: Es gibt einen durchgehenden Speicherbereich (Adresse 0 bis irgendwas), in dem RAM, ROM (Programmspeicher) und IO-Adressen irgendwie eingeblendet sind. Stackpointer zeigt wie jeder Zeiger hier in das RAM (hoffentlich, könnte aber prinzipiell versehentlich auch ins ROM zeigen oder in Adressbereiche, für die gar keine Hardware vorhanden ist). Harvard: Es gibt zwei getrennte Speicherbereiche: Programmspeicher ab Adresse 0 und RAM+IO etc. ebenfalls ab 0. Einem Zeiger kann man nicht ansehen, ob es ein Zeiger ins ROM oder ins RAM ist. Alle Code-Adressen wie z.B. PC oder Sprungadressen zeigen ins ROM, andere Adressen halt ins RAM (z.B. Stackpointer).
LUKAS schrieb: > 1.)Daten und Programm in einem Speicher => lesen und schreiben => > RAM???? Und wie lautet diese Frage, wenn man sie verständlich formuliert? Wir sind hier nicht bei Twitter. > 2.)Wohin zeigt der Stackpointer? In dasselbe RAM oder gibts da einen > eigenen Stack irgendwo? Die beiden Begriffe definieren keinen Stack. > 1.) was genau steht jetzt im datenspeicher und was im Programmspeicher? > versteh das nicht so ganz? z.b.: Befehl MOV A,05h (A...register) heisst > das, dass der wert 05h im Datenspeicher steht und der OPCODE zum Befehl > im Programmmspeicher???? Diese 05h sind ein Wert, keine Adresse. Der Wert steht als Bestandteil des Codes im Codespeicher.
LUKAS schrieb: > Von Neumann: > 1.)Daten und Programm in einem Speicher => lesen und schreiben => > RAM???? Nicht zwingend, aber möglich. Es können aber auch separate RAM- und ROM-Segmente sein. Entscheidend ist, dass sie über ein und denselben Bus zugegriffen werden, sodass die Zugriffe darauf nicht gleichzeitig möglich sind. > 2.)Wohin zeigt der Stackpointer? In dasselbe RAM oder gibts da einen > eigenen Stack irgendwo? Jedenfalls nicht in den ROM. ;-) Ansonsten ist das von der konkreten Maschine abhängig. Es gibt auch von-Neumann-Maschinen, die den Stack komplett in Hardware haben, beispielsweise war der i8008 so gebaut. (Sowas gibt's natürlich auch bei Harvard, beispielsweise der AT90S1200.) > Harvard: > 1.) was genau steht jetzt im datenspeicher und was im Programmspeicher? Daten bzw. ausführbarer Code. Code kann dann prinzipiell nicht aus dem Datenspeicher ausgeführt werden, und Datenzugriffe in/aus dem Codespeicher dauern länger als beim Datenspeicher (extra Buszyklus notwendig). Bei manchen von-Neumann-Maschinen sind Datenzugriffe im Codespeicher gar nicht möglich (AT90S1200, PIC 16F84). > versteh das nicht so ganz? z.b.: Befehl MOV A,05h (A...register) heisst > das, dass der wert 05h im Datenspeicher steht und der OPCODE zum Befehl > im Programmmspeicher???? Nein, die 05h ist ein sogenannter Direktoperand (immediate operand), der ist dann im Opcode des Befehls selbst mit untergebracht. Damit hat man bei RISC-Architekturen das Problem, dass man nicht die komplette Befehlswortbreite für Opcodes zur Verfügung hat, da ja jeder Opcode gleich groß ist. Gerade bei den klassischen 32-bit- RISC-Maschinen kann man daher keine komplette Adresse als Direkt- operand in einem einzigen Befehl laden, sondern dies muss in low- und high-Teil getrennt erfolgen. > 2.) Wohin zeigt hier der Stackpointer? In einen RAM für den Stack. ;-) Siehe oben. Sehr oft ist der am gleichen Bus untergebracht wie der Datenspeicher, aber das ist nicht notwendigerweise so.
Hui, da wird ja schnell geantwortet :). find ich super, danke! Ich glaub ich habs jetzt so verstanden (hoff ich). Also z.b.: Bei der Harvard architektur würde bei dem Befehl MOV A,[0001h] folgendes passieren ([...] bedeutet eine adresse): dieser MOV Befehl wird vom Programmsepeicher ins Instructionregister geladen und dann, die Daten der Adresse 0001h vom Datenspeicher ins Register A geladen (und wahrscheinlich gleichzeitig der nächste Befehl (je nach Programmcounter) ins IR geladen? Ich gebe dieses Beispiel nur an damit ich weiss ob ichs wirklich so ungefär kapiert hab!? Nochamsl großes Dank an euch
Hi ja, so in etwa. Und um dich jetzt vollständig zu verwirren: Es gibt durchaus Maschinen (mittlerweile fast alle schnellen (>100MHz) 32 Bitter) die aus Sicht der Software von Neumann Architekturen sind (also einen einzigen Adressbereich besitzen) aber bei der Ausführung der Befehle zwei getrennte Busse (einen für Daten und einen für Befehle) verwenden. Die Gelehrten streiten auch immer mal wieder ob sowas jetzt eine Harvard-Maschine oder ein von-Neumann-Maschine ist. Matthias
Matthias Weißer schrieb: > > Die Gelehrten streiten auch immer mal wieder ob sowas jetzt eine > Harvard-Maschine oder ein von-Neumann-Maschine ist. Kein Flaschenhals, kein Von Neumann. Wenn ich dir eine Gurke hinlege und sie gelb anmale, dann wird sie auch nicht zur Banane.
LUKAS schrieb: > Von Neumann: > 1.)Daten und Programm in einem Speicher => lesen und schreiben => > RAM???? > 2.)Wohin zeigt der Stackpointer? In dasselbe RAM oder gibts da einen > eigenen Stack irgendwo? Die Grundidee einer von Neumann-Maschine ist, dass Programm und Daten gleich behandelt werden. Eine echte Neumann-Maschine der reinen Lehre hat somit keinen Stackpointer. Rücksprungadressen werden in den ersten Bytes der Funktion, oder als Argument des letzten Jump-Befehles geschrieben. Natürlich werden diese Lehren häufig verwässert.
Naja von wegen verwässert... Da die ersten Maschinen mit getrennten Bussen auch getrennte Adressräume hatten wird das heute gern verwechselt. Und so kann man sich ewig drum streiten, ob Harvard für das Eine oder das Andere steht, es bringt nichts, das Kind ist im Brunnen und ersoffen, die Begriffe Harvard und von Neumann sind vergiftet. Daher ziehe ich es vor, sie zu meiden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.