10.08.2009, 06:38 PM
N23 Tutorial zu SDL und ASM ist spitze. Beim Selbstprobieren bin ich auf ein Problem gestoßen, dass ich lösen konnte, aber mir nicht erklären kann.
Die Funktion SDL_MapRGB (const SDL_Pixelformat * const format, const Uint8 r, const Uint8 g, const Uint8 b) würde ich intiutiv wie folgt aufrufen:
C-Aufruf:
NASM:
Doch beim Ausführen kommt es zum Absturz des Programms, es funktioniert mit 'push screen+4'. Mit diesen Befehl habe ich aber meine Probleme. 'push screen' bedeutet, dass die Speicheradresse von screen auf den Stack gelegt wird, nicht die Adresse, auf die er referenziert, dies müsste nämlich 'push [screen]' heißen. 'push screen+4' müsste mich danach nicht zu screen->format bringen, sondern auf das DoubleWord nach screen.
Irgendwie bin ich ganz durcheinander, vorallem da format selbst ein Pointer ist. Könnte mir bitte jemand weiterhelfen? Google spuckte kein klärendes Ergebnis aus.
Die Funktion SDL_MapRGB (const SDL_Pixelformat * const format, const Uint8 r, const Uint8 g, const Uint8 b) würde ich intiutiv wie folgt aufrufen:
C-Aufruf:
Code C :
SDL_Surface *screen = SDL_SetVideoMode (...);
[....]
SDL_MapRGB (screen->format, 255, 0, 0);NASM:
Code ASM :
screen DW 0
[...]
call SDL_SetVideoMode
[...] ; Fehlerabfang
mov [screen], eax
[...]
push DWORD 0
push DWORD 0
push DWORD 255
push [screen+4]
call SDL_MapRGBDoch beim Ausführen kommt es zum Absturz des Programms, es funktioniert mit 'push screen+4'. Mit diesen Befehl habe ich aber meine Probleme. 'push screen' bedeutet, dass die Speicheradresse von screen auf den Stack gelegt wird, nicht die Adresse, auf die er referenziert, dies müsste nämlich 'push [screen]' heißen. 'push screen+4' müsste mich danach nicht zu screen->format bringen, sondern auf das DoubleWord nach screen.
Irgendwie bin ich ganz durcheinander, vorallem da format selbst ein Pointer ist. Könnte mir bitte jemand weiterhelfen? Google spuckte kein klärendes Ergebnis aus.