Advertisement
YauhenMardan

asm_8.1_c

May 21st, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 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] = { 1,2,2,2,3,4,5,6,7,8 }, e[n], x; //array, num elem array, x
  9. int b[n] = { 1,2,2,2,3,4,5,6,7,8 };
  10. int c = 0;//counter for num elem array
  11. /*cout << "Type a[" << n << "] " << endl;
  12. for (int i = 0; i < n; i++) {
  13. cin >> a[i];
  14. }*/
  15. cout << "Type element" << endl;
  16. cin >> x;
  17. int first = 0, last = n;
  18. if (n == 0 || a[n - 1] < x || a[0] > x) {
  19. cout << "No such elements in the array" << endl;
  20. system("pause");
  21. return 0;
  22. }
  23.  
  24. _asm {
  25. mov esi, 0
  26. mov edi, n
  27.  
  28. BEG_1_ :
  29. //{
  30. cmp esi, edi
  31. jl LESS_1_
  32. ///{
  33. jmp END_1_
  34. ///}
  35. LESS_1_ :
  36. ///{
  37. xor eax, eax
  38. mov eax, edi //eax=last
  39. sub eax, esi //eax=last-first
  40. mov ebx, 2
  41. cdq
  42. idiv ebx //eax=(last-first)/2
  43. add eax, esi//eax=(last-first)/2+first
  44. mov ecx, eax//save mid
  45. mov ebx, 4
  46. imul ebx //eax=eax*4
  47. mov ebx, x
  48. cmp ebx, b[eax]
  49. jle LESS_EQL_1_
  50. ////{
  51. add esi, ecx
  52. add esi, 1
  53. jmp NEXT_1_
  54. ////}
  55. LESS_EQL_1_ :
  56. ////{
  57. mov edi, ecx
  58. ////}
  59. NEXT_1_ :
  60. jmp BEG_1_
  61. ///}
  62. //}
  63. BEG_2_ :
  64. //{
  65. mov eax, edi
  66. mov ebx, 4
  67. imul ebx
  68. mov ebx, x
  69. cmp ebx, a[eax]
  70. je EQL_2_
  71. ///{
  72. jmp NEXT_2_
  73. ///}
  74. EQL_2_ :
  75. ///{
  76. sub edi, 1
  77. jmp BEG_2_
  78. ///}
  79. NEXT_2_ :
  80. //}
  81. add edi, 1
  82.  
  83.  
  84. BEG_3_ :
  85. //{
  86. mov eax, edi
  87. mov ebx, 4
  88. imul ebx
  89. mov ebx, x
  90. cmp ebx, a[eax]
  91. je EQL_3_
  92. ///{
  93. mov eax,c
  94. mov ebx,4
  95. imul ebx
  96. mov e[eax],edi
  97. mov c,eax //c++
  98. add eax,1
  99. mov c,eax
  100. add edi,1 //edi++
  101. jmp NEXT_3_
  102. ///}
  103. EQL_3_ :
  104. ///{
  105. sub edi, 1
  106. jmp BEG_3_
  107. ///}
  108. NEXT_3_ :
  109. //}
  110.  
  111. END_1_:
  112. mov x, edi
  113. }
  114. for (int i = 0; i < c; i++) {
  115. cout << e[i] << endl;
  116. }
  117. system("pause");
  118. return 0;
  119.  
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement