fork download
  1. section .text
  2. global _start
  3.  
  4. %define stdin 0
  5. %define stdout 1
  6. %define sys_read 3
  7. %define sys_write 4
  8. %define sys_exit 1
  9.  
  10. _start:
  11.  
  12. mov eax, sys_read ; read A
  13. mov ebx, stdin
  14. mov ecx, _abuff
  15. mov edx, 5 ; A,B <= 200 (so we need 3 bytes + 1 for LF = 4)
  16. int 80h
  17.  
  18. pushfd
  19. push eax
  20. push ebx
  21. push ecx
  22. push edx
  23. push esi
  24.  
  25. xor esi, esi
  26. xor ebx, ebx
  27. mov bl, 10
  28.  
  29. ._a_sti:
  30. xor ax, ax
  31. mov al, [_abuff+esi]
  32. cmp al, 10
  33. je ._a_end
  34.  
  35. inc esi
  36. sub al, "0"
  37. mov cl, al
  38.  
  39. mov al, [_a]
  40. mul bl
  41. add al, cl
  42. mov [_a], al
  43.  
  44. jmp ._a_sti
  45.  
  46. ._a_end:
  47.  
  48. pop esi
  49. pop edx
  50. pop ecx
  51. pop ebx
  52. pop eax
  53. popfd
  54.  
  55.  
  56. mov eax, sys_read ; read B
  57. mov ebx, stdin
  58. mov ecx, _bbuff
  59. mov edx, 5
  60. int 80h
  61.  
  62. pushfd
  63. push eax
  64. push ebx
  65. push ecx
  66. push edx
  67. push esi
  68.  
  69. xor esi, esi
  70. xor ebx, ebx
  71. mov bl, 10
  72.  
  73. ._b_sti:
  74. xor ax, ax
  75. mov al, [_bbuff+esi]
  76. cmp al, 10
  77. je ._b_end
  78.  
  79. inc esi
  80. sub al, "0"
  81. mov cl, al
  82.  
  83. mov al, [_b]
  84. mul bl
  85. add al, cl
  86. mov [_b], al
  87.  
  88. jmp ._b_sti
  89.  
  90. ._b_end:
  91.  
  92. pop esi
  93. pop edx
  94. pop ecx
  95. pop ebx
  96. pop eax
  97. popfd
  98.  
  99.  
  100. xor ax, ax ; 0 to register
  101. xor bx, bx ; 0 to register
  102. mov al, [_a]
  103. mov bl, [_b]
  104. add ax, bx ; ax = A + B
  105.  
  106. call _pr_ax
  107. call _pr_lf
  108.  
  109. mov eax, sys_exit ; sys_exit
  110. mov ebx, 0 ; exit code
  111. int 80h
  112.  
  113. _pr_ax:
  114. pushfd
  115. push eax
  116. push ebx
  117. push edx
  118. push esi
  119.  
  120. xor esi, esi
  121. mov bx, 10 ; przez 10 będziemy dzielić
  122.  
  123. ._div_more:
  124. xor dx, dx
  125. div bx
  126. add dl, "0" ; add "0"
  127. mov [_rbuff+esi], dl
  128. inc esi
  129. xor dl, dl
  130. cmp ax, dx
  131. jne ._div_more
  132.  
  133. xor ecx, ecx
  134.  
  135. ._reverse:
  136. dec esi
  137. mov al, [_rbuff+esi]
  138. mov [_prbuff+ecx], al
  139. inc ecx
  140. cmp esi, 0
  141. jnz ._reverse
  142.  
  143. mov esi, ecx
  144.  
  145. mov eax, sys_write
  146. mov ebx, stdout
  147. mov ecx, _prbuff
  148. mov edx, esi
  149. int 80h
  150.  
  151. pop esi
  152. pop edx
  153. pop ebx
  154. pop eax
  155. popfd
  156.  
  157. ret
  158.  
  159. _pr_lf:
  160. pushfd
  161. push eax
  162. push edi
  163. push esi
  164. push edx
  165.  
  166. mov eax, sys_write
  167. mov ebx, stdout
  168. mov ecx, _lf
  169. mov edx, 1
  170. int 80h
  171.  
  172. pop edx
  173. pop esi
  174. pop edi
  175. pop eax
  176. popfd
  177.  
  178. ret
  179.  
  180. section .data
  181. _abuff times 5 db 0
  182. _bbuff times 5 db 0
  183. _rbuff times 4 db 0
  184. _prbuff times 4 db 0
  185. _lf db 10
  186. _a db 0
  187. _b db 0
  188. _len db 0
  189.  
Success #stdin #stdout 0.02s 144KB
stdin
3
4
stdout
179