------------------------------------------------------------------------------
MC logo
Assembler Hello, World! Using Syscall
[^] CSc 422 Lecture Slides
------------------------------------------------------------------------------
hello.asm
;; Hello world! using syscalls.  Modified from:
;; http://www.linuxgazette.com/issue53/boldyshev.html
;; Author: Konstantin Boldyshev
        section .text            ; Code section
        global _start            ; Linker needs this symbol.

;; This is the starting symbol.  In a C program, _start is a library function
;; which perfoms initialization, then calls main.  For this, we'll just start
;; here.
_start:
        ;; Load the syscall parameters into expected CPU registers.  Linux looks
        ;; for the syscall code in eax, and any parameters in ebx, ecx, edx,
        ;; esi, edi and edp, in that order.
        mov     ebx, 1          ; First parm, file stream 1 (standard output)
        mov     ecx, msg        ; Second parm, pointer to the buffer.
        mov     edx, len        ; Third parm, message length.
        mov     eax, 4          ; Syscall number (sys_write).
        int     0x80            ; Syscall instruction.  Enters kernel.

        ;; Now we need to exit.  Just falling off the end won't work.  Need
        ;; to tell the kernel that we need terminating.
        mov     eax,1           ; System call number (sys_exit)
        int     0x80            ; Syscall instruction.

        section .data           ; Data section
;; This declares a string of characters to write, and computes its length.
msg:    db      'Hello, world!',0xa     ; 
len:    equ     $ - msg                 ;