Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <locale.h>
- #include <math.h>
- #define SIZE_ARRAY 11 //константа для размра массива
- int main() {
- char A[SIZE_ARRAY] = { 1, 2, 43, 41, 2, 3, 6, 106, -100, 1, 28 }; //Инициализируем массив А
- char B[SIZE_ARRAY]; //Обьявляем массив В
- char* C[SIZE_ARRAY]; //Обьявляем массив С
- char f = SIZE_ARRAY - 1, k = 0, sum = 0; // f - для определения количества оставшихся шагов в "цикле". k - счетчик элементов подходящих под условие
- __asm {
- lea esi, A //Кладем в двойное слово ESI адрес первого элемента массива А
- lea edi, B //В также в двойное слово EDI кладем адрес первого элемента В
- lea ebx, C //В EBX адрес первого из С
- mov dl, f //Кладем в байтовые регистры дополнительные переменные, в DL - счетчик "цикла", отмеряем сколько элементов осталось до конца массива
- mov bl, k //Для определения количества найденных по правилу задания элементов
- mov cl, sum //Для определния суммы найденных по правилу задания элементов
- START :
- mov al, [esi]
- cmp al, -3 // Сравниваем текущее значение и -3
- jae RHS // Если значение больше или равно -3 то переходим в метку RHS
- jmp NXT // Иначе переходим в метку N
- RHS: // Метка R
- cmp al, 4 // Сравниваем текущее значение и 4
- jbe CUR // Если значение меньше или равно 4 то
- jmp NXT
- CUR:
- inc bl //прибавляем к счетчику кол-ва элементов 1
- add cl, al
- mov[edi], al
- inc edi
- //mov[ebx], esi
- lea eax, [ebx]
- mov [C + ebx], eax
- inc ebx
- inc bl
- jmp NXT
- NXT: // Метка NXT
- inc esi
- dec dl //Уменьшаем количество оставшихся к прохождению элементов на 1
- cmp dl, 0 //Сравниваем это значение с 0
- jne START //Если НЕ 0, то переходим на метку начала и заново проходим алгоритм
- jmp FIN // Если 0 то переходим в ветку FIN
- FIN : // конечная метка, за ней следует конец программы
- mov k, bl // кладем количество полученных элементов в ячейку памяти для K
- mov sum, cl //
- }
- puts("The array A:"); //Выводим массив A и адреса элементов массива
- for (int i = 0; i < SIZE_ARRAY; i++) {
- printf("%d:\t%p\n", A[i], A + i);
- }
- puts("\nThe array B:"); //Выводим массив В
- for (int i = 0; i < k; i++) {
- printf("%d\t", B[i]);
- }
- puts("\nThe array C:"); //Выводим массив С
- for (int i = 0; i < k; i++) {
- printf("%p\t", C[i]);
- }
- printf("\nNumber of such elements:\t%d\n", k); //Выводим количество элементов в массивах B и C
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment