From 8a8ae2d6e901169e0c0c597e3945aa6872e21404 Mon Sep 17 00:00:00 2001 From: fruel Date: Mon, 13 Jun 2016 21:59:48 +0200 Subject: [PATCH] Added Win32 and Win64 ASM Hello World --- a/assembler_masm_win32.asm | 35 +++++++++++++++++++++++++++++++++++ a/assembler_masm_win64.asm | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 a/assembler_masm_win32.asm create mode 100644 a/assembler_masm_win64.asm 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