По формуле члена ряда найти сумму первых 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
+ax
4.3. Происходит уменьшениеcx
на 1 (используя команду LOOP) и еслиcx
не равно 0, цикл продолжается - Когда цикл завершается, значение суммы сохраняется в переменной
Sum
- Программа завершается командами:
ax
устанавливается в 4C00h для завершения программы- Происходит вызов 21h прерывания для завершения программы
Итак, программа вычисляет сумму первых 13 членов ряда с использованием цикла и сохраняет эту сумму в переменной
Sum
.