; Define printf as an external function
extern	printf

SECTION .DATA
    msg:	db "Hello world", 0 ; Zero is Null terminator 
    fmt:    db "%s", 10, 0 ; printf format string follow by a newline(10) and a null terminator(0), "\n",'0'

SECTION .TEXT
    global main    ;quando se usa gcc para linkar usa-se main
    
main:                  
    push rbp ; Push stack, para evitar um erro de programação

    ; Passa os parâmetros e chama as funções C
    mov	rdi,fmt   ;1o parâmetro
    mov	rsi,msg   ;2o parâmetro
    mov	rax,0
    call printf

    pop	rbp		; Pop stack

    mov	rax,0	; Exit code 0
    ret			; Return


;compilar e linkar:
;nasm test.asm -f elf64 -o test.o
;gcc test.o -o test, linka com gcc

;função e parâmetros para 64 bits
;foo(rdi,rsi,rdx,rcx,r8,r9), os demais na stack
