bogrus, ты что-то напутал Вся изюминка в dec eax. Если декремент убрать, то нужны лишние навороты для обработки x = 2<sup>2k</sup>. И чего-то я вообще не понял смысла mov ecx,1 если затем идет or cl,1.
leo Это точно, не задачка, а сплошные подводные камни Это чтобы из 0 получить 4, но все-равно к черту т.к. тогда летят уже округленные числа и все числа от 40000000h до -1 сводятся к 1, а не 4
Тривиальное решение, зато короткое (EAX вход, EDX выход) Код (Text): 31 D2 xor edx, edx 42 inc edx @loop: 01 D2 add edx, edx ;lea edx, [edx*4] 01 D2 add edx, edx ; 39 C2 cmp edx, eax 72 F8 jb @loop
BLOb 40000001h зацикл , я уже собрал некоторые числа, на которых стоит ловить подводные камни Код (Text): 0 1 4 25555555h 40000000h 40000001h 55555555h 80000001h -1
Если бы найти хороший способ реверса бит, то выделить младший единичный бит просто, а вот старшие ... Код (Text): mov ecx,eax neg eax and eax,ecx