Задан массив из пяти целых чисел, найти сумму квадратов этих чисел - Assembler

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

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

Помогите пожалуйста написать программу на ассемблера NASM, вот такое задание:Задан массив из пяти целых чисел, необходимо найти сумму квадратов этих чисел, вычисление квадрата числа оформить в виде процедуры. Заранее спасибо=)

Решение задачи: «Задан массив из пяти целых чисел, найти сумму квадратов этих чисел»

textual
Листинг программы
%include "io.inc"
 
section .data
    A   dd  123, 456, 789, 1011, 1213
    N   equ ($-A)/4
 
section .bss
    Sum resd    1
 
section .text
global CMAIN
 
sqr:
        push    ebp
        mov     ebp,    esp
        mov     eax,    [ebp+8]
        imul    eax,    eax
        pop     ebp
ret     4
 
CMAIN:
 
    mov     ecx,    N
    lea     esi,    [A]
    xor     ebx,    ebx
    .forSumSqr:
            lodsd
            push    eax
            call    sqr
            add     ebx,    eax
    loop    .forSumSqr
    mov     [Sum],  ebx
    PRINT_STRING    'Result: '
    PRINT_DEC   4, [Sum]
 
    xor eax, eax
    ret

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

  1. Объединение (include) файла io.inc, который содержит определения функций вывода на экран информации.
  2. Определение данных (section .data):
    • Переменная A типа doubleword (dd), содержащая массив из пяти целых чисел: 123, 456, 789, 1011, 1213.
    • Переменная N типа word (equ), которая содержит количество элементов в массиве A (5).
  3. Определение буферной переменной (section .bss):
    • Переменная Sum типа resd, которая будет содержать сумму квадратов чисел из массива A.
  4. Определение кода (section .text):
    • Глобальная функция CMAIN, которая является точкой входа в программу.
    • Функция sqr, которая вычисляет квадрат числа, помещенного в регистр eax.
  5. В функции CMAIN:
    • Переменная ecx инициализируется значением N.
    • Переменная esi указывает на начало массива A.
    • Переменная ebx инициализируется нулем и будет использоваться для накопления суммы квадратов чисел.
    • Используется цикл .forSumSqr для перебора всех элементов массива A:
    • Каждый элемент массива помещается в регистр eax.
    • Вызывается функция sqr для вычисления квадрата числа в регистре eax.
    • Результат (квадрат числа) добавляется к значению переменной ebx.
    • Значение переменной Sum записывается в буферную переменную Sum.
    • Выводится сообщение 'Result: ' и значение переменной Sum.
  6. Конец программы:
    • Переменная eax инициализируется нулем.
    • Возврат из функции CMAIN.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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