tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
674
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    smile4free smile4free ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Hallo,
    ich habe zwar schon mal in Assembler etwas programmiert, aber jetzt stehe ich scheinbar gerade auf dem Schlauch.

    Ich verwende NASM und habe ein Assemblerfile, das folgende Funktion enthält:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    _swap:
        push eax            ;
        push ebx            ;
        push ecx            ;
        mov ecx, esp            ;
     
        mov eax, [ecx+8]        ;   Argument 1 nach eax holen
        mov ebx, [ecx+12]   ;   Argument 2 (ein Zeiger auf eine Variable) nach ebx holen
        mov [ebx], eax      ;   Argument 1 dahin schreiben, wo Argument 2 hinzeigt
        pop ecx             ;
        pop ebx             ;
        pop eax             ;
        
        ret                 ;

    Die Signatur sieht in C wie folgt aus:
    Code :
    1
    
    extern void swap (int a, int* b)

    Mein Ziel ist, dass ich den Inhalt der Variable a and die Speicherstelle kopiere, an der sich b befindet. Allerdings scheint obiger Code das nicht zu leisten.

    Ich kann alles wunderbar kompilieren und die Funktion aus C heraus aufrufen. Wenn ich das Programm aber starte, erhalte ich die Windows-Meldung "swap.exe funktioniert nicht mehr" (-> Programm schließen).

    Weiß jemand, wo der Fehler liegt?
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Deine Offset Berechnung der Argumente ist falsch.

    Wenn du 3 Werte auf den Stack pushst, dann verminderst du ESP um 3 * 4 Byte.

    Um an die Argumente der Funktion zu kommen mußt du dann ESP + 16 und ESP + 20 rechnen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    smile4free smile4free ist offline Rookie
    Registriert seit
    Dec 2007
    Beiträge
    7
    Peinlich peinlich. Danke für die Hilfe.
     

Ähnliche Themen

  1. Programm start funktion in assembler
    Von BassBox im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 07.11.10, 12:09
  2. einfaches 3D Programm
    Von hadimai im Forum Sonstige 3D-Programme
    Antworten: 7
    Letzter Beitrag: 30.01.10, 06:10
  3. VB6 Einfaches Programm
    Von Cluee im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 22.04.08, 13:18
  4. [Assembler] Mein erstes Programm
    Von Azi im Forum Sonstige Sprachen
    Antworten: 4
    Letzter Beitrag: 02.11.05, 19:46
  5. Einfaches c++ programm
    Von Katzenbauer im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 12.05.05, 13:36

Stichworte