Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <time.h>
- using namespace std;
- void main() {
- const int ARRAY_SIZE = 10;
- // На это число делятся полученные генератором случайных чисел величины
- // 100 для того, чтобы все полученные числа были двузначными
- const __int16 RANDOM_DIVIDER = 100;
- // На это число делятся значения из массива 1 при выполнении задания
- const __int16 VALUE_DIVIDER = 3;
- // Размер одного элемента массива
- const char TYPE_SIZE = 2;
- // Величина остатка от деления на VALUE_DIVIDER
- const __int16 REMAINDER = 0;
- //srand((int)time(0));
- setlocale(0, "rus");
- __int16 mas1[ARRAY_SIZE];
- __int16 mas2[ARRAY_SIZE];
- _asm
- {
- LEA EBX, mas1;
- MOV ECX, ARRAY_SIZE;
- _RANDOM_LOOP:
- rdtsc;
- XOR DX, DX;
- // AX = DX:AX / RANDOM_DIVIDER (200), remainder DX
- DIV RANDOM_DIVIDER;
- MOV[EBX], DX;
- ADD EBX, 2;
- LOOP _RANDOM_LOOP;
- }
- cout << "Исходный массив: ";
- for (int i : mas1) { cout << i << "\t"; }
- cout << endl;
- // Если элемент первого массива кратен 3, поместить его на соответствующую позицию во второй массив,
- // иначе поместить 0
- _asm {
- LEA EBX, mas1;
- MOV ECX, ARRAY_SIZE;
- _LOOP:
- MOV AX, [EBX];
- // AX = DX:AX / VALUE_DIVIDER (3), remainder DX
- XOR EDX, EDX;
- PUSH AX;
- DIV VALUE_DIVIDER;
- POP AX;
- CMP DX, REMAINDER;
- JE _SET_VALUE;
- PUSH EBX;
- LEA EBX, mas2;
- // AX = AL * TYPE_SIZE (2)
- XOR EAX, EAX;
- MOV EAX, ARRAY_SIZE;
- // EAX = ARRAY_SIZE - ECX. Так мы получаем индекс элемента, с которым работаем в данный момент
- SUB EAX, ECX;
- MUL TYPE_SIZE;
- ADD EBX, EAX;
- MOV AX, 0;
- MOV[EBX], AX;
- JMP _LOOP_CONTROL;
- _SET_VALUE:
- PUSH EBX;
- LEA EBX, mas2;
- PUSH AX;
- // AX = AL * TYPE_SIZE (2)
- XOR EAX, EAX;
- MOV EAX, ARRAY_SIZE;
- // EAX = ARRAY_SIZE - ECX. Так мы получаем индекс элемента, с которым работаем в данный момент
- SUB EAX, ECX;
- MUL TYPE_SIZE;
- ADD EBX, EAX;
- XOR EAX, EAX;
- POP AX;
- MOV[EBX], AX;
- JMP _LOOP_CONTROL;
- _LOOP_CONTROL:
- POP EBX;
- ADD EBX, 2;
- LOOP _LOOP;
- }
- cout << "Массив с замененными элементами: ";
- for (int i : mas2) { cout << i << "\t"; }
- cout << endl;
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement