Learn how to print "Hello, World!" in assembler on MacOS X using the jmp/call method to get a pointer to the string to print. Happy Hacking!


# Hello World x86 asm - MacOS X
# By Erik Wrenholt
# gcc hello2.s -o hello2 ; ./hello2 ; echo $?

# References:
# http://www.klake.org/~jt/encoder/ 

.globl _main

    jmp _data

    int     $0x80

    pop     %ebx        #   get ptr of string
    pushl   $14         #   pass the length of the string   
    pushl   %ebx        #   pass the ptr to the hello string
    pushl   $1          #   pass stdout (1)
    movl    $4, %eax    # SYS_write (4)
    call    _syscall

    add     $12, %esp   #   clear stack (we pushed 3 args)
    pushl   $0          #   we want to call exit(0), push 0
    movl    $1, %eax    # SYS_exit=1
    call    _syscall


    call _begin

.asciz "Hello, World!n"


; By Erik Wrenholt
; This PPC example shows how to use the jmp/call
; method to obtain the ptr to the string.

;gcc hello4.s -o hello4 ; ./hello4 

.globl _main


    bl      _string     ; branch to location of string


    li      r3, 1       ; stdout
    mflr    r4          ; move from lr into r4

    li      r5, 14      ; string length
    li      r0, 4       ; SYS_write
    sc                  ; write(stdout, string, len)

    li      r3, 0       ; 
    li      r0, 1       ; SYS_exit (r3)

    bl  _resume         ; go back to _resume
                        ; the link register holds ptr to string below

    .asciz "Hello, world!n"

Tags: jmp, assembler