section .data
fmt_in db '%d %d %d %d %d %d', 0
fmt_out db '%d', 0
section .bss
N resd 1
M resd 1
K resd 1
D resd 1
X resd 1
Y resd 1
section .text
global main
extern scanf, printf
main:
push ebp
mov ebp, esp
; ---------- ВВОД ----------
push Y
push X
push D
push K
push M
push N
push fmt_in
call scanf
add esp, 28
; ---------- УРОЖАЙ ----------
mov eax, [N]
imul eax, [M]
imul eax, [K]
mov ebx, [D]
xor edx, edx
div ebx
; eax = total / D, edx = total % D
; ---------- КОРОБКИ: total / D + (edx > 0 ? 1 : 0) ----------
; edx = остаток, превращаем в 1 если >0, иначе 0
neg edx
sbb edx, edx ; edx = -1 если остаток >0, иначе 0
neg edx ; edx = 1 если остаток >0, иначе 0
add eax, edx
mov ecx, eax ; ecx = всего коробок
; ---------- ВРЕМЯ ----------
mov eax, [X]
imul eax, 60
add eax, [Y]
sub eax, 6*60 ; 360 минут = 6:00
sar eax, 31 ; eax = 0 если >=6, -1 если <6
not eax
and eax, 1 ; eax = 1 если ночь, 0 если день
mov edx, eax
; ---------- ЗАДЕРЖАННЫЕ ----------
; всего коробок ecx, номера 0..ecx-1
; кратные 3: 0,3,6,... → количество = (ecx + 2) / 3
mov eax, ecx
add eax, 2
xor edx, edx
mov ebx, 3
div ebx ; eax = (ecx + 2) / 3
; если ночь → задержанные 0
mov ebx, eax
mov eax, [X]
sub eax, 6
sar eax, 31
not eax
and eax, 1
xor eax, 1 ; eax = 1 если день, 0 если ночь
imul ebx, eax ; ebx = задержанные (0 если ночь)
; ---------- ПРОПУЩЕННЫЕ ----------
sub ecx, ebx
; ---------- ВЫВОД ----------
push ecx
push fmt_out
call printf
add esp, 8
xor eax, eax
mov esp, ebp
pop ebp
ret