А что, собственно, мешает анализировать t0^t1^...t7 - ксор всех тетрад? Если хотя бы пара одинакова, то должен быть нуль, иначе - нет, верно?
medstrax1 Последние 3 команды вроде можно заменить на: Код (Text): DEC EAX CDQ XCHG EAX,EDX если не ошибаюсь, будет на 2 байта короче.
PSR1257 сперва надо подготовить все возможные комбинации, потом поксорить попарно, потом проэндить в кучу. я даж алгос написал, но ТС еще на первой странице сказал, что решением от persicum он удовлетворен (кстати, красивое решение). не пойму о чем спор уже 4ую страницу?
Код Black_mirror с циклом можно чуть улучшить, если заменить NEG CL SBB EAX,EAX NOT EAX на cmp cl,1 sbb eax,eax
medstrax1 С POPCNT у меня пока только такое безобразие получается размером в 59 байт, на правильность не проверял: Код (Text): or edx,-1 mov cl,4 btr dx,ax repeat 7 shl eax,cl btr dx,ax end repeat popcnt eax,edx cmp al,25 sbb eax,eax
Или вот такое, размером в 57 байт, тоже не проверял: Код (Text): or edx,-1 mov cl,4 btr edx,eax repeat 7 shl eax,cl btr edx,eax end repeat shrd eax,edx,16 and eax,edx popcnt eax,eax cmp al,9 sbb eax,eax
Блин, какие все тут крутые, бедный дельфоасмер persicum сгорает от стыда... Ну ни че, вот рекордное по простоте понимания решение без битовых операций, тока простая логика Код (Text): mov ebx,eax //origin mov cl,4 mov edi,0x11111111 //global sum ----repeat 7 times---- ror eax,cl mov edx,eax xor edx,ebx mov esi,edx //local sum shr edx,1 or esi,edx shr edx,1 or esi,edx shr edx,1 or esi,edx and edi,esi -----end repeat----- mov eax,edi xor eax,0x11111111 neg eax sbb eax,eax
KeSqueer Там нужен только флаг cf поэтому можно использовать либо cmp eax,1 либо sub eax,1. Размер одинаковый, но на 1 инструкцию меньше. логика такая Код (Text): if eax=0 then cf=1 else cf=0
хехе, вариант с вращением регистра меня тоже заинтересовал и я привел простое, без наворотов и крутизны, решение
persicum В твоём решении кода наворочено в 2 раза более чем нужно. Во первых повторять 7 раз нету никакого смысла, достаточно всего 4. Во вторых флаг можно хранить в старшем разряде тетрады, тогда локальные суммы можно подсчитывать так: Код (Text): lea esi,[edx*3] or esi,edx lea edx,[esi*5] or esi,edx В общем код требуется хорошо почистить.