Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел - Assembler
Формулировка задачи:
Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел. Требуется вычислить среднее арифметическое их отношения сумм четных и нечетных элементов
Решение задачи: «Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел»
textual
Листинг программы
LOCALS .model small .stack 100h .data A dw 1, 3, 5, 7 , 8, 10 LenA dw ($-A)/2 B dw 16, 30, 55, 7 , 8, 10, 17, 22, 70 LenB dw ($-A)/2 C dw 15, 23, 52, 17 , 81, 10 LenC dw ($-A)/2 Result dw ? .code main proc mov ax, @data mov ds, ax mov bx, 0 ;сумма отношений lea si, A mov cx, LenA call Ratio add bx, ax lea si, B mov cx, LenB call Ratio add bx, ax lea si, C mov cx, LenC call Ratio add bx, ax ;вычисление среднего арифметического отношений mov ax, bx mov dx, 0 mov bx, 3 div bx ;сохранение результата mov Result, ax mov ax, 4C00h int 21h main endp Ratio proc push bx push cx push dx push si ;вычисление сумм чётных и нечётных элементов массива mov bx, 0 ;сумма чётных элементов mov dx, 0 ;сумма нечётных элементов @@For: lodsw test ax, 1 jnz @@Odd add bx, ax jmp @@Next @@Odd: add dx, ax @@Next: add si, 2 loop @@For ;вычисление отношения mov ax, bx mov bx, dx mov dx, 0 div bx pop si pop dx pop cx pop bx ret Ratio endp end main
Объяснение кода листинга программы
- Задание локальных переменных:
LOCALS
- Определение модели памяти:
.model small
- Определение размера стека:
.stack 100h
- Определение массивов A, B, C и их длин (LenA, LenB, LenC)
- Объявление переменной Result
- Начало кода исполняемой программы:
main proc
- Загрузка базового адреса сегмента данных в регистр ax и затем в регистр ds
- Инициализация регистра bx (переменной для суммы отношений)
- Вызов подпрограммы Ratio для массива A и добавление результата к переменной bx
- Вызов подпрограммы Ratio для массива B и добавление результата к переменной bx
- Вызов подпрограммы Ratio для массива C и добавление результата к переменной bx
- Вычисление среднего арифметического отношений и сохранение результата в переменной Result
- Завершение программы и освобождение памяти Подпрограмма Ratio:
- Сохранение регистров bx, cx, dx, si на стеке
- Вычисление суммы четных и нечетных элементов массива
- Вычисление отношения суммы четных элементов к нечетным
- Восстановление регистров и возврат из подпрограммы
Замечание: В строках, где используется команда
рет
означает, что происходит возврат из подпрограммы и восстановление значений регистров.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д