CSC231 Hello World on Mac

From dftwiki3
Revision as of 13:30, 4 September 2008 by Thiebaut (talk | contribs) (New page: <code><pre> ; Hello.asm ; D. Thiebaut ; ; taken from http://untimedcode.com/2007/5/20/learn-nasm-assembly-on-mac-os-x ; Simple Hello World that runs on a Mac or on a Linux machine ; ; to a...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
; Hello.asm
; D. Thiebaut
;
; taken from http://untimedcode.com/2007/5/20/learn-nasm-assembly-on-mac-os-x
; Simple Hello World that runs on a Mac or on a Linux machine
;
; to assemble, link and run on a Mac:   
;
; nasm -f macho hello.asm -DMAC
; ld -e _start -o hello hello.o
; ./hello
;
; to assemble, link and run on Linux:
;
; nasm -f elf -F stabs hello.asm 
; ld -o hello hello.o
; ./hello

%macro  int80   0
%ifdef  MAC        
        push    edx
        push    ecx
        push    ebx
        push    eax
%endif
        int     0x80           ; call OSX        call   _syscall

%ifdef  MAC
        add     esp, 16
%endif                
%endm
                        
;;; -------------------------------------------------
;;; data section
;;; -------------------------------------------------
        section .data                

msg     db       "Hello, World!",0xa    ; string with a carriage-return
LEN     equ      $ - msg                ; string length in bytes

;;; -------------------------------------------------
;;; code section
;;; -------------------------------------------------
        section  .text                  ; start of the code indicator
        global   _start                 ; make the main function externally visible
  
_start:                                 ; entry point for linker

;;; write our string to standard output

        mov      eax,    0x4     ; system call for writing
        mov      ebx,    1       ; to stdout
        mov      ecx,    msg     ; the address of the string
        mov      edx,    LEN     ; the # of chars
        int80


;;; exit
        mov      ebx,     0      ; exit code
        mov      eax,     0x1    ; system call number (sys_exit)
        int80