Найти сумму произведений индексов цикла - Assembler
Формулировка задачи:
Требуется найти сумму произведений индексов цикла. Т.е нужно создать двойной цикл, внутри цикла перемножить индексы и прибавить произведение к s.
Вот на делфи код
Вот что получилось на асм, не знаю, что делать дальше
s:=0; p:=1; for i:=n downto 1 do for j:=m downto 1 do begin p:=i*j; s:=s+p; end; writeln(s);
include io.asm sstack segment stack db 100 dup(?) sstack ends sdata segment a dw ? x dw ? i db ? k db ? m db ? n db ? s dw ? p dw ? sdata ends scode segment assume cs:scode,ds:sdata,ss:sstack start: mov ax, sdata mov ds,ax mov n,3 mov m,4 mov i,1 mov k,1 mov cx,3; mov s,0 ;obnulyaem summu mov p,1 ;nachalnoe proizvedeniye ravno 0 i1:mov bx,cx k1: mov ax,p mov ax,cx mul bx add add ax, ;; ;; cmp cx,1 jne i1 mov cx,bx ;schetchuk loop k1 mov cx,bx loop i1 finish scode ends end start
Никто не знает ассемблер?
Решение задачи: «Найти сумму произведений индексов цикла»
textual
Листинг программы
mov ebx,0 mov ecx,[n] mn: ; push ecx mov esi,ecx mov ecx,[m] mm: ; pop eax ; push eax mov eax,esi mul ecx add ebx,eax loop mm ; pop ecx mov ecx,esi loop mn
Объяснение кода листинга программы
- Вначале, значение переменной n (количество итераций первого цикла) сохраняется в регистре ecx.
- Затем, запускается цикл, который выполняется n раз.
- Внутри цикла, значение переменной m (количество итераций второго цикла) сохраняется в регистре ecx.
- Затем, второй цикл запускается столько раз, сколько указано в переменной m.
- Внутри второго цикла, результат умножения ecx и eax (где eax содержит значение переменной m) добавляется к переменной ebx (которая инициализирована нулем).
- После завершения второго цикла, значение переменной m сохраняется обратно в регистр ecx.
- После завершения первого цикла, значение переменной n сохраняется обратно в регистр ecx.
- Затем, происходит выход из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д