Ergebnis 1 bis 6 von 6

Thema: [asm] stack

  1. #1
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.991
    Renommee
    283

    [asm] stack

    Hi,

    ich übe mich gerade so ein wenig in Assembler ein und habe direkt ein Problem,
    dem ich mich stellen muss..

    Ich möchte ganz einfach einen Stack implementieren, der beliebig extensibel ist (v.a. in Sachen Speicherplatz). Mir fehlt es sowieso bisschen an Beispielcodes zur Programmierung, ob da wohl jemand schnell etwas zusammen schustern könnte?

    Weiterhin überlege ich, trotzdem Vorlieb nehmen zu können damit, dass ich den regulären Stack nehmen könnte, dann hätte ich aber nur einen und ich müsste die Software irgendwie in solche Abschnitte teilen, die den Zugriff synchronisieren.. ;/
    Habe überlegt, test eax, eax mit j(n)z sollte die schnellste Methode sein zu überprüfen, ob ich schon weiter "pop" machen könnte, aber das dollste isses ja nicht so ganz im Allgemeinen.. Hätte da denn noch jemand Ideen?

    ..arbeite übrigens bis aufs erste mit yasm [1].

    ciao, kuchen.

    [1] http://www.tortall.net/projects/yasm/wiki

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  2. #2
    Member
    Registriert seit
    May 2004
    Beiträge
    1.432
    Renommee
    1142

    Re: [asm] stack

    Du hast verschiedene Threads, die sich einen Stack teilen sollen - verstehe ich das richtig? Üble Idee! Jeder braucht seinen eigenen. Wenn Du eine Stack-Struktur zum Austausch brauchst, brauchst Du einen entsprechenden Server-Thread, der diese verwaltet.

  3. #3
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.991
    Renommee
    283

    Re: [asm] stack

    Ok, ganz anders.. habe immer noch ein allgemeines Problem jeglichen Code durch den Assembler rasen zu lassen...

    ..es erscheint immer:
    Quantum.asm:1: error: label or instruction expected at start of line
    Code:
    BITS 64
    GLOBAL main
    
    SECTION .data
    	right	db	'Richtig!',	0
    	wrong	db	'Falsch!',	0
    
    SECTION .text
    main:
    	mov		rax,	32	;
    	test	rax,	4	;
    	je		richtig		;
    	mov		ah,		9h
    
    falsch:
    	mov		dx,		wrong;
    	int		21h;
    
    richtig:
    	mov		dx,		right;
    	int		21h;

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  4. #4
    Administrator
    Registriert seit
    Apr 2004
    Beiträge
    754
    Renommee
    1274

    Re: [asm] stack

    Einen Stack selbst zu implementierten, sollte doch auch nicht zu schwer sein... Im einfachsten Fall musst du dir fuer jeden Stack separat einen Pointer auf das oberste Element vom Stack anlegen und verwalten. Ein push sollte dann (in Intel-Syntax) etwa wie folgt aussehen:
    Code:
    add eax, 4
    mov [eax], edx
    ... vorausgesetzt in eax liegt der Stack-Pointer und in edx der zu push'ende Wert. In der Praxis wirst du die Werte eher im Arbeitsspeicher als in Registern haben, dann sollte das Ganze wie folgt aussehen (Speicherstelle foo ist der Stack-Pointer, bar der zu push'ende Wert):
    Code:
    add dword [foo], 4
    mov eax, dword [foo]
    mov edx, dword [bar]
    mov dword [eax], edx
    ... oder auch:
    Code:
    add dword [foo], 4
    mov eax, dword [foo]
    push dword [bar]
    pop dword [eax]
    Ein pop saehe entsprechend grob wie folgt aus:
    Code:
    mov eax, dword [foo]
    mov edx, dword [eax]
    mov dword [bar], edx
    sub dword [foo], 4
    ... oder:
    Code:
    mov eax, dword [foo]
    push dword [eax]
    pop dword [bar]
    sub dword [foo], 4
    Bei den Varianten mit push/pop wird jeweils der CPU-Stack als Zwischenspeicher genutzt, damit das Register edx unbeeinflusst bleibt. Je nach Assembler kann es auch sein, dass die Addressierung etwas anders funktioniert und du beispielsweise dword ptr statt dword verwenden musst. Ich kenne mich mit der Syntax und den Makros von YASM leider nicht aus, aber das solltest du dann hoffentlich selbst voll hinbekommen. Alle Codebeispiele sind btw nicht gestestet, aber fuer einen Denkanstoss sollten sie gerade so reichen.

  5. #5
    Quantenmechaniker
    Registriert seit
    Aug 2002
    Beiträge
    1.991
    Renommee
    283

    Re: [asm] stack

    Holla,

    IMMER der selbe Scheiss Fehler von nasm, egal was ich am Source ändere!
    Quantum.asm:1: error: label or instruction expected at start of line
    Kann mir vielleicht jemand ein Template für NASM schreiben?

    Was deinen Code angeht, CryptoCrack, hab dank, wusst ich doch dass es eigentlich ein Klacks sein sollte.. Eines bräuchte ich allerdings noch kurz erklärt: Was war nochmal der Unterschied zwischen rax und [rax]? Die Adressierung war doch irgendwie anders, oder?

    1 2 3 4 5 6 7 8
    2 1 4 3 6 5 8 7
    3 4 1 2 7 8 5 6
    4 3 2 1 8 7 6 5
    5 6 7 8 1 2 3 4
    6 5 8 7 2 1 4 3
    7 8 5 6 3 4 1 2
    8 7 6 5 4 3 2 1

  6. #6
    Member
    Registriert seit
    May 2004
    Beiträge
    1.432
    Renommee
    1142

    Re: [asm] stack

    foo bezeichnet das Register foo, [foo] die Stelle im Speicher, auf die foo bzw. dessen Wert zeigt.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Stack anhand von C++
    Von ifail im Forum C / C++
    Antworten: 8
    Letzter Beitrag: 21.07.2009, 08:19
  2. Stack
    Von mephist@ im Forum C / C++
    Antworten: 5
    Letzter Beitrag: 22.12.2004, 16:50
  3. Stack Problem
    Von ASCII 001 im Forum Systemnahe Programmierung
    Antworten: 5
    Letzter Beitrag: 06.05.2003, 17:32
  4. Stack
    Von upgaze im Forum Java
    Antworten: 4
    Letzter Beitrag: 09.09.2001, 05:53
  5. Was macht der Stack
    Von RedFlash im Forum Windows
    Antworten: 6
    Letzter Beitrag: 15.07.2001, 12:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •