По формуле члена ряда найти сумму первых 13 членов - Assembler
Формулировка задачи:
Снова я , помогите с программой ( говоря простым языком , кто не занят ,или кого не затруднит , напишите ее -_-)
Команда LOOP. Обработка данных в цикле (без использования ветвлений)
По заданной формуле члена ряда с номером k: Ak=5•k+1 найти сумму первых 13 членов.
Решение задачи: «По формуле члена ряда найти сумму первых 13 членов»
textual
Листинг программы
LOCALS .model small .stack 100h .data Sum dw ? .code main proc mov ax, @data mov ds, ax mov bx, 0 ;сумма mov cx, 13 ;cx=k - номер члена ряда mov di, 5 @@For: mov ax, cx mul di ;Ak=ax=5*k+1 add ax, 1 add bx, ax ;S:=S+Ak loop @@For mov Sum, bx mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
- Выделяются переменные:
Sum- хранит сумму первых 13 членов ряда (16-битное беззнаковое целое)
- Инициализируется сегмент данных:
axзагружается адрес сегмента данных (@data)dsпринимает значениеaxдля установки сегмента данных
- Инициализируются начальные значения переменных:
bxустанавливается в 0 для хранения суммыcxустанавливается в 13 для представления номера члена рядаdiустанавливается в 5 (по-видимому для использования в вычислениях)
- Цикл для вычисления суммы первых 13 членов:
4.1. Вычисляется значение члена ряда:
ax=cx*di+ 1 4.2. Это значение добавляется к общей сумме:bx=bx+ax4.3. Происходит уменьшениеcxна 1 (используя команду LOOP) и еслиcxне равно 0, цикл продолжается - Когда цикл завершается, значение суммы сохраняется в переменной
Sum - Программа завершается командами:
axустанавливается в 4C00h для завершения программы- Происходит вызов 21h прерывания для завершения программы
Итак, программа вычисляет сумму первых 13 членов ряда с использованием цикла и сохраняет эту сумму в переменной
Sum.