Advertisement
Guest User

Untitled

a guest
Jan 26th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. ;Autor:
  2. ;Nume program:
  3. ;Descriere:
  4. ;Data:
  5.  
  6. include \masm32\include64\masm64rt.inc
  7. ;include header.inc
  8.  
  9. ELEM STRUCT
  10. OP db NULL
  11. NR dq NULL
  12. next dq NULL
  13. ELEM EndS
  14.  
  15. malloc MACRO size:REQ
  16. invoke HeapAlloc, rv(GetProcessHeap), 0, size
  17. EXITM <rax>
  18. ENDM
  19.  
  20. textcolor MACRO attr:REQ
  21. fn SetConsoleTextAttribute, StdOutput, attr
  22. EXITM <>
  23. ENDM
  24.  
  25.  
  26. free MACRO memory:REQ
  27. invoke HeapFree, rv(GetProcessHeap), 0, memory
  28. EXITM <>
  29. ENDM
  30.  
  31. printf MACRO format:REQ, args:VARARG
  32. fn vc_printf, cfm$(format), args
  33. EXITM <>
  34. ENDM
  35.  
  36. .data
  37. StdOutput DWORD ?
  38. stackpointer qword NULL
  39. double1 qword 5.0
  40. double2 qword 50.99
  41. double3 qword 1.0
  42. double4 qword 9999.5
  43. .code
  44. main proc
  45. invoke GetStdHandle, STD_OUTPUT_HANDLE
  46. mov StdOutput,eax
  47.  
  48.  
  49. sub rsp ,32+8
  50. movq xmm0, double4
  51. mov rdx,0
  52. mov rcx ,stackpointer
  53. call StackPush
  54. add rsp,40
  55.  
  56.  
  57. sub rsp ,32+8
  58. mov dl, ')'
  59. mov rcx ,stackpointer
  60. call StackPush
  61. add rsp,40
  62.  
  63.  
  64. sub rsp ,32+8
  65. movq xmm0, double3
  66. mov rdx,0
  67. mov rcx ,stackpointer
  68. call StackPush
  69. add rsp,40
  70.  
  71.  
  72. sub rsp ,32+8
  73. mov dl, '-'
  74. mov rcx ,stackpointer
  75. call StackPush
  76. add rsp,40
  77.  
  78.  
  79. sub rsp ,32+8
  80. mov dl, '('
  81. mov rcx ,stackpointer
  82. call StackPush
  83. add rsp,40
  84.  
  85.  
  86. sub rsp ,32+8
  87. mov dl, '+'
  88. mov rcx ,stackpointer
  89. call StackPush
  90. add rsp,40
  91.  
  92. sub rsp ,32+8
  93. movq xmm0, double2
  94. mov rdx,0
  95. mov rcx ,stackpointer
  96. call StackPush
  97. add rsp,40
  98.  
  99.  
  100. sub rsp ,32+8
  101. mov dl, '*'
  102. mov rcx ,stackpointer
  103. call StackPush
  104. add rsp,40
  105.  
  106.  
  107. sub rsp ,32+8
  108. movq xmm0, double1
  109. mov rdx,0
  110. mov rcx ,stackpointer
  111. call StackPush
  112. add rsp,40
  113.  
  114.  
  115. sub rsp ,32+8
  116. mov dl, '-'
  117. mov rcx ,stackpointer
  118. call StackPush
  119. add rsp,40
  120.  
  121. sub rsp,32+8
  122. mov rcx,stackpointer
  123. mov rdx,0
  124. call Stack_Show
  125. add rsp,40
  126.  
  127. invoke ExitProcess, 0
  128. ret
  129. main endp
  130.  
  131. StackPush proc
  132. USING rbx, rdi
  133. SaveRegs
  134. ;mov qword ptr [rsp+16],rcx
  135. ;mov qword ptr [rsp+8],rdx
  136.  
  137. mov rbx,rcx
  138. mov r15,rdx
  139.  
  140. mov rdi,malloc(SIZEOF ELEM)
  141.  
  142. mov [rdi].ELEM.OP,r15b
  143. movupd [rdi].ELEM.NR, xmm0
  144.  
  145. .if rbx == NULL
  146. mov [rdi].ELEM.next, NULL
  147. mov stackpointer, rdi
  148. .else
  149. mov [rdi].ELEM.next,rbx
  150. mov stackpointer, rdi
  151. .endif
  152. mov rax,rdi
  153. RestoreRegs
  154. ret
  155. StackPush endp
  156.  
  157. Stack_Show proc
  158. USING rbx,rdi
  159. SaveRegs
  160. mov rbx,rcx
  161. textcolor(07h)
  162. xor r15,r15
  163. .if rbx {} NULL
  164. printf("\nStiva este:")
  165. .repeat
  166. .if [rbx].ELEM.OP == NULL
  167. inc r15
  168. mov r15,[rbx].ELEM.NR
  169. printf("%.2lf ",qword ptr[rbx].ELEM.NR)
  170. .else
  171. printf("%c", byte ptr [rbx].ELEM.OP)
  172. .endif
  173. mov rbx,[rbx].ELEM.next
  174. .until rbx == NULL
  175. .endif
  176. mov rax,r15
  177.  
  178. RestoreRegs
  179. ret
  180. Stack_Show endp
  181.  
  182.  
  183. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement