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