Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » hat der Z80 ein Default für den Stackpointer? » Themenansicht

Autor Thread - Seiten: -1-
000
02.10.2013, 18:17 Uhr
Micha

Avatar von Micha

Eine Frage an die Z80-Experten:

wenn man den Stackpointer nicht initialisiert, hat der dann nach dem Start einen unbestimmten Wert, oder kann man sich drauf verlassen dass er auf Null steht, d.h. der Stack ab 64K abwärts wächst?

P.S. bei dem Z180 mit dem ich gerade experimentiere hab ich es gerade ausprobiert: da wächst der Stack tatsächlich reproduzierbar ab 64K abwärts, wenn SP nicht initialisiert war.

Dieser Beitrag wurde am 02.10.2013 um 18:38 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
02.10.2013, 19:04 Uhr
Ralph



Der Stackpointer (Register SP) hat einen zufälligen Wert nach dem Start, bleibt aber auch bei Reset erhalten. Zumindest ist das meine Erfahrung.
Ins Datenblatt geschaut habe ich aber nicht.

Gruß Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
02.10.2013, 20:41 Uhr
Wusel_1



Beim Start steht der SP immer auf Null. Notwendig ist aber noch, dass das Startprogramm prüft, ob wirklich der Speicher bis #FFFF geht. Wenn nicht, wird der SP mit der gefundenen letzten Adresse geladen. Damit ist den SP bekannt, ab wo er arbeiten kann.
--
Beste Grüße Andreas
______________________________________
DL9UNF ex Y22MF es Y35ZF
JO42VP - DOK: Y43 - LDK: CE

*** wer glaubt, hört auf zu denken ***
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
02.10.2013, 23:08 Uhr
Ralph



Tja Micha, nun haste 2 versch. Meinungen

Ich behaupte der SP ist genauso wie die restlichen Register auf einem zufälligen Wert.
Nur der PC (ProgrammCounter) und die Register R und I werden durch Reset auf 0000H bzw. 00H gesetzt.

LG Ralph
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 02.10.2013 um 23:12 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
02.10.2013, 23:21 Uhr
u.nickel



Na dann behaupte ich mal:
SP wird - zumindest mit Power-On, bei /Reset = L will ich mich lieber nicht streiten - auf 0000H gesetzt und da vor Ausführung eines STackrelevanten Operationscodes der SP decrementiert wird, ist also sozusagen die erste Stackadresse FFFFH.

Gruß Uwe
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
02.10.2013, 23:26 Uhr
Micha

Avatar von Micha

das entspricht zumindest meiner empirischen Erfahrung mit dem Z180. Hab das System mindestens 10 mal aus/angeschaltet. Stack startet immer ab 64K abwärts.

Mit dem ursprünglichen Z80 fehlt mir allerdings die praktische Erfahrung. Und ich muss natürlich zugeben, dass das mehr eine theroretische Diskussion ist. Praktisch gesehen ist es IMMER eine gute Idee, den SP explizit zu initialisieren
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
02.10.2013, 23:34 Uhr
Ralph



@u.nickel.. woher soll die CPU das Power-On erkennen ? Das hat der Z80 meines Wissens nicht automatisch drin, denn sonst müsste es nicht die teils aufwendigen Resetschaltungen geben. Daher glaub ich das Deine Aussage nicht stimmen wird.

Aber mich reizt das mal echt das real zu prüfen !

@Micha.. ja der SP wird von guten Programmierern immer auf nen definierten Wert gesetzt
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
03.10.2013, 10:04 Uhr
sas



Guten Morgen,

nach dem Reset der SP immer 0xffff.

Wenn man also einen Maximalausbau hat und im letzten Speicherbereich sich
RAM befindet ginge das.

Jörg
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
03.10.2013, 10:48 Uhr
Micha

Avatar von Micha


Zitat:
sas schrieb
nach dem Reset der SP immer 0xffff.

Zumindest für den Z180 stimmt das nicht. Da ich grad Zeit und ein passendes Monitorprogramm hab um Dinge auszuprobieren konnte ich das gleich mal checken:

nach dem Einschalten:

LD HL,0
ADD SP
PUSH HL

...

und dann per Speicher-Dump nachgeschaut: steht an Adresse FFFE: 00 00 und nicht FF FF.
Der Stack-Pointer Mechanismus arbeitet mit Pre-Decrement. Wollte ich auch immer schon mal praktisch überprüfen ob das so ist - jetzt weiss ich's

Edit: Verhalten entspricht der Erklärung die U.Nickel weiter oben gegeben hat.

Dieser Beitrag wurde am 03.10.2013 um 10:54 Uhr von Micha editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
03.10.2013, 13:47 Uhr
u.nickel



@Micha
hab mir mal die U880-Bibel aus DDR-Zeiten "Kieser/Meder" rausgescht in der Hoffnung dort was zum SP-Vehalten zu erlesen. Leider nix, aber auch nach fast 30 Jahren lent man nich aus:
Beim Lesen hab ich zum ersten MAl! mitgekriegt, das auch der U880 (und ich denke damit auch der Z80) bei /RESET "kleiner Feigling" ist, wie du es auf meine Frage in einem anderen Forum für den Z180 genannt hast.

Gruß Uwe
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
03.10.2013, 20:43 Uhr
Ralph



Also der SP der Z80-CPU steht nach dem Einschalten definitiv NICHT immer auf 0000H !!!

Mir hat Eure Aussage die ja im Widerspruch zu meinen Erkenntnisse steht keine Ruhe gelassen.

Also hab ich mir die Mühe gemacht und kleines Tool gebastelt welches ich am realen LLC2 getestet habe.
Das Tool macht nix weiter wie den SP nach dem Einschalten anzuzeigen.
Und was soll ich sagen ? Bei mir steht der mal auf AAAAH, mal auf AEBAH, mal auf AFBEH. Das ist für mich auch logisch,
denn es steht nirgends das das Register SP zurückgesetzt wird.
Es steht aber sehr wohl in der Doku das PC, R und I nach Reset auf 0000H bzw. 00H stehen.

Nach einem Reset behält der SP auch seinen alten Wert den er vor Reset hatte. Übrigens auch, wenn ich mal die Betriebsspannung nur ganz kurz abschalte.

Für mich ist damit erwiesen das der SP nicht zwingend auf 0000H steht !! Das er initialisiert werden muss ist natürlich ohnehin selbstverständlich.
--
Es geht alles erst richtig los !

Dieser Beitrag wurde am 03.10.2013 um 20:46 Uhr von Ralph editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
03.10.2013, 21:30 Uhr
ic-box24



@Micha

Nochmal ´ne Frage zu 008:
Deine Schlussfolgerung kann ich grad nicht ganz nachvollziehen, wenn SP nach dem Einschalten ungleich 0000H wär, dann würde das Ergebnis von PUSH HL doch auch nicht an Adresse FFFEH zu sehen sein, oder ?
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
012
04.10.2013, 06:44 Uhr
Micha

Avatar von Micha

naja ich war mit nem Testprogramm gestartet dass einfach testweise drei Ebenen tief in Unterprogramme und zurück springt. Erst später hab ich ganz vorne im "Hauptprogramm" diese Aktion einegfügt, die den Inhalt von SP auf den Stack bringt. Dadurch konnte ich in dem Speicherbereich schon sehen dass was passiert war.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
013
05.11.2013, 21:16 Uhr
Ralph



Hat denn nun jemand mal meine Aussage bzw. Testergebnisse aus 010 nachvollzogen ?

Ich hab das grade eben auch nochmal mit einer anderen Testroutine gemacht und wieder die Ergebnisse aus 010 bestätigt bekommen.

Der SP steht nach Einschalten und Reset auf einem zufälligen Wert !

Gruß Ralph
--
Es geht alles erst richtig los !
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
014
05.11.2013, 23:08 Uhr
PIC18F2550

Avatar von PIC18F2550

Es scheind 2 Typen zu geben beim U880 (den ganz alten) kann ich mit unterschiedlichen Betriebsspannungen unterschiedliche Startmuster erzeugen.
Bei den neueren Typen ist der Effekt nicht aber es ist auch nicht immer 0000h das scheind aber noch Herstellerspezifisch zu sein.

Damit meine Programme stabiel laufen mache ich hier keinen auf "Geiz ist Geil und spendiere immer ein LD SP,xxxx"
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek