Я использую SDL с FASM, и у меня есть код, который минимально похож на следующий:
format ELF
extrn _SDL_Init
extrn _SDL_SetVideoMode
extrn _SDL_Quit
extrn _exit
SDL_INIT_VIDEO equ 0x00000020
section '.text'
public _SDL_main
_SDL_main:
ccall _SDL_Init, SDL_INIT_VIDEO
ccall _SDL_SetVideoMode, 640, 480, 32, 0
ccall _SDL_Quit
ccall _exit, 0 ; Success, or
ret ; failure.
Со следующим быстрым и грязным make-файлом:
SOURCES = main.asm
OBJECTS = main.o
TARGET = SDLASM.exe
FASM = C:\fasm\fasm.exe
release : $(OBJECTS)
ld $(OBJECTS) -LC:/SDL/lib/ -lSDLmain -lSDL -LC:/MinGW/lib/ -lmingw32 -lcrtdll -o $(TARGET) --subsystem windows
cleanrelease :
del $(OBJECTS)
%.o : %.asm
$(FASM) $< $@
Использование exit()
(или Windows ExitProcess()
), кажется, единственный способ заставить эту программу корректно завершиться, хотя я чувствую, что должен иметь возможность использовать retn
/ retf
. Когда я просто ret
без вызова exit()
, приложение не завершается и должно быть убито. Может ли кто-нибудь пролить свет на это? Это происходит только тогда, когда я звоню SDL_SetVideoMode()
.