Online Compiler Nasm

%include "io.inc" extern io_get_dec extern io_print_dec extern io_newline section .text global main main: call io_get_dec mov ebx, eax ; a call io_get_dec mov esi, eax ; b call io_get_dec mov edi, eax ; c call io_get_dec mov ebp, eax ; d sub ebx, esi ; ebx = a - b mov eax, ebp ; eax = d xor edx, edx div edi ; edx = d mod c mov eax, edi ; eax = c sub eax, edx ; c - (d mod c) xor edx, edx div edi ; edx = (c - (d mod c)) mod c mov eax, ebx add eax, edx ; edx = a - b + (c - (d mod c)) mod c call io_print_dec call io_newline xor eax, eax ret
1) Этот код вычисляет выражение `(a - b) + ((c - (d mod c)) mod c)`, где `a, b, c, d` — целые числа, введённые пользователем.

2) Подсказки:
- Обрати внимание, что инструкция `div edi` делит `edx:eax` на `edi`, результат: частное в `eax`, остаток в `edx`. Перед каждым `div` обнуляй `edx`, если делимое 32-битное.
- Запомни, что `(c - (d mod c)) mod c` математически эквивалентно `(-(d mod c)) mod c`, что является взятием остатка от отрицательного числа.