| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- ;Testname=aout; Arguments=-faout -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
- ;Testname=aoutb; Arguments=-faoutb -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
- ;Testname=as86; Arguments=-fas86 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
- ;Testname=elf32; Arguments=-felf32 -olnxhello.o -Ox; Files=stdout stderr lnxhello.o
- ;
- ; Assembly "Hello, World!" for Linux
- ;
- ; Properly defined in <sys/syscall.h>
- %define SYS_exit 1
- %define SYS_write 4
- section .text
- global _start
- _start:
- ; gdb doesn't like to stop at the entry point address, so
- ; we put a nop here for pure convenience
- nop
- write_hello:
- mov edx, hello_len
- mov ecx, hello
-
- .loop:
- mov eax, SYS_write
- mov ebx, 1 ; stdout
- int 80h
- cmp eax, -4096
- ja error
- add ecx, eax
- sub edx, eax
- jnz .loop
- ok:
- mov eax, SYS_exit
- xor ebx, ebx
- int 80h
- hlt
- error:
- mov eax, SYS_exit
- mov ebx, 1 ; Error
- int 80h
- hlt
-
- section .rodata
- hello: db "Hello, World!", 10
- hello_len equ $-hello
|