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

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

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

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

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

textual
Листинг программы
  1. .386
  2. .model flat, stdcall
  3. .stack 4096
  4. ExitProcess proto, dwExitCode:dword
  5.  
  6. .data
  7. array word 4, 4, 4, 12, 33
  8.  
  9. .code
  10. main proc
  11.     mov esi, offset array
  12.     mov ecx, lengthof array
  13.     call findSum
  14.     invoke ExitProcess, 0
  15. main endp
  16.  
  17. findSum proc
  18.     push ebx
  19.     push edx
  20.     push ecx
  21.     push esi
  22.  
  23.     xor ebx, ebx
  24.     xor edx, edx
  25.  
  26. L1:
  27.     xor eax, eax
  28.     cmp word ptr [esi], 0
  29.     je L2
  30.     inc ebx
  31.     movzx eax, word ptr [esi]
  32.     push edx
  33.     mul word ptr [esi]
  34.     shl eax, 16
  35.     mov ax, dx
  36.     rol eax, 16
  37.     pop edx
  38.     add edx, eax
  39. L2:
  40.     add esi, type word
  41.     loop L1
  42.  
  43.     mov eax, edx
  44.     xor edx, edx
  45.     div ebx
  46.  
  47.     pop esi
  48.     pop ecx
  49.     pop edx
  50.     pop ebx
  51.     ret
  52. findSum endp
  53.  
  54. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы