Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. %include "includes/io.inc"
  2.  
  3. struc Node
  4. data: resd 1
  5. left: resd 1
  6. right: resd 1
  7. endstruc
  8.  
  9. extern getAST
  10. extern freeAST
  11.  
  12. section .bss
  13. ; La aceasta adresa, scheletul stocheaza radacina arborelui
  14. root: resd 1
  15. isNeg: resd 1
  16. section .text
  17. global main
  18. main:
  19. mov ebp, esp; for correct debugging
  20. ; NU MODIFICATI
  21. push ebp
  22. mov ebp, esp
  23.  
  24. ; Se citeste arborele si se scrie la adresa indicata mai sus
  25. call getAST
  26. mov [root], eax
  27.  
  28. ; Implementati rezolvarea aici:
  29. call print
  30. mov eax, [root + data]
  31. mov eax, [eax]
  32. PRINT_DEC 4, [eax]
  33.  
  34. ; NU MODIFICATI
  35. ; Se elibereaza memoria alocata pentru arbore
  36. push dword [root]
  37. call freeAST
  38.  
  39. xor eax, eax
  40. leave
  41. ret
  42.  
  43. print:
  44. mov ebx, [eax + data]
  45. mov ebx, [ebx]
  46. mov dl, '-'
  47. mov cl, bl
  48. cmp cl, dl
  49. mov edx, '0'
  50. mov ecx, 10
  51. jne check_if_number
  52. cmp ebx, '-'
  53. ;mov ebx, [eax + data]
  54. ;inc ebx
  55. ;mov ebx, [ebx]
  56. jne convert
  57.  
  58. check_if_number:
  59. cmp bl, dl
  60. je convert
  61. inc edx
  62. loop check_if_number
  63. label1:
  64. push eax
  65. mov eax, [eax + left]
  66. call print
  67. pop eax
  68. push eax
  69. mov eax, [eax + right]
  70. call print
  71. pop eax
  72. mov ebx, [eax + data]
  73. cmp dword [ebx], '+'
  74. je sum
  75. cmp dword [ebx], '-'
  76. je difference
  77. cmp dword [ebx], '*'
  78. je multiply
  79. cmp dword [ebx], '/'
  80. je divide
  81.  
  82. convert:
  83. mov cl, bl
  84. mov dl, '-'
  85. cmp cl, dl
  86. mov ebx, [eax + data]
  87. jne pozi
  88. inc ebx
  89. mov dword [isNeg], "yes"
  90. pozi:
  91. xor edx, edx
  92. call atoi
  93. mov ecx, [eax + data]
  94. mov [ecx], ebx
  95. end:
  96. ret
  97. difference:
  98. mov ecx, [eax + left]
  99. mov ecx, [ecx + data]
  100. mov ecx, [ecx]
  101. mov edx, [eax + right]
  102. mov edx, [edx + data]
  103. mov edx, [edx]
  104. sub ecx, edx
  105. mov [ebx], ecx
  106.  
  107. jmp end
  108. divide:
  109. push eax
  110. mov ecx, [eax + right]
  111. mov ecx, [ecx + data]
  112. mov ecx, [ecx]
  113. mov eax, [eax + left]
  114. mov eax, [eax + data]
  115. mov eax, [eax]
  116. cdq
  117. idiv ecx
  118. mov [ebx], eax
  119. pop eax
  120.  
  121. jmp end
  122. sum:
  123. mov ecx, [eax + left]
  124. mov ecx, [ecx + data]
  125. mov ecx, [ecx]
  126. push eax
  127. mov eax, [eax + right]
  128. mov eax, [eax + data]
  129. mov eax, [eax]
  130. add ecx, eax
  131. pop eax
  132. mov ebx, [eax + data]
  133. mov [ebx], ecx
  134.  
  135. jmp end
  136. multiply:
  137. push eax
  138. mov ecx, [eax + right]
  139. mov ecx, [ecx + data]
  140. mov ecx, [ecx]
  141. mov eax, [eax + left]
  142. mov eax, [eax + data]
  143. mov eax, [eax]
  144. imul ecx
  145. mov [ebx], eax
  146. pop eax
  147.  
  148. jmp end
  149.  
  150. atoi:
  151. push ebx
  152. mov ebx, [ebx]
  153. test ebx, ebx
  154. je stop
  155.  
  156. sub ebx, '0'
  157. push eax
  158. mov eax, edx
  159. shl edx, 3
  160. add edx, eax
  161. add edx, eax
  162. xor eax, eax
  163. mov al, bl
  164. add edx, eax
  165. pop eax
  166. pop ebx
  167. inc ebx
  168. jmp atoi
  169.  
  170. stop:
  171. cmp dword [isNeg], "yes"
  172. jne positive
  173. mov dword [isNeg], "no"
  174. not edx
  175. inc edx
  176. positive:
  177. mov ebx, edx
  178. add esp, 4
  179. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement