04.05.2011, 02:09
Stack, auf gut Deutsch, Stapel.
Der Stack ist ein bestimmter Speicherbereich der teilweise auch schon in der Hardware von Prozessoren integriert ist. Viele Sachen, Daten bzw. Objekte laufen über den Stack. Das beste Beispiel ist die Sache mit den "Call's". Wir alle kennen sie, aber hat sich mal einer ne Platte gemacht woher das Programm bzw. der Prozessor weiß wohin er/es zurückspringen soll?
Bei einem Jump ist das einfach... Wird von einer Adresse des Programms zu einer anderen gesprungen muss natürlich auch ein Sprung wieder zurück erfolgen. Bei einem Call sieht das anders aus. Am Ende eines Call's steht immer ein "RET". Also woher weiß der Prozessor jetzt wohin er jetzt zurückspringen soll? Ganz einfach... Wird ein Call aufgerufen wird die Rücksprungadresse auf den Stack gesichert. Ist der Prozessor am ende des Calls, also wieder am RET, angelangt wird die Rücksprungadresse wieder vom Stack abgerufen.
Noch ein Beispiel...
Um diverse Registerzustände zu sichern nutzt man entweder den PUSH Befehl direkt, oder man nutzt den PUSHAD Befehl. Mit diesem werden sämtliche Register auf den Stack gesichert. Da man Objekte auch nur oben auf den Stapel ablegen kann müssen diese auch wieder in umgekehrter Reihenfolge vom Stack geholt werden.
Der Stack ist ein bestimmter Speicherbereich der teilweise auch schon in der Hardware von Prozessoren integriert ist. Viele Sachen, Daten bzw. Objekte laufen über den Stack. Das beste Beispiel ist die Sache mit den "Call's". Wir alle kennen sie, aber hat sich mal einer ne Platte gemacht woher das Programm bzw. der Prozessor weiß wohin er/es zurückspringen soll?
Bei einem Jump ist das einfach... Wird von einer Adresse des Programms zu einer anderen gesprungen muss natürlich auch ein Sprung wieder zurück erfolgen. Bei einem Call sieht das anders aus. Am Ende eines Call's steht immer ein "RET". Also woher weiß der Prozessor jetzt wohin er jetzt zurückspringen soll? Ganz einfach... Wird ein Call aufgerufen wird die Rücksprungadresse auf den Stack gesichert. Ist der Prozessor am ende des Calls, also wieder am RET, angelangt wird die Rücksprungadresse wieder vom Stack abgerufen.
Noch ein Beispiel...
Um diverse Registerzustände zu sichern nutzt man entweder den PUSH Befehl direkt, oder man nutzt den PUSHAD Befehl. Mit diesem werden sämtliche Register auf den Stack gesichert. Da man Objekte auch nur oben auf den Stapel ablegen kann müssen diese auch wieder in umgekehrter Reihenfolge vom Stack geholt werden.
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
Traineranfragen per PM werden prinzipiell gelöscht...