Forum: Mikrocontroller und Digitale Elektronik Fragen zu Von Neumann und Harvard:


von LUKAS (Gast)


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

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.

von Klaus W. (mfgkw)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von LUKAS (Gast)


Lesenswert?

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

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

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

von Christopher G. (cbg)


Lesenswert?

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.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Ah, ein Gelehrter :-)

SCNR

Matthias

von Christian B. (casandro)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

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
Noch kein Account? Hier anmelden.