Д.д. Нужен алгоритм,опти=(меньше кода),который делает следующее: Пусть AX= 0101 0101 1010 1010 после преобразования: AX= 0101 0101 1010 1010 . (это специально подобрал). Суть : бит 00H "переехал" в положение 0FH бит 01H ------//------------- 0EH .... бит 07H -----//----------08H .... бит 0FH----//------00H Помоги Вам и мне Бог. Cпасибо.
Короче меньше кода: )) Код (Text): xchg eax,ebx xor eax,eax inc eax .1: ror ebx,ebx adc eax,eax jnc .1
профи ^^^ мой вареант (на много дленее) Код (Text): xor ebx,ebx mov ecx,31 xor edx,edx @@: bt eax,cl jnc .zero bts ebx,dl .zero: inc edx dec ecx jns @b xchg ebx,eax нимного подумаф Код (Text): mov ecx,31 @@: bt eax,cl jnc .zero bts ebx,1 .zero: shl ebx,1 dec ecx jns @b xchg ebx,eax
Код (Text): mov ecx,31 Код (Text): xor ecx,ecx mov cl,31 Такая замена один байт экономит, если о месте говорить)
Код (Text): mov ecx,31 @@: bt eax,cl rcl ebx,1 dec ecx jns @@ xchg ebx,eax Вот так наверное твою можно перевразировать... если далеко не заморачиваться..
см. книжку Algorithms for programmers - там много подобных задачек разбирается... там же рядом bitwizardry - готовые реализации всяких трюков над битами
Proteus Не хочу показаться противным,но не работает. FreeManCPM Аналогично. Т.к не нахожу oпкодика для BT r/m16,r8 RElf Cпасибо (уже на винте).Но даже не знаю...разбирусь ли в С-"тарабарщине" .
Код (Text): а с ror ebx, 1 ? Эх... Опечатался.... как всегда))) p.s. @b это переход на предыдущую локальную метку. То бишь на @@ А в командой ты может процессор указать забыл. Написать в начале что-нибудь типа .586 или .686
ну сдвинь на пару байтов Otebebe, тасм говно, под него кодят тока в вузах, юзай фасм или на худой конец масм(заранее извеняюсь перед поклоннекаме продукта мелкосовта)