Поломайте-ка голову ) Берем произвольное четырехбайтовое (32 бит) число. Представляем его как сумму других чисел, сумма факториалов которых дает начальное число, которое мы таким образом пытаемся представить. И, судя по http://math-prosto.ru/?page=pages/calculators/factorial_online.php , каждое из этих составляющих будет не больше 12 (т.е. занимать не более 4 бит, 13! = 6 227 020 800 и это уже больше 232), т.о. таких чисел максимум мы можем найти 8 (8×4=32 бит), ежели мы не смогли представить начальное число как меньше 8 таких маленьких чисел, "сжатие" не удалось. Т.е., разбираем на составные, к примеру, число 100500999 (32 бит) = 7!+8!+2!, например. Эти 3 числа каждое макс по 4 бита, соот-но, 4×3=12 бит они заняли, условно, места. В ЛолПаке я представлял начальное число как сумму других чисел, которые возводил в (фиксированную) степень. Не получилось ужимать. 12! = 479 001 600, для "описания" 232 таких чисел уже нужно ~9.
Я понимаю что эту "статью" надо было дополнять кодом ещё на момент написания,но у меня возникли некоторые обстоятельства Код на FASM Код (ASM): format PE console entry runpoint include 'win32axp.inc' section '.text' code readable executable runpoint: xor eax,eax xor edx,edx xor ebx,ebx prоcess_bytes: mov al,[group_byte+edx] and al,11b or bl,al shl bl,2 inc edx cmp edx,4 jz endprogram jmp prоcess_bytes endprogram: invoke ExitProcess,0 section '.data' data readable writeable group_byte db 0xC8,0xD2,0xF1,0xA9 section '.idata' import data readable writeable library kernel32,'kernel32.dll' import kernel32,\ ExitProcess,'ExitProcess'
Генерирование случайного байта Код на MASM32 Код (ASM): .686p option casemap:none .model flat,stdcall public start include include\windows.inc include include\kernel32.inc include include\msvcrt.inc includelib lib\kernel32.lib includelib lib\msvcrt.lib .data ? numbers db 100 dup(0) addr_number dword ? count byte ? result byte ? .code start: mov eax,offset numbers mov edx,offset addr_number mov dword ptr [edx],eax generate: invoke crt_rand xor ebx,ebx and al,3 cmp al,0 ;zero not use jz generate mov bl,byte ptr [result] or bl,al shl bl,2 mov result,bl bt bx,7 jc put_byte jmp generate put_byte: mov result,0 mov edx,dword ptr [addr_number] mov byte ptr [edx],bl inc edx inc byte ptr [count] mov addr_number,edx cmp byte ptr [count],100 jz stop_the_program jmp generate stop_the_program: push 5000 call Sleep push 0 call ExitProcess end P.S Мне MASM нравится больше чем FASM