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 .finish call io_get_udec 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 .finish: 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 .done xor edx, edx div ebx mov eax, ebx mov ebx, edx jmp .g .done: pop ebp ret
1) Этот код вычисляет сумму нескольких дробей, введённых пользователем. Сначала считывается количество дробей, затем для каждой дроби считываются числитель и знаменатель. В цикле выполняется сложение дробей, после чего результат сокращается с помощью НОД и выводится в виде несократимой дроби.

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