Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int main() {
- const int arraySize = 8;
- int arr[arraySize] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- for (int i = 0; i < arraySize; i++) {
- cout << "Enter [" << (i + 1) << "] array element: ";
- cin >> arr[i];
- }
- cout << endl;
- cout << "Your array is:" << endl;
- cout << "[ ";
- for (int i = 0; i < arraySize; i++) {
- cout << arr[i] << " ";
- }
- cout << "]" << endl;
- int resultC = arr[1];
- int resultAsm = arr[1];
- for (int i = 2; i < arraySize; i++) {
- if ((i + 1) % 2 == 0)
- resultC -= arr[i];
- }
- __asm {
- xor edx, edx // Обнуляем регистр edx
- lea esi, arr // Передаем адресс массива в esi
- add esi, 8 // Сдвигаем адрес до arr[2]
- mov ecx, arraySize // В ecx грузим размер массива
- sub ecx, 2 // Отнимаем 2, чтобы цикл выполнился 6 раз
- start:
- mov eax, arraySize // Грузим размер массива в eax
- sub eax, ecx // Отнимает от eax ecx, чтобы узнать текущий индекс
- add eax, 1 // Прибавляем 1, чтобы нумерация индексов начиналась с единицы
- mov ebx, 2 // Помещаем в ebx 2
- div ebx // Делим eax на ebx, остаток от деления будет лежать в edx
- mov ebx, [esi] // Помещаем в ebx текущий элемент массива
- cmp edx, 0 // Сравниваем остаток с нулем
- jne nextElement // Если он не равен нулю, то переходим к следующему элементу
- sub resultAsm, ebx // Если он равен нулю, то отнимаем элемент массива
- nextElement:
- add esi, 4 // Переход к адресу следующего элемента массива, +4 т. к. int занимает 4 байта
- loop start // Выполнять процедуру start, пока edx не будет равен 0
- }
- cout << "Result on C++ is " << resultC << endl;
- cout << "Result on ASM is " << resultAsm << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement