В цикле найти сумму целочисленного ряда - Assembler
Формулировка задачи:
Требуется помощь с заданием. Заранее спасибо!
Тема: Циклы сумма
Задание:
Найти сумму, заданных формулой n/2, где n=2,4,6,8,10
Примерно я пытался сделать. Вот что получилось(но это неправильно!):
masm model small .stack 256 .data .code .startup jmp main include io1.inc main: mov cx,10 mov ax,00 mov bx, 2 ;шаг summa: cmp dx,cx add ax, bx ;шаг mov dx,ax add dx,ax jnp summa mov ax,dx mov dh,1 mov dl,5 call ProcOutNum .exit end
Решение задачи: «В цикле найти сумму целочисленного ряда»
textual
Листинг программы
masm model small .stack 256 .data .code .startup jmp main include io1.inc main: mov bx, 2 ;делитель mov si, 0 ;сумма mov di, 2 ;n mov cx, 10 ;последний n summa: mov ax, di ;ax=n/2 mov dx, 0 div bx add si, ax ;summa=summa+n/2 add di, 2 ;n=n+2 cmp di, cx jbe summa mov ax,dx mov dh,1 mov dl,5 call ProcOutNum .exit end
Объяснение кода листинга программы
- Устанавливается значение
2
в регистр bx (делитель). - Устанавливается значение
0
в регистр si (сумма). - Устанавливается значение
2
в регистр di (n). - Устанавливается значение
10
в регистр cx (последний n). - Начинается цикл, помеченный как
summa
. - Значение
n/2
сохраняется в регистре ax. - Сумма в регистре si увеличивается на значение в регистре ax.
- Значение
2
добавляется к регистру di (увеличение n на 2). - Сравнивается значение в регистре di с значением в регистре cx (последний n).
- Если значение в регистре di меньше или равно значению в регистре cx, то происходит возврат к метке
summa
и выполняются шаги 6-9. - Если значение в регистре di больше значения в регистре cx, то цикл завершается.
- Значение из регистра dx копируется в регистр ax.
- Устанавливаются значения
1
и5
в регистры dh и dl соответственно. - Вызывается процедура ProcOutNum для вывода значения из регистра ax на экран.
- Завершение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д