From 55dab91ad924acbee863e293f79e0aeee210b301 Mon Sep 17 00:00:00 2001 From: Johannes Findeisen Date: Wed, 10 Jan 2018 18:47:10 +0100 Subject: [PATCH] add asm versiob of helloworld. still needs correct yasm params --- Makefile | 3 +++ helloworld.asm | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) create mode 100644 helloworld.asm diff --git a/Makefile b/Makefile index acd1c9d..4725edb 100644 --- a/Makefile +++ b/Makefile @@ -5,5 +5,8 @@ debug:clean $(CC) $(CFLAGS) -g -o helloworld helloworld.c stable:clean $(CC) $(CFLAGS) -o helloworld helloworld.c +asm:clean + yasm -f elf -o helloworld helloworld.asm + chmod +x helloworld clean: rm -vfr *~ helloworld diff --git a/helloworld.asm b/helloworld.asm new file mode 100644 index 0000000..2723381 --- /dev/null +++ b/helloworld.asm @@ -0,0 +1,26 @@ +section .text ;section declaration + +;we must export the entry point to the ELF linker or +global _start ;loader. They conventionally recognize _start as their +;entry point. Use ld -e foo to override the default. + +_start: + +;write our string to stdout + +mov edx,len ;third argument: message length +mov ecx,msg ;second argument: pointer to message to write +mov ebx,1 ;first argument: file handle (stdout) +mov eax,4 ;system call number (sys_write) +int 0x80 ;call kernel + +;and exit + +mov ebx,0 ;first syscall argument: exit code +mov eax,1 ;system call number (sys_exit) +int 0x80 ;call kernel + +section .data ;section declaration + +msg db "Hello, world!",0xa ;our dear string +len equ $ - msg