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