Advertisement
Guest User

Untitled

a guest
Nov 25th, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.88 KB | None | 0 0
  1. void Add(T data)
  2. {
  3. 00A98C60 push ebp
  4. 00A98C61 mov ebp,esp
  5. 00A98C63 sub esp,108h
  6. 00A98C69 push ebx
  7. 00A98C6A push esi
  8. 00A98C6B push edi
  9. 00A98C6C push ecx
  10. 00A98C6D lea edi,[ebp-108h]
  11. 00A98C73 mov ecx,42h
  12. 00A98C78 mov eax,0CCCCCCCCh
  13. 00A98C7D rep stos dword ptr es:[edi]
  14. 00A98C7F pop ecx
  15. 00A98C80 mov dword ptr [this],ecx
  16. node<T> *pNode = new node<T>;
  17. 00A98C83 push 8
  18. 00A98C85 call operator new (0A9020Ch)
  19. 00A98C8A add esp,4
  20. 00A98C8D mov dword ptr [ebp-104h],eax
  21. 00A98C93 mov eax,dword ptr [ebp-104h]
  22. 00A98C99 mov dword ptr [pNode],eax
  23. pNode->m_pNext = NULL;
  24. 00A98C9C mov eax,dword ptr [pNode]
  25. pNode->m_pNext = NULL;
  26. 00A98C9F mov dword ptr [eax+4],0
  27. pNode->m_data = data;
  28. 00A98CA6 mov eax,dword ptr [pNode]
  29. 00A98CA9 mov ecx,dword ptr [data]
  30. 00A98CAC mov dword ptr [eax],ecx
  31.  
  32. uint32_t cPushes;
  33. uint32_t cPops;
  34. node<T> *pTail;
  35.  
  36. while (true)
  37. 00A98CAE mov eax,1
  38. 00A98CB3 test eax,eax
  39. 00A98CB5 je Queue<int,-1>::Add+0FEh (0A98D5Eh)
  40. {
  41. cPushes = m_cPushes;
  42. 00A98CBB mov eax,dword ptr [this]
  43. 00A98CBE mov ecx,dword ptr [eax+0Ch]
  44. 00A98CC1 mov dword ptr [cPushes],ecx
  45. cPops = m_cPops;
  46. 00A98CC4 mov eax,dword ptr [this]
  47. 00A98CC7 mov ecx,dword ptr [eax+4]
  48. 00A98CCA mov dword ptr [cPops],ecx
  49. pTail = (node<T>*)m_pTail;
  50. 00A98CCD mov eax,dword ptr [this]
  51. 00A98CD0 mov ecx,dword ptr [eax+8]
  52. 00A98CD3 mov dword ptr [pTail],ecx
  53. if (cPushes != m_cPushes)
  54. 00A98CD6 mov eax,dword ptr [this]
  55. 00A98CD9 mov ecx,dword ptr [eax+0Ch]
  56. 00A98CDC cmp dword ptr [cPushes],ecx
  57. 00A98CDF je Queue<int,-1>::Add+83h (0A98CE3h)
  58. continue;
  59. 00A98CE1 jmp Queue<int,-1>::Add+4Eh (0A98CAEh)
  60.  
  61. if (!pTail)
  62. 00A98CE3 cmp dword ptr [pTail],0
  63. 00A98CE7 jne Queue<int,-1>::Add+0F9h (0A98D59h)
  64. if (CAS2(&m_pTail, NULL, cPushes, (uint32_t)pNode, cPushes +1))
  65. 00A98CE9 mov eax,dword ptr [cPushes]
  66. 00A98CEC add eax,1
  67. 00A98CEF push eax
  68. 00A98CF0 mov ecx,dword ptr [pNode]
  69. 00A98CF3 push ecx
  70. 00A98CF4 mov edx,dword ptr [cPushes]
  71. 00A98CF7 push edx
  72. 00A98CF8 push 0
  73. 00A98CFA mov eax,dword ptr [this]
  74. 00A98CFD add eax,8
  75. 00A98D00 push eax
  76. 00A98D01 call CAS2 (0A8F776h)
  77. 00A98D06 add esp,14h
  78. 00A98D09 movzx ecx,al
  79. 00A98D0C test ecx,ecx
  80. 00A98D0E je Queue<int,-1>::Add+0B4h (0A98D14h)
  81. break;
  82. 00A98D10 jmp Queue<int,-1>::Add+0FEh (0A98D5Eh)
  83. 00A98D12 jmp Queue<int,-1>::Add+0F9h (0A98D59h)
  84. else if (CAS(&pTail->m_pNext, NULL, (uint32_t)pNode))
  85. 00A98D14 mov eax,dword ptr [pNode]
  86. 00A98D17 push eax
  87. 00A98D18 push 0
  88. 00A98D1A mov ecx,dword ptr [pTail]
  89. 00A98D1D add ecx,4
  90. 00A98D20 push ecx
  91. 00A98D21 call CAS (0A8FDFCh)
  92. 00A98D26 add esp,0Ch
  93. 00A98D29 movzx edx,al
  94. 00A98D2C test edx,edx
  95. 00A98D2E je Queue<int,-1>::Add+0D4h (0A98D34h)
  96. break;
  97. 00A98D30 jmp Queue<int,-1>::Add+0FEh (0A98D5Eh)
  98. else
  99. 00A98D32 jmp Queue<int,-1>::Add+0F9h (0A98D59h)
  100. CAS2(&m_pTail, (uint32_t)pTail, cPushes, (uint32_t)pTail->m_pNext, cPushes + 1);
  101. 00A98D34 mov eax,dword ptr [cPushes]
  102. 00A98D37 add eax,1
  103. 00A98D3A push eax
  104. 00A98D3B mov ecx,dword ptr [pTail]
  105. 00A98D3E mov edx,dword ptr [ecx+4]
  106. CAS2(&m_pTail, (uint32_t)pTail, cPushes, (uint32_t)pTail->m_pNext, cPushes + 1);
  107. 00A98D41 push edx
  108. 00A98D42 mov eax,dword ptr [cPushes]
  109. 00A98D45 push eax
  110. 00A98D46 mov ecx,dword ptr [pTail]
  111. 00A98D49 push ecx
  112. 00A98D4A mov edx,dword ptr [this]
  113. 00A98D4D add edx,8
  114. 00A98D50 push edx
  115. 00A98D51 call CAS2 (0A8F776h)
  116. 00A98D56 add esp,14h
  117. }
  118. 00A98D59 jmp Queue<int,-1>::Add+4Eh (0A98CAEh)
  119.  
  120. CAS2(&m_pHead, NULL, cPops, (uint32_t)pNode, cPops + 1);
  121. 00A98D5E mov eax,dword ptr [cPops]
  122. 00A98D61 add eax,1
  123. 00A98D64 push eax
  124. 00A98D65 mov ecx,dword ptr [pNode]
  125. 00A98D68 push ecx
  126. 00A98D69 mov edx,dword ptr [cPops]
  127. 00A98D6C push edx
  128. 00A98D6D push 0
  129. 00A98D6F mov eax,dword ptr [this]
  130. 00A98D72 push eax
  131. 00A98D73 call CAS2 (0A8F776h)
  132. 00A98D78 add esp,14h
  133. CAS2(&m_pTail, (uint32_t)pTail, cPushes, (uint32_t)pNode, cPushes + 1);
  134. 00A98D7B mov eax,dword ptr [cPushes]
  135. 00A98D7E add eax,1
  136. 00A98D81 push eax
  137. 00A98D82 mov ecx,dword ptr [pNode]
  138. 00A98D85 push ecx
  139. 00A98D86 mov edx,dword ptr [cPushes]
  140. 00A98D89 push edx
  141. 00A98D8A mov eax,dword ptr [pTail]
  142. 00A98D8D push eax
  143. 00A98D8E mov ecx,dword ptr [this]
  144. 00A98D91 add ecx,8
  145. 00A98D94 push ecx
  146. 00A98D95 call CAS2 (0A8F776h)
  147. 00A98D9A add esp,14h
  148. }
  149. 00A98D9D pop edi
  150. 00A98D9E pop esi
  151. 00A98D9F pop ebx
  152. 00A98DA0 add esp,108h
  153. }
  154. 00A98DA6 cmp ebp,esp
  155. 00A98DA8 call __RTC_CheckEsp (0A8FEFBh)
  156. 00A98DAD mov esp,ebp
  157. 00A98DAF pop ebp
  158. 00A98DB0 ret 4
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement