;imprt user32.dll, MessageBoxA %macro imprt 2 extern %2 import %1 %2 %endmacro imprt kernel32.dll, ExitProcess imprt kernel32.dll, GetStdHandle imprt kernel32.dll, WriteFile section text USE32 global ..start ..start: push sOutputlen push sOutput call output ;VOID ExitProcess( ; UINT uExitCode ;); push byte 0 call ExitProcess output: pop ebx ;output string pointer pop ecx ;output string length ;HANDLE GetStdHandle( ; DWORD nStdHandle ;); push dword -11 call GetStdHandle ;BOOL WriteFile( ; HANDLE hFile, ; LPCVOID lpBuffer, ; DWORD nNumberOfBytesToWrite, ; LPDWORD lpNumberOfBytesWritten, ;docs says it can't be NULL but it looks like it can ; LPOVERLAPPED lpOverlapped ;); push 0 push 0 push ecx ;output string length push ebx ;output string pointer push eax ;STDOUT return from GetStdHandle call WriteFile ret section data USE32 sOutput DB "En test i assembler", 0 sOutputlen equ $-sOutput section bss USE32