volodya неее ) вариант первый: @@ shr eax, 1 jp @b вариант второй: bsf ecx, eax shr eax, cl и больше никаких переходов )
вообще-то условию задачи удовлетворяет и такое решение Код (Text): void do_n(unsigned n, unsigned *k, unsigned *q) { __asm { mov eax, n mov edx, k shr eax, 1 mov [edx], 1 mov edx, q mov [edx], eax } }
Меня, пожалуйста, на "ты". Будь добер , приведи мне полную программу с твоей процедурой для числа 105.
Код (Text): #include <stdio.h> void do_n(unsigned n, unsigned *k, unsigned *q) { __asm { mov eax, n mov edx, k shr eax, 1 mov dword ptr [edx], 1 mov edx, q mov [edx], eax } } int main(int argc, char* argv[]) { unsigned n = 105, k, q; do_n(n, &k, &q); printf("k = %d; q = %d", k, q); return 0; }
Спасибо. А теперь, разреши спросить, ТЫ ВНИМАТЕЛЬНО ЧИТАЛ УСЛОВИЯ ЗАДАЧИ? Я ведь говорил - q должно быть НЕЧЕТНЫМ!
DaemoniacaL > Дык чётность по флагу P - это чётное количество единиц в двоичном представлении числа! volodya Вариант Код (Text): mov eax, n dec eax bsf ecx, eax shr eax, cl mov q, eax mov k, ecx Это полное решение - никаких циклов тут не нужно, но для некоторых чисал (например вида 2<sup>n</sup>-1) первый вариант (с циклом) будет быстрее.