YauhenMardan

UP_asm_3.3

May 21st, 2018
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int n = 10;
  6.  
  7. int main() {
  8. int a[n];
  9. cout << "Type a[" << n << "] ";
  10. for (int i = 0; i < n; i++) {
  11. cin >> a[i];
  12. }
  13. int aq[n], ae[n];
  14. int max[n];
  15. int mq, me; //max quantity, max element(quantity)
  16. int q, e; // quantity, element (for output)
  17. int c = 0, m=0;//c - counter for aq and ae, m - counter for max[]
  18. _asm
  19. {
  20. //sort
  21. mov ecx, n //set external ecx
  22. sub ecx, 2
  23. beg_1_1_:
  24. //{
  25. mov ebx, ecx //save external ecx
  26. mov ecx, n //set internal ecx
  27. sub ecx, 2
  28. beg_1_2_ :
  29. ///{
  30. mov eax, ecx
  31. mov edx, 4
  32. imul edx
  33. mov esi, a[eax] // esi=a[ecx*4]
  34. add eax, 4
  35. mov edi, a[eax] // esi=a[(ecx+1)*4]
  36. cmp esi, edi
  37. jl LESS
  38. ////{
  39. mov eax, ecx
  40. mov edx, 4
  41. imul edx
  42. mov a[eax], edi // swap
  43. add eax, 4
  44. mov a[eax], esi //
  45. ////}
  46. LESS :
  47. ///}
  48. loop beg_1_2_
  49. //}
  50. mov ecx, ebx //set external ecx from ebx
  51. loop beg_1_1_
  52.  
  53. //
  54. mov ecx, n //counter
  55. add ecx, 1
  56. mov esi, 0 //offset for a[]
  57. mov edi, 0 //offset for aq[] and ae[]
  58. mov eax, a[esi]
  59. mov e, eax // e=a[esi]
  60. mov eax, 0
  61. mov q, eax //q=0
  62. mov eax, a[esi]
  63. mov me, eax //me=a[esi]
  64. mov mq, eax //q=0
  65.  
  66. beg_2_1 :
  67. //{
  68. mov ebx, e
  69. cmp ebx, a[esi]
  70. je EQL_2_1
  71. ///{
  72. mov eax, q
  73. mov aq[edi], eax //aq[edi]=q
  74. mov eax, e
  75. mov ae[edi], eax //ae[edi]=e
  76. add edi, 4 //edi+=4
  77. mov eax, c //c++
  78. add eax, 1
  79. mov c, eax
  80.  
  81. mov eax, mq
  82. cmp eax, q
  83. jg GR_2_1
  84. ////{
  85. mov eax, q
  86. mov mq, eax
  87. mov eax, e
  88. mov me, eax
  89. ////}
  90. ////
  91. jmp SKIP
  92. beg_2_2 :
  93. jmp beg_2_1
  94. SKIP :
  95. ////
  96. GR_2_1:
  97. mov eax, 1
  98. mov q, eax
  99. mov eax, a[esi]
  100. mov e, eax
  101. jmp NEXT_2_1
  102. ///}
  103. EQL_2_1 :
  104. ///{
  105. mov eax, q //q++
  106. add eax, 1
  107. mov q, eax
  108. ///}
  109. NEXT_2_1 :
  110. //}
  111. add esi, 4 //esi+=4
  112. loop beg_2_2
  113.  
  114. mov ecx,c
  115. mov esi,0
  116. beg_3_1:
  117. mov ebx,mq
  118. cmp ebx,aq[esi]
  119. jne NEQL_3_
  120. //{
  121. mov eax,m
  122. mov ebx,4
  123. imul ebx
  124. mov ebx, ae[esi]
  125. mov max[eax],ebx
  126. mov eax,m
  127. add eax,1
  128. mov m,eax
  129. //}
  130. NEQL_3_:
  131. add esi,4
  132. loop beg_3_1
  133. }
  134. for (int i = 0; i < n; i++) {
  135. cout << a[i] << " ";
  136. }
  137. cout << endl;
  138. for (int i = 0; i<c; i++)
  139. {
  140. cout << "Elem " << ae[i] << " - " << aq[i] << endl;
  141. }
  142. cout << "Max elem: "<< endl;
  143. for (int i = 0; i < m; i++)
  144. {
  145. cout << max[i] << endl;
  146. }
  147. system("pause");
  148. return 0;
  149.  
  150. }
Advertisement
Add Comment
Please, Sign In to add comment