Найти количество положительных и нулевых элементов в масиве - Assembler
Формулировка задачи:
Важно чтобы и в ассемблере был тип
BYTE
Задание на скриншоте#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define N 10
int main()
{
char a[N], c, d, res = 0, res2 = 0;
do {
printf("Enter the values of the range [-128]\n");
printf("c = "); scanf_s("%hhd", &c);
printf("d = "); scanf_s("%hhd", &d);
if (c >= d)
{
printf("c can not be greater or equal d! Enter values again.\n\n");
}
} while (c >= d);
for (int i = 0; i < N; i++)
{
a[i] = rand() % 10 - 10 + rand() % 10;
printf("A[%d] = %d\n", i, a[i]);
if (a[i] >= c && a[i] <= d && a[i] <= 0)
res++;
}
__asm {
...
}
printf("C - Result = %d\n", res);
printf("Assembler - Result = %d\n", res2);
_getch();
return 0;
}Решение задачи: «Найти количество положительных и нулевых элементов в масиве»
textual
Листинг программы
#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define N 10
int main()
{
char a[N], c, d, res = 0, res2 = 0;
do {
printf("Enter the values of the range [-128]\n");
printf("c = "); scanf_s("%hhd", &c);
printf("d = "); scanf_s("%hhd", &d);
if (c >= d)
{
printf("c can not be greater or equal d! Enter values again.\n\n");
}
} while (c >= d);
for (int i = 0; i < N; i++)
{
a[i] = rand() % 10 - 10 + rand() % 10;
printf("A[%d] = %d\n", i, a[i]);
if (a[i] >= c && a[i] <= d && a[i] <= 0)
res++;
}
__asm {
MOV AL, c
MOV BL, d
MOV CL, N
MOV DL, res2
MOV SI, 0
cycle:
...
}
printf("C - Result = %d\n", res);
printf("Assembler - Result = %d\n", res2);
_getch();
return 0;
}
Объяснение кода листинга программы
- Объединение функций, использующих стандартные библиотеки языка C, и ассемблерного кода, выполняющего некоторые вычисления, в одной программе.
- Ввод с клавиатуры значений для переменных c и d с помощью функции scanf_s.
- Проверка корректности введенных значений: значение c должно быть меньше значения d.
- Если значения введены некорректно, пользователю предлагается ввести их снова.
- Создание массива a методом rand() с помощью функции srand(time(NULL)).
- Инициализация переменных res и res2 нулевыми значениями.
- Чтение элементов массива a с помощью цикла for и проверка их значений: если элемент больше или равен c и меньше или равен d и равен нулю, то к переменной res прибавляется единица.
- Использование ассемблерного блока для выполнения каких-то вычислений.
- Вывод результата вычислений, выполненных на языке ассемблера, в консоль.
- Получение значения от пользователя с помощью функции _getch() для завершения работы программы.
- Возврат значения 0 для завершения работы программы.