diff --git a/a/assembler_masm_win32.asm b/a/assembler_masm_win32.asm new file mode 100644 index 00000000..1a08af6b --- /dev/null +++ b/a/assembler_masm_win32.asm @@ -0,0 +1,35 @@ +; --------------------------------------------- +; Hello World for Win32 Intel x86 Assembly +; +; by fruel (https://github.com/fruel) +; 13 June 2016 +; --------------------------------------------- + +.386 +.model flat,stdcall +.stack 4096 + +EXTRN ExitProcess@4 : PROC +EXTRN GetStdHandle@4 : PROC +EXTRN WriteConsoleA@20 : PROC + +.data +msg BYTE "Hello World!",0 +bytesWritten DWORD ? + +.code +main PROC + push -11 ; nStdHandle (STD_OUTPUT_HANDLE) + call GetStdHandle@4 + + push 0 ; lpReserved + push OFFSET bytesWritten ; lpNumberOfCharsWritten + push LENGTHOF msg - 1 ; nNumberOfCharsToWrite + push OFFSET msg ; *lpBuffer + push eax ; hConsoleOutput + call WriteConsoleA@20 + + push 0 ; uExitCode + call ExitProcess@4 +main ENDP +END main diff --git a/a/assembler_masm_win64.asm b/a/assembler_masm_win64.asm new file mode 100644 index 00000000..9a4f1a0d --- /dev/null +++ b/a/assembler_masm_win64.asm @@ -0,0 +1,33 @@ +; --------------------------------------------- +; Hello World for Win64 Intel x64 Assembly +; +; by fruel (https://github.com/fruel) +; 13 June 2016 +; --------------------------------------------- + +GetStdHandle PROTO +ExitProcess PROTO +WriteConsoleA PROTO + +.data +msg BYTE "Hello World!",0 +bytesWritten DWORD ? + +.code +main PROC + sub rsp, 5 * 8 ; reserve shadow space + + mov rcx, -11 ; nStdHandle (STD_OUTPUT_HANDLE) + call GetStdHandle + + mov rcx, rax ; hConsoleOutput + lea rdx, msg ; *lpBuffer + mov r8, LENGTHOF msg - 1 ; nNumberOfCharsToWrite + lea r9, bytesWritten ; lpNumberOfCharsWritten + mov QWORD PTR [rsp + 4 * SIZEOF QWORD], 0 ; lpReserved + call WriteConsoleA + + mov rcx, 0 ; uExitCode + call ExitProcess +main ENDP +END