Лабораторная №4. Подпрограммы.
Лабораторная № 4. [3 балла]
Во всех заданиях следует в основной программе вызвать написанную функцию (или процедуру), полученный результат (результаты) вывести на консоль и завершить основную программу соответствующим системным вызовом (аналогично тому, как было описано в Лаб3). Если не указано иначе, то все функции и процедуры следует писать, используя конвенции вызова cdecl.
-
[
task-1.s
] [1,5 балла] Создайте функциюMUL_5_ENDED
, которая подсчитывает произведение элементов заданного массива, оканчивающихся на 5 (последнюю цифру числа можно найти с помощью взятия остатка от деления на 10). В качестве параметров функции передаётся адрес начала массива и его длина. В основной программе вызвать функцию для массива {5, 21, 15, 20} и распечатать на консоль результат. - [
task-2.s
] [1,5 балла] Тема - переменное число параметров. Создайте функциюPRINT_EVENS
, которая выводит на консоль только четные значения (в порядке их следования в стеке, начиная с вершины). В качестве параметров функции через стек передаются значения элементов массива и за ними количество элементов в массиве. В основной программе загрузите на стек массив {5, 10, 15, 20, 18} и его размер и вызовите написанную функцию.
Дополнительное задание [1 балл]
[task-3.s
] [Тема - передача адресов подпрограмм. Создайте функцию SUM_DIG
, которая подсчитывает сумму цифр составляющих число. В качестве параметра функции передаётся обрабатываемое число. Создайте процедуру MAP
, которая получает в качестве параметров через стек длину массива, адреса двух массивов одинаковой длины и функцию, которую она применяет к каждому элементу первого массива. Результат применения функции записывается в соответствующий элемент второго массива. В основной программе вызовите процедуру MAP
для исходного массива {90, 120, 411, 172}, массива для результатов и функции SUM_DIG
. Массив для результатов такого же размера следует объявить в секции неинициализированных данных. После вызова процедуры следует распечатать на консоль массив результатов.