Привет. Нет ли каких хитрых алгоритмов для вычисления остатка от деления не выполнения деление? Конкретно надо посчитать x=x mod 0xFFFFFFFE для 32-битного х; Желательно без условных переходов и SETcc... Если с переходом то можно что-нибудь типа: Код (Text): cmp eax,0FFFFFFFEh jb @@below sub eax,0FFFFFFFEh @@below: Без перехода сочинил такое: Код (Text): mov edx,eax xor ecx,ecx sub edx,0FFFFFFFEh adc eax,ecx adc eax,ecx Вопрос - какой из вариантов будет быстрее? Вообще хотелось бы как-нибудь улучшить второй вариант...
wsd - это не то. KeSqueer - я что-то подобное с SETcc придумал, но хочется без комплексных инструкций. Точнее желательно на одной арифметике. В общем почему мне мой вариант не нравится. Это дело надо запихнуть в Сишный исходник, а ADC там не напишеш. Вставку ассемблерную делать неохота - на крайний случай разве что. А компилятор лопух DIV прихает. Вот надо как-то извратиться...
http://www.cs.utk.edu/~vose/c-stuff/bithacks.html#ModulusDivision //хотя тут цикл есть - но в любом случае позновательно =)) http://www.azillionmonkeys.com/qed/adiv.html
nobodyzzz - спасибо, ущёл читать. На первый взгляд то что нужно. wsd - а что даст? Единицу как и должен.
cppasm Да я при анализе(0ffffffffh) что-то sub edx, -2 как в математике приравнял edx-(-2)=edx+2=add edx, 2 и у меня соответственно CF поднялся да прогнал два раза... надо мне наконец хорошо выспаться. сильно не ругайте