Сумма делителей - Assembler
Формулировка задачи:
Привет. В задачке было 2 условия: (1) Кол-во делителей - я сделал, (2) Сумма делителей - я не сделал.
Помогите пожалуйста с кодом именно для 2 условия, что нужно дополнить или как дописать
Вот то, что я написал. Для 1 - ого условия оно работает( но кириллица сбилась почему-то :С )
%TITLE "‚*и Є®¬¬Ґ*в*аЁ© Їа®Ја*¬¬л" INCLUDE IO.ASM MODEL small ST1 SEGMENT ;ЋЇЎ‘*«Ў ‘ҐЈ¬Ґ*’ ‘’ҐЄ*; DB 128 DUP(?) ST1 ENDS DATA SEGMENT A dw ? S dw ? k dw ? mess1 db 'a = $' mess2 db 'kol-vo delitelei : $' mess3 db 'summa delitelei : $' DATA ENDS CODE SEGMENT ;®’Єђ›«Ў ‘ҐЈ¬Ґ*’ Є®¤*; ASSUME SS:ST1,DS:DATA,CS:CODE ;‘ўџ§*«Ў ђҐЈЎ‘’ђ®ў›Ґ ‘ҐЈ¬Ґ*’› ‘ ‘ҐЈ¬Ґ*’*¬Ў; Start: push ds sub ax, ax push ax mov ax, data mov ds, ax lea Dx, mess1 outstr inint ax mov A, ax mov bx, A mov cx, bx ; i xor si, si ; s L1: mov ax, bx ; ax := A cwd ; а*биҐаЁвҐ«м ¤Ґ«Ё¬®Ј® dx:ax idiv cx ; з*бв*®Ґ ў ax, ®бв*в®Є ў dx cmp dx, 0 ; or dx,dx ; if (dx = 0) jnz L2 ; then jnz = > if net 0 inc si ; inc(s) L2: loop L1 ; for i := n downto 1; loop umpravlyet po cx mov S, si ; s:= si; lea Dx, mess2 outstr outint S newline Exit: finish ENDS END Start
Помогите пожалуйста. До завтра надо сдать
Решение задачи: «Сумма делителей»
textual
Листинг программы
%TITLE "В*ш комме*т*рий прогр*ммы" INCLUDE IO.ASM MODEL small STK SEGMENT DB 128 DUP(?) STK ENDS DATA SEGMENT A dw ? S dw ? k dw ? mess1 db 'a = $' mess2 db 'kol-vo delitelei : $' mess3 db 'summa delitelei : $' DATA ENDS CODE SEGMENT ASSUME SS:STK,DS:DATA,CS:CODE Start: mov ax,data mov ds,ax lea Dx,mess1 outstr inint ax mov A,ax mov cx,bx; i xor si,si; s xor di,di; k L1: mov ax,A; ax := A cwd; рaсшеритель делимого dx:ax idiv cx; чaстное в ax, остаток в dx or dx,dx; if (dx = 0) jnz L2; then jnz = > if net 0 inc si ;inc(s) add di,cx L2: loop L1; for i := n downto 1; loop umpravlyet po cx mov S,si ; s:= si; mov K,di lea Dx,mess2 outstr outint S newline lea Dx,mess3 outstr outint K newline Exit: finish ENDS END Start
Объяснение кода листинга программы
- Объединение сегментов данных и кода
- Переменная A используется для хранения делимого числа
- Переменная CX используется для хранения количества итераций цикла
- Переменная BX используется для хранения делителя
- Переменная SI используется для хранения суммы делителей
- Переменная DI используется для хранения остатка от деления
- Цикл выполняется n раз, где n - количество делителей
- Если остаток от деления равен нулю, то цикл продолжается
- Переменная SI увеличивается на единицу после каждой итерации цикла
- Переменная DI увеличивается на CX после каждой итерации цикла
- После завершения цикла, переменная SI содержит сумму делителей
- Переменная S содержит сумму делителей
- Переменная K содержит количество делителей
- Вывод сообщения
kol-vo delitelei :
и числа S на экран - Вывод сообщения
summa delitelei :
и числа K на экран - Код завершается и выполняется функция finish
- Переменная DS содержит сегмент данных
- Переменная ES содержит сегмент данных
- Переменная AX используется для передачи информации в функцию outstr
- Переменная CX используется для передачи информации в функцию outint
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д