Timestretch Logo Atom Visuals
 Home  Site News  Articles  Desktop Pictures  Erik's Artwork  Music  Software 

Site News
+ Articles
12 inch PowerBook G4 Review + Airport Extreme
Apple Vrs Dell Notebooks
Apple, Please Open up the iPod API!
- Asm Programming Using Jmp/Call
Assembler Programming for Intel and PPC on OSX
Building SpiderMonkey Javascript 1.6 on MacOS X
Canon ZR10 Quick Review
iPod Review... (2)
OS X & Linux Features Compared
PHP, MySQL, and Smarty Programming Intro
Spam Graph
Web Development with MySQL and PHP4 and MacOS X
Writing Secure PHP Applications
Desktop Pictures... (4)
Erik's Artwork
Music
Software... (4)

Search:
Site News:
· Asm Programming Using Jmp/Call
05/04/2008
· LidWakeOff: prevent Macs from Accidently Waking
12/09/2007
· Building SpiderMonkey Javascript 1.6 on MacOS X
05/26/2007
· Assembler Programming for Intel and PPC
05/14/2007
· Url2thumb - Generate Thumbnails from URLs
09/22/2006
· Ruby, Io, Python, Java, C Benchmark
09/22/2005
· Linux on iPod review from xlr8yourmac
12/27/2004
· Writing Secure PHP Applications
03/29/2004
 

Site News | RSS


Home > Articles >

Asm Programming Using Jmp/Call

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!

x86

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

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

.text
.globl _main

_main:
    jmp _data

_syscall:
    int     $0x80
    ret

_begin:
    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

    leave
    ret 

_data:
    call _begin

.asciz "Hello, World!\n"

PPC

; 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
.text

_main:

    bl      _string     ; branch to location of string

_resume:

    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)
    nop

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

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

    .asciz "Hello, world!\n"

Comments

No comments were found.

Leave a Comment

Show Comment Form

© 1996-2008 Timestretch.com
About