Найти сумму элементов массива - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, очень нужно, найти сумму элементов массива. На C++ Builder.

Решение задачи: «Найти сумму элементов массива»

textual
Листинг программы
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#include <stdio.h>
 
#define SIZE 10
 
int array_sum(int *data, int length)
{
        int sum ;
 
        asm
        {
                xor     ebx, ebx
                mov     ecx, length
                jecxz   metka
                mov     esi, data
                cld
        cykl:   lodsd
                add     ebx, eax
                loop    cykl
        metka:  mov     sum, ebx
        }
        return sum ;
}
 
#pragma argsused
 
int main(int argc, char* argv[])
{
        int array[SIZE] = {0,1,2,3,4,5,6,7,8,9} ;
 
        printf("%i", array_sum(array, SIZE)) ;
        return 0;
}
//---------------------------------------------------------------------------

Объяснение кода листинга программы

  1. Объявление функции array_sum, которая принимает два аргумента: указатель на массив и его длину.
  2. Инициализация переменной sum в функции array_sum, которая будет хранить сумму элементов массива.
  3. Объявление блока кода на ассемблере с помощью директивы #asm.
  4. Инициализация регистра ebx в качестве счётчика суммы элементов массива.
  5. Передача в качестве аргумента в функцию mov регистра ecx, который содержит длину массива.
  6. Проверка условия jecxz metka, которое проверяет, равен ли счётчик нулю. Если это так, то выполнение программы переходит к метке metka.
  7. Передача в качестве аргумента в функцию mov регистра esi, который содержит указатель на массив.
  8. Установка флага направления переноса в cld, чтобы обеспечить чётный порядок выполнения команд.
  9. Цикл cykl, который выполняется до тех пор, пока счётчик не станет равным нулю. В каждой итерации выполняется команда lodsd, которая загружает в регистр eax следующий элемент массива.
  10. Регистры ebx и eax участвуют в операции сложения add ebx, eax, увеличивая значение sum.
  11. Команда loop cykl используется для уменьшения счётчика на единицу после каждой итерации цикла.
  12. Метка metka, на которую выполняется переход, если счётчик равен нулю.
  13. Вывод значения переменной sum с помощью функции printf в функции main.
  14. Инициализация массива array в функции main с помощью присваивания элементов значениям 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
  15. Вывод суммы элементов массива с помощью функции printf в функции main.
  16. Возврат значения 0 из функции main, чтобы указать, что программа успешно завершилась.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы