bogrus Примерно 0,972 микроватт-секунд мощности (CPU2Ghz,60W). Сколько в микрокаллориях затрудняюсь сказать.
alpet Ага, но переходы Вот, Uri предложил замечательное решение: Код (Text): mov ax,11110001b ror ax,1 sar ax,1 pushf rol ax,1 popf rcl ax,1 ret
IceStudent pushf-popf эквивалентно использованию дополнительного регистра (точнее переменной в стеке) помимо eflags. С использованием доп. регистра все просто становится: Код (Text): mov ax, 01000h ;; получится 0008h ror ax, 3 mov bx, ax ror ax, 9 xor bx, eax and bx, 1 xor ax, bx rol ax, 9 xor ax, bx rol ax, 3 Хотя при этом 4 раза медленный циклосдвиг используется.
На си это делается ещё смешнее, выглядит так : a^=b^=a^=b; Траслируется в те же три xor команды. Но на практике это делать не нужно. Просто глупый выпендрёж. Обычный обмен работает быстрее. А xor вариант тормозит конвеер.
Вот код реверса порядка битов, из него легко можно получить идею как менять 2 бита не используя ничего кроме eflags и временного регистра АЛУ (test). Код (Text): test al, 81h jpe skip1 xor al, 81h skip1: test al, 42h jpe skip2 xor al, 42h skip2: test al, 24h jpe skip3 xor al, 24h skip3: test al, 18h jpe skip4 xor al, 18h skip4: вход и выход ес-но в al, никакие регистры не трогаются, а то что есть условные прыжки - плевать, т.к. они очень короткие и в очередь укладываются... p.s. почитал выше и понял, что Black_mirror меня опередил с идеей
Парни, смотрю понесло вас нетуда)) Я показал ей варинт на C++ и дизасм ентого варианта. Как и следовало ожидать она сказала мне мол "вы не знаете специфики языков программирования и лезите в такие дебри. ваш вариант не правильный! мне некогда". Вот такие дела Всем спасибо.