;veja mais detalhes em: https://www.csee.umbc.edu/portal/help/nasm/sample_64.shtml
;compilar : nasm -f elf64 scanfPrintf.asm ==> gera um objeto scanfPrintf.o de saida
;linkar   : gcc -no-pie -m64 scanfPrintf.o -o scanfPrintf ==> gera um executavel scanfPrint 

extern scanf
extern exit
extern printf

section .data
    x dq 0.0
    n dd 0
    s times 100 db 0
    fmt db "%s %lf",0  ;aqui estamos lendo uma string e uma float
    fmEntrada db "Entre com seu nome e quanto recebe de salário: ",0
    fmPrint db "%s, voce ganha %.2lf",10,0
    fmMessage db "Mensagem:",10,0
section .text
global main
main:
    push rbx ;padrao de abertura
    
    mov rdi,fmEntrada
    mov rax,0
    call printf
    
    lea rdi, [fmt]
    lea rsi, [s]
    lea rdx, [x]
    xor eax, eax
    call scanf
    mov [n], eax  ;sabia que o o scanf retorna o numero de argumentos lidos?
    
    mov rdi, fmPrint
    mov rsi,s
    movq xmm0,qword [x] ;por que?
    mov rax,1
    call printf
            
    pop rbx   ;padrao de fechamento
    mov rdi,0
    call exit 
    