fork download
  1. section .bss
  2. buffer resb 256 ; lưu chuỗi nhập vào
  3. buffer_len resb 20 ; lưu chuỗi số để in ra
  4. section .data
  5. msg db "Hãy nhập chuỗi: ", 0
  6. msg_len equ $ - msg
  7. section .text
  8. global _start
  9.  
  10. _start:
  11. ; ===== In thông báo =====
  12. mov rax, 1 ; syscall write
  13. mov rdi, 1
  14. mov rsi, msg
  15. mov rdx, msg_len
  16. syscall
  17.  
  18. ; ===== Đọc chuỗi từ bàn phím =====
  19. mov rax, 0 ; syscall read
  20. mov rdi, 0
  21. mov rsi, buffer
  22. mov rdx, 256
  23. syscall
  24.  
  25. ; rax = số byte đọc được (bao gồm cả newline nếu có)
  26. mov rcx, rax
  27. dec rcx ; bỏ qua newline '\n' ở cuối
  28.  
  29. ; ===== Chuyển số (rcx) sang chuỗi =====
  30. mov rax, rcx
  31. mov rdi, buffer_len + 19
  32. mov byte [rdi], 10 ; newline
  33. dec rdi
  34.  
  35.  
  36. itoa_loop:
  37. mov rdx, 0
  38. mov rbx, 10
  39. div rbx
  40. add dl, 48
  41. mov [rdi], dl
  42. dec rdi
  43. test rax, rax
  44. jnz itoa_loop
  45.  
  46. inc rdi
  47.  
  48.  
  49. ; ===== In độ dài =====
  50. mov rax, 1
  51. mov rsi, rdi
  52. mov rdi, 1
  53. mov rdx, buffer_len + 20 ; rdx = địa chỉ outbuf + 20
  54. sub rdx, rdi ; rdx = rdx - rdi
  55.  
  56. syscall
  57.  
  58. ; ===== Thoát =====
  59. mov rax, 60
  60. mov rdi, 0
  61. syscall
  62.  
  63.  
  64.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Hãy nhập chuỗi: