Online Compiler Nasm

section .data fmt_in: db "%u %u", 0 fmt_out: db "%u", 10, 0 N: dd 0 K: dd 0 section .text global main extern printf extern scanf main: push ebp mov ebp, esp ;----------------------------- push K push N push fmt_in call scanf add esp, 12 ;----------------------------- mov ebx, [K] mov cl, bl mov eax, 1 shl eax, cl dec eax mov edi, eax ;----------------------------- xor ecx, ecx xor esi, esi first: mov eax, 32 sub eax, ebx cmp ecx, eax ja end ;----------------------------- mov eax, [N] shr eax, cl and eax, edi ;----------------------------- cmp eax, esi jbe max mov esi, eax max: inc ecx jmp first end: push esi push fmt_out call printf add esp, 8 ;---------------------------- mov esp, ebp pop ebp xor eax, eax ret
1) Этот код считывает два беззнаковых целых числа N и K, затем находит максимальное значение среди всех K-битных подмасок числа N при сдвиге.

2) Подсказки:
- Обрати внимание, что `shl eax, cl` создаёт маску из K единиц в младших битах (например, для K=3 маска будет 0b111).
- Цикл `first` перебирает все возможные позиции окна длиной K бит внутри 32-битного числа N, используя сдвиг вправо и применение маски.