Online Compiler Nasm

extern io_get_dec, io_print_dec section .bss prev dword 1 section .text global foo global main foo: push ebp mov ebp, esp sub esp, 4 mov [ebp - 4], 0 .L1: cmp [ebp + 8], 0 je .end1 mov eax, [ebp + 12] mov ecx, [ebp + 8] div ecx mov [ebp + 12], eax add [ebp - 4], edx jmp .L1 .end1: mov eax, [ebp - 4] leave ret main: call io_get_dec mov ebx, eax call io_get_dec mov esi, eax mov edi, 0 .L2: cmp prev, ebx je .end2 mov prev, ebx push ebx push esi call foo add esp, 4 add edi, eax mov ebx, eax jmp .L2 ;while smth push k push n ;call foo .end2: mov eax, edi call io_print_dec xor eax, eax
1) Этот код вычисляет сумму остатков от деления в последовательности, пока значение не стабилизируется. Функция `foo` суммирует остатки от деления второго аргумента на первый, пока первый не станет нулём. В `main` считываются два числа, и в цикле вызывается `foo`, пока значение `ebx` не перестанет меняться.

2) Обрати внимание, что в функции `foo` используется инструкция `div`, которая делит `edx:eax` на операнд. Убедись, что `edx` обнулён перед делением, иначе может возникнуть ошибка.  
Также проверь, как обновляется `ebx` в цикле `main` — условие выхода зависит от глобальной переменной `prev`, которая сравнивается с `ebx`.