Advertisement
Neveles

Untitled

Oct 30th, 2019
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.10 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <ctime>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7. int main()
  8. {
  9. setlocale(LC_ALL, "rus");
  10.  
  11. const long int TEST_TIME = pow(10, 9);
  12. double time1 = 0, time2 = 0, resultTime = 0;
  13.  
  14. const int NUMBER_OF_ELEMENTS = 100000;
  15. const int COUNT_ROW = 1000;
  16. int COUNT_EL = NUMBER_OF_ELEMENTS / COUNT_ROW;
  17.  
  18. int mass1[NUMBER_OF_ELEMENTS] = { 0 };
  19. int mass2[NUMBER_OF_ELEMENTS] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  20.  
  21. // Пустой цикл
  22. cout << "<<Пустой цикл>>" << endl;
  23. time1 = clock();
  24. for (int i = 1; i < TEST_TIME; i++)
  25. ;
  26. time2 = clock();
  27. resultTime = (time2 - time1)/CLOCKS_PER_SEC;
  28.  
  29. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  30. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  31. (static_cast<int>(resultTime) % 10 == 0))
  32. cout << "Время выполнения " << resultTime << " секунд";
  33. else if (static_cast<int>(resultTime) % 10 == 1)
  34. cout << "Время выполнения " << resultTime << " секунда";
  35. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  36. cout << "Время выполнения " << resultTime << " секунды";
  37.  
  38. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  39.  
  40. // Регистровая адрессация
  41. cout << endl << "<<Регистровая адрессация>>" << endl;
  42. time1 = clock();
  43. for (int i = 1; i < TEST_TIME; i++)
  44. {
  45. _asm
  46. {
  47. add eax, ebx
  48. add eax, ebx
  49. add eax, ebx
  50. add eax, ebx
  51. add eax, ebx
  52. add eax, ebx
  53. add eax, ebx
  54. add eax, ebx
  55. add eax, ebx
  56. add eax, ebx
  57. }
  58. }
  59. time2 = clock();
  60. resultTime = (time2 - time1) / CLOCKS_PER_SEC;
  61.  
  62. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  63. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  64. (static_cast<int>(resultTime) % 10 == 0))
  65. cout << "Время выполнения " << resultTime << " секунд";
  66. else if (static_cast<int>(resultTime) % 10 == 1)
  67. cout << "Время выполнения " << resultTime << " секунда";
  68. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  69. cout << "Время выполнения " << resultTime << " секунды";
  70.  
  71. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  72.  
  73. // Косвенно-регистровая адрессация reg,[]
  74. cout << endl << "<<Косвенно-регистровая адрессация reg,[]>>" << endl;
  75. time1 = clock();
  76. for (int i = 1; i < TEST_TIME; i++)
  77. {
  78. _asm
  79. {
  80. add eax, [ebx + edx * 4 + 8]
  81. add eax, [ebx + edx * 4 + 8]
  82. add eax, [ebx + edx * 4 + 8]
  83. add eax, [ebx + edx * 4 + 8]
  84. add eax, [ebx + edx * 4 + 8]
  85. add eax, [ebx + edx * 4 + 8]
  86. add eax, [ebx + edx * 4 + 8]
  87. add eax, [ebx + edx * 4 + 8]
  88. add eax, [ebx + edx * 4 + 8]
  89. add eax, [ebx + edx * 4 + 8]
  90. }
  91. }
  92. time2 = clock();
  93. resultTime = (time2 - time1) / CLOCKS_PER_SEC;
  94.  
  95. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  96. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  97. (static_cast<int>(resultTime) % 10 == 0))
  98. cout << "Время выполнения " << resultTime << " секунд";
  99. else if (static_cast<int>(resultTime) % 10 == 1)
  100. cout << "Время выполнения " << resultTime << " секунда";
  101. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  102. cout << "Время выполнения " << resultTime << " секунды";
  103.  
  104. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  105.  
  106. // Косвенно-регистровая адрессация [],reg
  107. cout << endl << "<<Косвенно-регистровая адрессация [],reg>>" << endl;
  108. time1 = clock();
  109. _asm
  110. {
  111. mov esi, esp
  112. mov edi,1
  113. }
  114. for (int i = 1; i < TEST_TIME; i++)
  115. {
  116. _asm
  117. {
  118. add[esi + edi * 4 + 8], ebx
  119. add[esi + edi * 4 + 8], ebx
  120. add[esi + edi * 4 + 8], ebx
  121. add[esi + edi * 4 + 8], ebx
  122. add[esi + edi * 4 + 8], ebx
  123. add[esi + edi * 4 + 8], ebx
  124. add[esi + edi * 4 + 8], ebx
  125. add[esi + edi * 4 + 8], ebx
  126. add[esi + edi * 4 + 8], ebx
  127. add[esi + edi * 4 + 8], ebx
  128. }
  129. }
  130. time2 = clock();
  131. resultTime = (time2 - time1) / CLOCKS_PER_SEC;
  132.  
  133. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  134. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  135. (static_cast<int>(resultTime) % 10 == 0))
  136. cout << "Время выполнения " << resultTime << " секунд";
  137. else if (static_cast<int>(resultTime) % 10 == 1)
  138. cout << "Время выполнения " << resultTime << " секунда";
  139. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  140. cout << "Время выполнения " << resultTime << " секунды";
  141.  
  142. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  143.  
  144. // 2.1
  145. cout << endl << "<<Ненаправленная адрессация>>" << endl;
  146. time1 = clock();
  147. _asm
  148. {
  149. mov esi, 0
  150. lea ebx, mass1
  151.  
  152. e2:
  153. mov ecx, COUNT_EL
  154. mov eax, 10
  155.  
  156. mov edx, esi
  157. and edx, 01h
  158. jz drop
  159.  
  160. mov eax, 10
  161.  
  162. e1:
  163. mov[ebx], eax
  164. add ebx, 4
  165. loop e1
  166. jmp outside
  167.  
  168. drop:
  169. mov eax, 4
  170. mul COUNT_EL
  171. add ebx, eax
  172. jmp outside
  173.  
  174. outside:
  175. add esi, 1
  176. mov eax, COUNT_ROW
  177. cmp eax, esi
  178. jg e2
  179. }
  180. time2 = clock();
  181.  
  182. resultTime = (time2 - time1) / CLOCKS_PER_SEC;
  183.  
  184. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  185. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  186. (static_cast<int>(resultTime) % 10 == 0))
  187. cout << "Время выполнения " << resultTime << " секунд";
  188. else if (static_cast<int>(resultTime) % 10 == 1)
  189. cout << "Время выполнения " << resultTime << " секунда";
  190. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  191. cout << "Время выполнения " << resultTime << " секунды";
  192.  
  193. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  194.  
  195. //cout << endl << "<<Массив mass1>>" << endl;
  196. //for (int i = 0; i < COUNT_ROW; i++)
  197. //{
  198. // for (int j = 0; j < COUNT_EL && i * COUNT_EL + j < NUMBER_OF_ELEMENTS; j++)
  199. // cout << setw(4) << mass1[i * COUNT_EL + j] << " ";
  200. // cout << endl;
  201. //}
  202.  
  203. // 2.2
  204. cout << endl << "<<STOS>>" << endl;
  205. time1 = clock();
  206. _asm
  207. {
  208. mov esi, 0
  209. lea edi, mass2
  210. mov eax, 10
  211.  
  212. met:
  213. mov ecx, COUNT_EL
  214. rep stos eax
  215. mov eax, 4
  216. mul COUNT_EL
  217. add edi, eax
  218. mov eax, COUNT_ROW
  219. add esi, 2
  220. cmp eax, esi
  221. jg met
  222. }
  223. time2 = clock();
  224.  
  225. resultTime = (time2 - time1) / CLOCKS_PER_SEC;
  226.  
  227. if (((static_cast<int>(resultTime) >= 10) && (resultTime <= 20)) ||
  228. ((static_cast<int>(resultTime) % 10 >= 5) && (static_cast<int>(resultTime) % 10 <= 9)) ||
  229. (static_cast<int>(resultTime) % 10 == 0))
  230. cout << "Время выполнения " << resultTime << " секунд";
  231. else if (static_cast<int>(resultTime) % 10 == 1)
  232. cout << "Время выполнения " << resultTime << " секунда";
  233. else if ((static_cast<int>(resultTime) % 10 >= 2) && (static_cast<int>(resultTime) % 10 <= 4))
  234. cout << "Время выполнения " << resultTime << " секунды";
  235.  
  236. cout << endl << "Time1 = " << time1 / CLOCKS_PER_SEC << "sec; time2 = " << time2 / CLOCKS_PER_SEC << "sec" << endl;
  237.  
  238. //cout << endl << "<<Массив mass2>>" << endl;
  239. //for (int i = 0; i < COUNT_ROW; i++)
  240. //{
  241. // for (int j = 0; j < COUNT_EL && i * COUNT_EL + j < NUMBER_OF_ELEMENTS; j++)
  242. // cout << setw(4) << mass2[i * COUNT_EL + j] << " ";
  243. // cout << endl;
  244. //}
  245.  
  246. return 0;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement