Advertisement
Alyks

lab 6.2

May 14th, 2020
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6. const int arraySize = 8;
  7. int arr[arraySize] = { 0, 0, 0, 0, 0, 0, 0, 0 };
  8. for (int i = 0; i < arraySize; i++) {
  9. cout << "Enter [" << (i + 1) << "] array element: ";
  10. cin >> arr[i];
  11. }
  12. cout << endl;
  13. cout << "Your array is:" << endl;
  14. cout << "[ ";
  15. for (int i = 0; i < arraySize; i++) {
  16. cout << arr[i] << " ";
  17. }
  18. cout << "]" << endl;
  19. int resultC = arr[1];
  20. int resultAsm = arr[1];
  21. for (int i = 2; i < arraySize; i++) {
  22. if ((i + 1) % 2 == 0)
  23. resultC -= arr[i];
  24. }
  25.  
  26. __asm {
  27. xor edx, edx // Обнуляем регистр edx
  28. lea esi, arr // Передаем адресс массива в esi
  29. add esi, 8 // Сдвигаем адрес до arr[2]
  30. mov ecx, arraySize // В ecx грузим размер массива
  31. sub ecx, 2 // Отнимаем 2, чтобы цикл выполнился 6 раз
  32. start:
  33. mov eax, arraySize // Грузим размер массива в eax
  34. sub eax, ecx // Отнимает от eax ecx, чтобы узнать текущий индекс
  35. add eax, 1 // Прибавляем 1, чтобы нумерация индексов начиналась с единицы
  36. mov ebx, 2 // Помещаем в ebx 2
  37. div ebx // Делим eax на ebx, остаток от деления будет лежать в edx
  38. mov ebx, [esi] // Помещаем в ebx текущий элемент массива
  39. cmp edx, 0 // Сравниваем остаток с нулем
  40. jne nextElement // Если он не равен нулю, то переходим к следующему элементу
  41. sub resultAsm, ebx // Если он равен нулю, то отнимаем элемент массива
  42. nextElement:
  43. add esi, 4 // Переход к адресу следующего элемента массива, +4 т. к. int занимает 4 байта
  44. loop start // Выполнять процедуру start, пока edx не будет равен 0
  45. }
  46.  
  47. cout << "Result on C++ is " << resultC << endl;
  48. cout << "Result on ASM is " << resultAsm << endl;
  49.  
  50. return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement