From 868c8f7fe3a7e8d35dda48f2b321a0828d0d91dc Mon Sep 17 00:00:00 2001 From: Shark Date: Mon, 19 Oct 2015 18:10:06 +0200 Subject: [PATCH 1/5] "Hello World!", x86-64 assembly for Linux --- a/assembler_nasm_linux64.asm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 a/assembler_nasm_linux64.asm diff --git a/a/assembler_nasm_linux64.asm b/a/assembler_nasm_linux64.asm new file mode 100644 index 00000000..94470ce8 --- /dev/null +++ b/a/assembler_nasm_linux64.asm @@ -0,0 +1,20 @@ +section .text + global _start ;must be declared for linker (ld) + +_start: ;tell linker entry point + + xor eax,eax ; eax:=0 + lea edx,[rax+len] ;message length + mov esi,msg ;message to write + lea edi,[rax+1];file descriptor (stdout) + mov al,1 ;system call number (sys_write) + syscall ;call kernel + +; xor eax, eax + mov al,60 ;system call number (sys_exit) + syscall ;call kernel + +section .data + +msg db 'Hello, world!',0xa ;our string +len equ $ - msg ;length of our string From d5993eefce7c3f94e8b90cfb8c6d84d778d2956e Mon Sep 17 00:00:00 2001 From: Shark64 Date: Mon, 19 Oct 2015 18:14:30 +0200 Subject: [PATCH 2/5] align comments --- a/assembler_nasm_linux64.asm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/a/assembler_nasm_linux64.asm b/a/assembler_nasm_linux64.asm index 94470ce8..25b2c49f 100644 --- a/a/assembler_nasm_linux64.asm +++ b/a/assembler_nasm_linux64.asm @@ -3,16 +3,15 @@ section .text _start: ;tell linker entry point - xor eax,eax ; eax:=0 + xor eax,eax ; eax:=0 lea edx,[rax+len] ;message length - mov esi,msg ;message to write - lea edi,[rax+1];file descriptor (stdout) - mov al,1 ;system call number (sys_write) - syscall ;call kernel + mov esi,msg ;message to write + lea edi,[rax+1] ;file descriptor (stdout) + mov al,1 ;system call number (sys_write) + syscall ;call kernel -; xor eax, eax - mov al,60 ;system call number (sys_exit) - syscall ;call kernel + mov al,60 ;system call number (sys_exit) + syscall ;call kernel section .data From e0b389443b7081deed3c77307e2d07d697a9426a Mon Sep 17 00:00:00 2001 From: Shark Date: Mon, 19 Oct 2015 18:31:01 +0200 Subject: [PATCH 3/5] size optimizations --- a/assembler_nasm_linux64.asm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/a/assembler_nasm_linux64.asm b/a/assembler_nasm_linux64.asm index 94470ce8..233654d4 100644 --- a/a/assembler_nasm_linux64.asm +++ b/a/assembler_nasm_linux64.asm @@ -3,16 +3,15 @@ section .text _start: ;tell linker entry point - xor eax,eax ; eax:=0 + xor eax,eax ; eax:=0 lea edx,[rax+len] ;message length - mov esi,msg ;message to write - lea edi,[rax+1];file descriptor (stdout) - mov al,1 ;system call number (sys_write) - syscall ;call kernel + mov esi,msg ;message to write + mov al,1 ;system call number (sys_write) + mov edi,eax ;file descriptor (stdout) + syscall ;call kernel -; xor eax, eax - mov al,60 ;system call number (sys_exit) - syscall ;call kernel + mov al,60 ;system call number (sys_exit) + syscall ;call kernel section .data From f19088fb3e21391071fe9e992c94e5bfd5ec59b1 Mon Sep 17 00:00:00 2001 From: Shark Date: Mon, 19 Oct 2015 18:47:27 +0200 Subject: [PATCH 4/5] user rodata section for text-string --- a/assembler_nasm_linux64.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/a/assembler_nasm_linux64.asm b/a/assembler_nasm_linux64.asm index 233654d4..5a141d71 100644 --- a/a/assembler_nasm_linux64.asm +++ b/a/assembler_nasm_linux64.asm @@ -13,7 +13,7 @@ _start: ;tell linker entry point mov al,60 ;system call number (sys_exit) syscall ;call kernel -section .data +section .rodata msg db 'Hello, world!',0xa ;our string len equ $ - msg ;length of our string From b9a24501bd060b6037eddb11f8d5c5acb12a8ea6 Mon Sep 17 00:00:00 2001 From: Shark Date: Mon, 19 Oct 2015 21:00:09 +0200 Subject: [PATCH 5/5] swap two lines for clarity --- a/assembler_nasm_linux64.asm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/a/assembler_nasm_linux64.asm b/a/assembler_nasm_linux64.asm index 5a141d71..fd5e6afc 100644 --- a/a/assembler_nasm_linux64.asm +++ b/a/assembler_nasm_linux64.asm @@ -5,8 +5,8 @@ _start: ;tell linker entry point xor eax,eax ; eax:=0 lea edx,[rax+len] ;message length - mov esi,msg ;message to write mov al,1 ;system call number (sys_write) + mov esi,msg ;message to write mov edi,eax ;file descriptor (stdout) syscall ;call kernel