section .data
msg_equal db 'Resultado: 42', 0 ; Mensagem a ser impressa se o resultado for 42
msg_diff db 'Resultado diferente de 42', 0 ; Mensagem alternativa
section .text
global _start
_start:
; Passando valores para rdi e rsi
mov rdi, 7 ; Passa 7 para rdi
mov rsi, 5 ; Passa 5 para rsi
; Chama a função soma
call soma
; Verifica se o resultado é igual a 42 (rax == 42)
cmp rax, 42 ; Compara o valor de rax com 42
je resultado_igual ; Se for igual, vai para resultado_igual
; Se não for 42, imprime a mensagem de resultado diferente
mov rsi, msg_diff ; Endereço da mensagem alternativa
mov rdx, 25 ; Tamanho da mensagem alternativa
mov rax, 1 ; Syscall para escrever
mov rdi, 1 ; Descritor de arquivo (stdout)
syscall
jmp fim_programa ; Finaliza o programa
resultado_igual:
; Se for 42, imprime a mensagem "Resultado: 42"
mov rsi, msg_equal ; Endereço da mensagem
mov rdx, 14 ; Tamanho da mensagem
mov rax, 1 ; Syscall para escrever
mov rdi, 1 ; Descritor de arquivo (stdout)
syscall
fim_programa:
; Finaliza o programa
mov rax, 60 ; Código de syscall para sair
xor rdi, rdi ; Código de saída 0
syscall
soma:
; Função soma (rdi + rsi) * rsi
push rbx ; Salva o valor de rbx na pilha
mov rbx, rdi ; Move o valor de rdi para rbx
imul rbx, rsi ; Multiplica rbx por rsi e armazena o resultado em rbx
add rbx, rdi ; Adiciona o valor de rdi a rbx
mov rax, rbx ; Move o resultado de rbx para rax (valor de retorno)
pop rbx ; Restaura o valor de rbx da pilha
ret ; Retorna da função
c2VjdGlvbiAuZGF0YQogICAgbXNnX2VxdWFsIGRiICdSZXN1bHRhZG86IDQyJywgMCAgICA7IE1lbnNhZ2VtIGEgc2VyIGltcHJlc3NhIHNlIG8gcmVzdWx0YWRvIGZvciA0MgogICAgbXNnX2RpZmYgZGIgJ1Jlc3VsdGFkbyBkaWZlcmVudGUgZGUgNDInLCAwICA7IE1lbnNhZ2VtIGFsdGVybmF0aXZhCgpzZWN0aW9uIC50ZXh0CiAgICBnbG9iYWwgX3N0YXJ0Cgpfc3RhcnQ6CiAgICA7IFBhc3NhbmRvIHZhbG9yZXMgcGFyYSByZGkgZSByc2kKICAgIG1vdiByZGksIDcgICAgICAgICAgOyBQYXNzYSA3IHBhcmEgcmRpCiAgICBtb3YgcnNpLCA1ICAgICAgICAgIDsgUGFzc2EgNSBwYXJhIHJzaQoKICAgIDsgQ2hhbWEgYSBmdW7Dp8OjbyBzb21hCiAgICBjYWxsIHNvbWEKCiAgICA7IFZlcmlmaWNhIHNlIG8gcmVzdWx0YWRvIMOpIGlndWFsIGEgNDIgKHJheCA9PSA0MikKICAgIGNtcCByYXgsIDQyICAgICAgICAgOyBDb21wYXJhIG8gdmFsb3IgZGUgcmF4IGNvbSA0MgogICAgamUgcmVzdWx0YWRvX2lndWFsICA7IFNlIGZvciBpZ3VhbCwgdmFpIHBhcmEgcmVzdWx0YWRvX2lndWFsCgogICAgOyBTZSBuw6NvIGZvciA0MiwgaW1wcmltZSBhIG1lbnNhZ2VtIGRlIHJlc3VsdGFkbyBkaWZlcmVudGUKICAgIG1vdiByc2ksIG1zZ19kaWZmICAgOyBFbmRlcmXDp28gZGEgbWVuc2FnZW0gYWx0ZXJuYXRpdmEKICAgIG1vdiByZHgsIDI1ICAgICAgICAgOyBUYW1hbmhvIGRhIG1lbnNhZ2VtIGFsdGVybmF0aXZhCiAgICBtb3YgcmF4LCAxICAgICAgICAgIDsgU3lzY2FsbCBwYXJhIGVzY3JldmVyCiAgICBtb3YgcmRpLCAxICAgICAgICAgIDsgRGVzY3JpdG9yIGRlIGFycXVpdm8gKHN0ZG91dCkKICAgIHN5c2NhbGwKICAgIGptcCBmaW1fcHJvZ3JhbWEgICAgOyBGaW5hbGl6YSBvIHByb2dyYW1hCgpyZXN1bHRhZG9faWd1YWw6CiAgICA7IFNlIGZvciA0MiwgaW1wcmltZSBhIG1lbnNhZ2VtICJSZXN1bHRhZG86IDQyIgogICAgbW92IHJzaSwgbXNnX2VxdWFsICA7IEVuZGVyZcOnbyBkYSBtZW5zYWdlbQogICAgbW92IHJkeCwgMTQgICAgICAgICA7IFRhbWFuaG8gZGEgbWVuc2FnZW0KICAgIG1vdiByYXgsIDEgICAgICAgICAgOyBTeXNjYWxsIHBhcmEgZXNjcmV2ZXIKICAgIG1vdiByZGksIDEgICAgICAgICAgOyBEZXNjcml0b3IgZGUgYXJxdWl2byAoc3Rkb3V0KQogICAgc3lzY2FsbAoKZmltX3Byb2dyYW1hOgogICAgOyBGaW5hbGl6YSBvIHByb2dyYW1hCiAgICBtb3YgcmF4LCA2MCAgICAgICAgIDsgQ8OzZGlnbyBkZSBzeXNjYWxsIHBhcmEgc2FpcgogICAgeG9yIHJkaSwgcmRpICAgICAgICA7IEPDs2RpZ28gZGUgc2HDrWRhIDAKICAgIHN5c2NhbGwKCnNvbWE6CiAgICA7IEZ1bsOnw6NvIHNvbWEgKHJkaSArIHJzaSkgKiByc2kKICAgIHB1c2ggcmJ4ICAgICAgICAgICAgOyBTYWx2YSBvIHZhbG9yIGRlIHJieCBuYSBwaWxoYQogICAgbW92IHJieCwgcmRpICAgICAgICA7IE1vdmUgbyB2YWxvciBkZSByZGkgcGFyYSByYngKICAgIGltdWwgcmJ4LCByc2kgICAgICAgOyBNdWx0aXBsaWNhIHJieCBwb3IgcnNpIGUgYXJtYXplbmEgbyByZXN1bHRhZG8gZW0gcmJ4CiAgICBhZGQgcmJ4LCByZGkgICAgICAgIDsgQWRpY2lvbmEgbyB2YWxvciBkZSByZGkgYSByYngKICAgIG1vdiByYXgsIHJieCAgICAgICAgOyBNb3ZlIG8gcmVzdWx0YWRvIGRlIHJieCBwYXJhIHJheCAodmFsb3IgZGUgcmV0b3JubykKICAgIHBvcCByYnggICAgICAgICAgICAgOyBSZXN0YXVyYSBvIHZhbG9yIGRlIHJieCBkYSBwaWxoYQogICAgcmV0ICAgICAgICAgICAgICAgICA7IFJldG9ybmEgZGEgZnVuw6fDo28K