Program...: Introduction To 64 Bit Windows Assembly

Register Usage: The first four integer or pointer arguments are passed in RCX, RDX, R8, and R9 (in that order).

; External Windows functions extern GetStdHandle extern WriteFile extern ExitProcess section .data msg db "Hello, 64-bit World!", 0 msg_len equ $ - msg section .bss bytes_written resq 1 section .text global main main: sub rsp, 40 ; Reserve shadow space + align stack ; Get handle to standard output mov rcx, -11 ; STD_OUTPUT_HANDLE call GetStdHandle mov r12, rax ; Save handle in r12 ; Write to the console mov rcx, r12 ; Arg 1: Handle lea rdx, [rel msg] ; Arg 2: Buffer address mov r8, msg_len ; Arg 3: Length lea r9, [rel bytes_written] ; Arg 4: Pointer to written count mov qword [rsp + 32], 0 ; Arg 5: Overlapped (on stack) call WriteFile ; Exit the program xor rcx, rcx ; Return code 0 call ExitProcess Use code with caution. Copied to clipboard Introduction to 64 Bit Windows Assembly Program...

Stack Alignment: The stack must be aligned to a 16-byte boundary before any call instruction. A Basic "Hello World" Example Register Usage: The first four integer or pointer

To write a program, you typically use an assembler like NASM (Netwide Assembler) or MASM (Microsoft Macro Assembler). Below is a conceptual look at what a "Hello World" program looks like using the Windows API function WriteFile . A Basic "Hello World" Example To write a

RBP, RSP: Pointer registers. RSP is the stack pointer, while RBP is the base pointer.