fork download
  1. section .data
  2. msg db "Resultado: "
  3. len_msg equ $ - msg
  4. newline db 10
  5.  
  6. section .bss
  7. buffer resb 32 ; Espacio para convertir el número a texto
  8.  
  9. section .text
  10. global _start
  11.  
  12. _start:
  13. ; 1. Calcular Fibonacci de 40
  14. mov rdi, 40
  15. call fib
  16.  
  17. ; 2. Guardar el resultado para convertirlo
  18. mov rdi, rax ; El número a convertir va a RDI
  19. mov rsi, buffer + 31 ; Empezamos a escribir desde el final del buffer
  20. mov byte [rsi], 0 ; Fin de cadena
  21. mov rbx, 10 ; Divisor para obtener dígitos decimales
  22. mov rcx, 0 ; Contador de dígitos
  23.  
  24. .convert_loop:
  25. xor rdx, rdx ; Limpiar RDX para la división
  26. div rbx ; RAX / 10 -> Cociente en RAX, Resto en RDX
  27. add dl, '0' ; Convertir el resto (0-9) a ASCII ('0'-'9')
  28. dec rsi ; Retroceder en el buffer
  29. mov [rsi], dl ; Guardar el carácter
  30. inc rcx ; Incrementar largo
  31. test rax, rax ; ¿Queda algo por dividir?
  32. jnz .convert_loop
  33.  
  34. ; 3. Imprimir etiqueta "Resultado: "
  35. push rsi ; Guardar posición del número
  36. push rcx ; Guardar largo del número
  37. mov rax, 1 ; sys_write
  38. mov rdi, 1 ; stdout
  39. mov rsi, msg
  40. mov rdx, len_msg
  41. syscall
  42.  
  43. ; 4. Imprimir el número convertido
  44. pop rdx ; Recuperar largo
  45. pop rsi ; Recuperar posición
  46. mov rax, 1 ; sys_write
  47. mov rdi, 1 ; stdout
  48. syscall
  49.  
  50. ; 5. Imprimir salto de línea
  51. mov rax, 1
  52. mov rdi, 1
  53. mov rsi, newline
  54. mov rdx, 1
  55. syscall
  56.  
  57. ; 6. Salir
  58. mov rax, 60 ; sys_exit
  59. xor rdi, rdi
  60. syscall
  61.  
  62. fib:
  63. cmp rdi, 1
  64. jle .base
  65. push rbx
  66. push r12
  67. mov rbx, rdi
  68. dec rdi
  69. call fib
  70. mov r12, rax
  71. mov rdi, rbx
  72. sub rdi, 2
  73. call fib
  74. add rax, r12
  75. pop r12
  76. pop rbx
  77. ret
  78. .base:
  79. mov rax, rdi
  80. ret
  81.  
Success #stdin #stdout 0.54s 5320KB
stdin
Standard input is empty
stdout
Resultado: 102334155