Online Compiler Nasm

section .text extern io_get_udec extern io_print_udec extern io_print_char extern io_newline global main main: call io_get_udec mov ecx, eax mov esi, 0 mov edi, 1 .loop: cmp ecx, 0 je .done call io_get_udec mov eax, eax mov ebx, eax call io_get_udec mov edx, eax mov eax, esi imul eax, edx mov ebp, eax mov eax, ebx imul eax, edi add eax, ebp mov esi, eax mov eax, edi imul eax, edx mov edi, eax dec ecx jmp .loop .done: push edi push esi call gcd add esp, 8 mov ebx, eax mov eax, esi xor edx, edx div ebx mov esi, eax mov eax, edi xor edx, edx div ebx mov edi, eax mov eax, esi call io_print_udec mov al, ' ' call io_print_char mov eax, edi call io_print_udec call io_newline xor eax, eax ret gcd: push ebp mov ebp, esp mov eax, [ebp+8] mov ebx, [ebp+12] .g: cmp ebx, 0 je .end xor edx, edx div ebx mov eax, ebx mov ebx, edx jmp .g .end: pop ebp ret
1) Этот код вычисляет сумму нескольких дробей. Сначала считывается количество дробей, затем для каждой дроби считываются числитель и знаменатель. В цикле выполняется сложение дробей, после чего результат сокращается с помощью НОД и выводится в виде несократимой дроби.

2) Обрати внимание, что при сложении дробей используется формула a/b + c/d = (a*d + c*b)/(b*d). Убедись, что понимаешь, как организовано хранение числителя и знаменателя текущей суммы в регистрах.
   После вычисления суммы дробей программа вызывает функцию gcd для нахождения общего делителя числителя и знаменателя. Проверь, правильно ли передаются аргументы в эту функцию.