Online Compiler Nasm

extern io_get_dec extern io_print_dec section .bss n resd 1 m resd 1 k resd 1 d resd 1 x resd 1 y resd 1 box resd 1 beet resd 1 r resd 1 cnt_without_last_box resd 1 cnt_last_box resd 1 ans resd 1 section .text global main main: call io_get_dec mov [n], eax call io_get_dec mov [m], eax call io_get_dec mov [k], eax call io_get_dec mov [d], eax call io_get_dec mov [x], eax call io_get_dec mov [y], eax mov eax, [n] imul eax, [m] imul eax, [k] mov [beet], eax ;beet - всего свекол xor edx, edx div dword [d] mov [box], eax mov [r], edx ;box - сколько всего полных коробок ;r - сколько в последней коробке add eax, 2 xor edx, edx mov ebx, 3 div ebx imul eax, 3 mov [cnt_without_last_box], eax ;cnt_without_last_box = (box + 2) / 3 * d add dword [box], 1 xor edx, edx mov eax, [box] mov ebx, 3 div ebx mov eax, edx add eax, 1 xor edx, edx mov ebx, 2 div ebx mov [cnt_last_box], ebx ;eax - добавляем элементы из последней коробки? ;cnt_last_box = (box % 3 != 0) * r ;box - сколько всего коробок imul eax, [cnt_last_box] add eax, [cnt_without_last_box] mov [ans], eax ;ans - ответ для ночи ;(ans && ночь) || (beet && день) sub dword [x], 5 ;если ночь - то отрицательное sar dword [x], 31 ;ночь x=-1, день x=0 add dword [x], 1 ;ночь x=0, день x=1 mov eax, [beet] imul eax, [x] mov [beet], eax sub dword [x], 1 neg dword [x] ;день x=0, ночь x=1 mov eax, [x] imul eax, [ans] add eax, [beet] call io_print_dec xor eax, eax ret
1) Этот код вычисляет количество свёкол, которые можно собрать за определённое время (день или ночь), учитывая размеры поля, вместимость коробок и другие параметры. В конце он выводит результат в зависимости от времени суток.

2) Обрати внимание на операции сдвига и условные преобразования для переменной `x` — они используются для выбора между дневным и ночным расчётом.  
Проверь, правильно ли обрабатывается остаток от деления при вычислении `cnt_last_box`, так как там используется деление на 2 после работы с остатком от деления на 3.