section .data
msg db "Hello world!",10 ; 10 is the ASCII code for a new line (LF)
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 13
syscall
mov rax, 60
mov rdi, 0
syscall
If you want to execute this program, you first need the Netwide Assembler, nasm, because this code uses its syntax. Then use the following commands (assuming the code is in the file helloworld.asm). They are needed for assembling, linking and executing, respectively.
nasm -felf64 helloworld.asmld helloworld.o -o helloworld./helloworldThe code makes use of Linux's sys_write syscall. Here you can see a list of all syscalls for the x86_64 architecture. When you also take the man pages of write and exit into account, you can translate the above program into a C one which does the same and is much more readable:
#include <unistd.h>
#define STDOUT 1
int main()
{
write(STDOUT, "Hello world!\n", 13);
_exit(0);
}
Just two commands are needed here for compilation and linking (first one) and executing:
gcc helloworld_c.c -o helloworld_c../helloworld_c