Online Compiler Nasm

extern io_get_dec, io_print_dec section .bss prev resd 1 section .text global foo global main foo: push ebp mov ebp, esp sub esp, 4 mov dword [ebp - 4], 0 .L1: cmp dword [ebp + 8], 0 je .end1 mov eax, dword [ebp + 12] mov ecx, dword [ebp + 8] div ecx mov edx, 0 mov dword [ebp + 12], eax add dword [ebp - 4], edx jmp .L1 .end1: mov eax, dword [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, 8 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` организует цикл с проверкой на повтор предыдущего значения.

2) Обрати внимание, что в функции `foo` регистр `edx` обнуляется после операции `div`, что стирает остаток от деления. Также проверь, как используется глобальная переменная `prev` — она сравнивается с регистром, но может потребоваться явное указание размера.