fork download
  1. bits 64
  2.  
  3. section .bss
  4. buf resb 80
  5.  
  6. section .data
  7. len: dq 0
  8. idx: dq 0
  9. abc: dw "abc "
  10. section .text
  11. global _start
  12.  
  13. _start:
  14. mov rax, 0
  15. mov rdi, 0
  16. mov rsi, buf
  17. mov rdx, 80
  18. syscall
  19.  
  20. cmp rax, 0
  21. je exit
  22.  
  23. mov QWORD [len], rax
  24. mov r10, 0 ; Index i - начало слова
  25. main_loop:
  26. cmp r10, rax
  27. jge exit
  28. mov r9, 1 ; flag isEngWord
  29. mov r11, r10 ; Index j - конец слова
  30. mov r12, buf
  31. add r12, r10
  32. cmp BYTE [r12], ' '
  33. je skip_ws
  34. cmp BYTE [r12], 10
  35. je skip_ws
  36. jmp word_loop
  37. skip_ws:
  38. inc r10
  39. jmp main_loop
  40. word_loop:
  41. cmp r11, rax
  42. jge action_word
  43. mov r12, buf
  44. add r12, r11
  45. cmp BYTE [r12], ' '
  46. je action_word
  47. cmp BYTE [r12], 10
  48. je action_word
  49. cmp r9, 0
  50. je next_symbol
  51.  
  52. cmp BYTE [r12], 'A'
  53. jl not_eng_symbol
  54. cmp BYTE [r12], 'Z'
  55. jle next_symbol
  56. cmp BYTE [r12], 'a'
  57. jl not_eng_symbol
  58. cmp BYTE [r12], 'z'
  59. jle next_symbol
  60. not_eng_symbol:
  61. mov r9, 0
  62. next_symbol:
  63. inc r11
  64. jmp word_loop
  65. action_word:
  66. cmp r9, 0
  67. je next_word
  68.  
  69. mov [idx], r11
  70.  
  71. mov r8, buf
  72. add r8, r10
  73. sub r11, r10
  74.  
  75. mov rax, 1
  76. mov rdi, 1
  77. mov rsi, r8
  78. mov rdx, r11
  79. syscall
  80.  
  81. mov rax, 1
  82. mov rdi, 1
  83. mov rsi, abc
  84. mov rdx, 4
  85. syscall
  86.  
  87.  
  88. mov r10, [idx]
  89. mov rax, [len]
  90. jmp main_loop
  91. next_word:
  92. mov r10, r11
  93. mov rax, [len]
  94. jmp main_loop
  95.  
  96. xor rdi, rdi
  97. mov rax, 60
  98. syscall
Success #stdin #stdout 0s 5308KB
stdin
fgh hdg hjsdg342
stdout
fghabc hdgabc