Разработать программу на языке Ассемблер, выполняющую обработку одномерного массива - Assembler

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

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

Найти среднее арифметическое квадратов ненулевых элементов последовательности. Массив слов.

Решение задачи: «Разработать программу на языке Ассемблер, выполняющую обработку одномерного массива»

textual
Листинг программы
.386
.model flat, stdcall
.stack 4096
ExitProcess proto, dwExitCode:dword
 
.data
array word 4, 4, 4, 12, 33
 
.code
main proc
    mov esi, offset array
    mov ecx, lengthof array
    call findSum
    invoke ExitProcess, 0
main endp
 
findSum proc
    push ebx
    push edx
    push ecx
    push esi
 
    xor ebx, ebx
    xor edx, edx
 
L1:
    xor eax, eax
    cmp word ptr [esi], 0
    je L2
    inc ebx
    movzx eax, word ptr [esi]
    push edx
    mul word ptr [esi]
    shl eax, 16
    mov ax, dx
    rol eax, 16
    pop edx
    add edx, eax
L2:
    add esi, type word
    loop L1
 
    mov eax, edx
    xor edx, edx
    div ebx
 
    pop esi
    pop ecx
    pop edx
    pop ebx
    ret
findSum endp
 
end main

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

  1. Указываются используемые модели и сегменты: .386 .model flat, stdcall .stack 4096
  2. Определяется переменная-массив array типа word, длиной 4, с 5 элементами: [4, 4, 4, 12, 33].
  3. Определяется процедура main, в которой происходит инициализация указателя на массив, его длину и вызов процедуры findSum.
  4. Определяется процедура findSum, в которой происходит обработка элементов массива: 4.1. Создаются локальные переменные ebx, edx, ecx, esi, и сохраняются в стеке. 4.2. Инициализируются переменные ebx и edx нулевыми значениями. 4.3. Начинается цикл обработки элементов массива, который продолжается до тех пор, пока не встретится нулевой элемент. 4.4. Во время цикла выполняется операция умножения каждого не нулевого элемента массива и результат сохраняется в переменной edx. 4.5. После окончания цикла выполняется операция деления суммы на количество не нулевых элементов, и результат сохраняется в переменной eax. 4.6. Возвращается результат работы процедуры.
  5. Вызывается процедура findSum.
  6. Вызывается процедура ExitProcess с кодом выхода 0.
  7. Код завершается.

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

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