kostenloser Webspace werbefrei: lima-city


8051: RET mit Stackanzahl?

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    knoi

    knoi hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!