fork download
  1. section .data
  2. arr dw 10, 25, 33, 47, 78
  3. len equ ($ - arr) / 2
  4. msg db "Результат: ", 0
  5.  
  6. section .bss
  7. buffer resb 20
  8.  
  9. section .text
  10. global _start
  11.  
  12. _start:
  13. movsx eax, word [arr]
  14. movsx ebx, word [arr + (len - 1) * 2]
  15. sub eax, ebx
  16.  
  17. mov rdi, msg
  18. call print_string
  19.  
  20. mov rdi, rax
  21. call print_int
  22.  
  23. mov rdi, 10
  24. call print_char
  25.  
  26. mov rax, 60
  27. xor rdi, rdi
  28. syscall
  29.  
  30. print_string:
  31. push rax
  32. push rbx
  33. push rcx
  34. push rdx
  35. mov rcx, rdi
  36. xor rdx, rdx
  37. .strlen_loop:
  38. cmp byte [rcx + rdx], 0
  39. je .got_len
  40. inc rdx
  41. jmp .strlen_loop
  42. .got_len:
  43. mov rax, 1
  44. mov rdi, 1
  45. mov rsi, rcx
  46. syscall
  47. pop rdx
  48. pop rcx
  49. pop rbx
  50. pop rax
  51. ret
  52.  
  53. print_char:
  54. push rax
  55. push rdi
  56. mov [buffer], dil
  57. mov rax, 1
  58. mov rdi, 1
  59. mov rsi, buffer
  60. mov rdx, 1
  61. syscall
  62. pop rdi
  63. pop rax
  64. ret
  65.  
  66. print_int:
  67. push rax
  68. push rbx
  69. push rcx
  70. push rdx
  71. push rdi
  72.  
  73. mov eax, edi
  74.  
  75. cmp eax, 0
  76. jge .positive
  77.  
  78. mov dil, '-'
  79. call print_char
  80. neg eax
  81.  
  82. .positive:
  83. mov ebx, 10
  84. mov ecx, buffer + 19
  85. mov byte [ecx], 0
  86. dec ecx
  87.  
  88. .digit_loop:
  89. xor edx, edx
  90. div ebx
  91. add dl, '0'
  92. mov [ecx], dl
  93. dec ecx
  94. test eax, eax
  95. jnz .digit_loop
  96.  
  97. mov rdi, rcx
  98. inc rdi
  99. call print_string
  100.  
  101. pop rdi
  102. pop rdx
  103. pop rcx
  104. pop rbx
  105. pop rax
  106. ret
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Результат: -68