section .data
fmt_in db "%d %d %d", 0
fmt_out db "%d ", 0
nl db 10, 0
section .bss
N resd 1
K resd 1
M resd 1
used resb 12
section .text
extern scanf, printf
global main
main:
push ebp
mov ebp, esp
and esp, -16
push ebx
push esi
push edi
sub esp, 4
sub esp, 4
push M
push K
push N
push fmt_in
call scanf
add esp, 16
xor eax, eax
mov ecx, 12
lea edi, [used]
rep stosb
xor esi, esi
.pos_loop:
cmp esi, [K]
jge .done
mov edi, 1
.cand_loop:
movzx eax, byte [used + edi]
test eax, eax
jnz .next_cand
mov eax, [N]
sub eax, esi
dec eax
mov ecx, [K]
sub ecx, esi
dec ecx
test ecx, ecx
jz .perm_one
mov ebx, 1
.perm_loop:
imul ebx, eax
dec eax
dec ecx
jnz .perm_loop
jmp .perm_done
.perm_one:
mov ebx, 1
.perm_done:
cmp [M], ebx
jle .pick
sub [M], ebx
.next_cand:
inc edi
jmp .cand_loop
.pick:
mov byte [used + edi], 1
sub esp, 8
push edi
push fmt_out
call printf
add esp, 16
inc esi
jmp .pos_loop
.done:
sub esp, 12
push nl
call printf
add esp, 16
add esp, 4
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
xor eax, eax
ret