8051: RET mit Stackanzahl?
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
abrufen
architektur
assembler
check
code
freuen
gedanke
http
jeweilige befehl
leute
manuell code
mus
paaren
pop
register
sagen
schauen
set
umgehen
unterprogramm
-
Hej leute,.
bin grad am Assembler programmiern
und hab ne eigens Unterprogramm welches mir die Register in den Stack schreibt
nur wird der Stack auch für die Rücksprungadresse benötigt
d.h wenn ich pushe komme ich nicht mehr zurück, es sei den ich dekrementiere den SP manuell:
//Pushed alle Register Pushall: PUSH AR1 PUSH AR2 PUSH AR3 PUSH AR4 PUSH AR5 PUSH AR6 PUSH AR7 DEC SP DEC SP DEC SP DEC SP DEC SP DEC SP DEC SP RET
lt. dieser Homepage:
http://de.wikibooks.org/wiki/Assembler_(80x86_Prozessor)-Programmierung:_Unterprogramme_und_Interrupts
kann man dies umgehen indem man bei ret die stackanzahl angibt
nur leider funktionierts nicht?!
würde mich über eine funktionierende lösung freuen =)
lg knoi
Edit:
meine Version funktioniert so zumindest
nur check ich nich ganz wie ichs dann wieda abrufen mus?!
sprich den SP ändern!?
ENDE: POP AR7 POP AR6 POP AR5 POP AR4 POP AR3 POP AR2 POP AR1 INC SP INC SP INC SP INC SP INC SP INC SP INC SP RET
Rücksprung funktioniert,.
nur leider steht nicht das richtige drin ^^ ;(
Beitrag zuletzt geändert: 28.12.2009 12:47:17 von knoi -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Für was für eine Prozessorarchitektur ist dein Code? Nach x86 sieht das nicht aus (jedenfalls, wenn ich mir die Registernamen anschaue).
Welchen Assembler verwendest du?
Das Verändern des Stackpointers ist an für sich die richtige Herangehensweise. Du scheinst aber noch nicht mit dem Gedanken vertraut zu sein, dass der Stack von oben nach unten wächst.
Wenn du PUSH oder DEC ausführst, sinkt der Stackpointer auf eine niedrigere Speicheradresse und der Stack wächst.
Bei POP und INC passiert genau das Gegenteil. Du musst also PUSH mit INC paaren - oder was noch viel besser ist: PUSH mit ADD, so dass du einfach sagen kannst:
PUSH registerA PUSH registerB PUSH registerC ;... ADD SP, 3
Wobei ich mich hier an das x86 Instruction set halte. Du musst selber schauen, wie der jeweilige Befehl für deine Architektur lautet. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage