Вы можете попробовать этот код, который был опубликован , когда он снова в сети :
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
INCLUDE windows.inc
INCLUDE kernel32.inc
INCLUDE winmm.inc
INCLUDE masm32.inc
INCLUDE c:\masm32\macros\macros.asm
INCLUDELIB kernel32.lib
INCLUDELIB winmm.lib
INCLUDELIB masm32.lib
.DATA
szDriveLetter BYTE "R:", 0
.DATA?
szBuffer BYTE 256 DUP(?)
.CODE
start:
; to close
INVOKE lstrcat, ADDR szBuffer, SADD("open ")
INVOKE lstrcat, ADDR szBuffer, ADDR szDriveLetter
INVOKE lstrcat, ADDR szBuffer, SADD(" type cdaudio alias CDName")
INVOKE mciSendString, ADDR szBuffer, NULL, 0, 0
.IF eax != 0
push eax
INVOKE StdOut, SADD("Error",13,10)
pop eax
jmp done
.ENDIF
INVOKE mciSendString, SADD("set CDName door closed"), NULL, 0, 0
.IF eax != 0
push eax
INVOKE StdOut, SADD("Error",13,10)
pop eax
jmp done
.ENDIF
INVOKE mciSendString, SADD("close CDName"), NULL, 0, 0
.IF eax != 0
push eax
INVOKE StdOut, SADD("Error",13,10)
pop eax
jmp done
.ENDIF
mov eax, 0
done:
INVOKE ExitProcess, eax
END start
Или более простая версия FASM (Это был один из встроенных примеров).
; Beer - example of tiny (one section) Win32 program
format PE GUI 4.0
include 'win32a.inc'
; no section defined - fasm will automatically create .flat section for both
; code and data, and set entry point at the beginning of this section
invoke MessageBoxA,0,_message,_caption,MB_ICONQUESTION+MB_YESNO
cmp eax,IDYES
jne exit
invoke mciSendString,_cmd_open,0,0,0
invoke mciSendString,_cmd_eject,0,0,0
invoke mciSendString,_cmd_close,0,0,0
exit:
invoke ExitProcess,0
_message db 'Do you need additional place for the beer?',0
_caption db 'Desktop configuration',0
_cmd_open db 'open cdaudio',0
_cmd_eject db 'set cdaudio door open',0
_cmd_close db 'close cdaudio',0
; import data in the same section
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
winmm,'WINMM.DLL'
import kernel32,\
ExitProcess,'ExitProcess'
import user32,\
MessageBoxA,'MessageBoxA'
import winmm,\
mciSendString,'mciSendStringA'
end data