Архитектура ЭВМ. Подпрограммы и стек. Даны три массива чисел - 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 на стеке
- Вычисление суммы четных и нечетных элементов массива
- Вычисление отношения суммы четных элементов к нечетным
- Восстановление регистров и возврат из подпрограммы
Замечание: В строках, где используется команда
рет
означает, что происходит возврат из подпрограммы и восстановление значений регистров.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д