smile4free
Grünschnabel
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:
Die Signatur sieht in C wie folgt aus:
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?
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:
_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:
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?