fork download
  1. section .data
  2. msg_equal db 'Resultado: 42', 0 ; Mensagem a ser impressa se o resultado for 42
  3. msg_diff db 'Resultado diferente de 42', 0 ; Mensagem alternativa
  4.  
  5. section .text
  6. global _start
  7.  
  8. _start:
  9. ; Passando valores para rdi e rsi
  10. mov rdi, 7 ; Passa 7 para rdi
  11. mov rsi, 5 ; Passa 5 para rsi
  12.  
  13. ; Chama a função soma
  14. call soma
  15.  
  16. ; Verifica se o resultado é igual a 42 (rax == 42)
  17. cmp rax, 42 ; Compara o valor de rax com 42
  18. je resultado_igual ; Se for igual, vai para resultado_igual
  19.  
  20. ; Se não for 42, imprime a mensagem de resultado diferente
  21. mov rsi, msg_diff ; Endereço da mensagem alternativa
  22. mov rdx, 25 ; Tamanho da mensagem alternativa
  23. mov rax, 1 ; Syscall para escrever
  24. mov rdi, 1 ; Descritor de arquivo (stdout)
  25. syscall
  26. jmp fim_programa ; Finaliza o programa
  27.  
  28. resultado_igual:
  29. ; Se for 42, imprime a mensagem "Resultado: 42"
  30. mov rsi, msg_equal ; Endereço da mensagem
  31. mov rdx, 14 ; Tamanho da mensagem
  32. mov rax, 1 ; Syscall para escrever
  33. mov rdi, 1 ; Descritor de arquivo (stdout)
  34. syscall
  35.  
  36. fim_programa:
  37. ; Finaliza o programa
  38. mov rax, 60 ; Código de syscall para sair
  39. xor rdi, rdi ; Código de saída 0
  40. syscall
  41.  
  42. soma:
  43. ; Função soma (rdi + rsi) * rsi
  44. push rbx ; Salva o valor de rbx na pilha
  45. mov rbx, rdi ; Move o valor de rdi para rbx
  46. imul rbx, rsi ; Multiplica rbx por rsi e armazena o resultado em rbx
  47. add rbx, rdi ; Adiciona o valor de rdi a rbx
  48. mov rax, rbx ; Move o resultado de rbx para rax (valor de retorno)
  49. pop rbx ; Restaura o valor de rbx da pilha
  50. ret ; Retorna da função
  51.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Resultado: 42