Online Compiler Nasm

extern scanf, printf section .data fmt_in db "%u %u %u %u", 0 fmt_out db "%u", 10, 0 section .bss nums resd 4 section .text global main main: push nums+12 push nums+8 push nums+4 push nums push fmt_in call scanf add esp, 20 mov eax, [nums] mov ebx, [nums+4] call gcd mov ebx, [nums+8] call gcd mov ebx, [nums+12] call gcd push eax push fmt_out call printf add esp, 8 xor eax, eax ret gcd: test ebx, ebx jz .end xor edx, edx div ebx mov eax, ebx mov ebx, edx jmp gcd .end: ret
1) Этот код считывает четыре беззнаковых числа, вычисляет их наибольший общий делитель (НОД) последовательно для всех чисел и выводит результат.

2) Обрати внимание, что в процедуре `gcd` используется инструкция `div ebx`, но перед этим не устанавливается `edx` в ноль для первого вызова — это может вызвать ошибку.  
   Также учти, что адреса в стеке передаются в `scanf` в порядке, обратном считываемым числам.