Повернуть реки(ммм...биты) вспять.

Тема в разделе "WASM.A&O", создана пользователем Otebebe, 11 сен 2007.

  1. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    Д.д.
    Нужен алгоритм,опти=(меньше кода),который делает следующее:
    Пусть AX= 0101 0101 1010 1010
    после преобразования:
    AX= 0101 0101 1010 1010 :lol: . (это специально подобрал).
    Суть :
    бит 00H "переехал" в положение 0FH
    бит 01H ------//------------- 0EH
    ....
    бит 07H -----//----------08H
    ....
    бит 0FH----//------00H
    Помоги Вам и мне Бог. :) Cпасибо.
     
  2. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Тебе по скорости или размеру ?
    Или сразу в книгу послать?
     
  3. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    8-).
    Неужто ж я не написал
    ?
    А в книгу...да! Посылайте.
     
  4. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Короче меньше кода: ))
    Код (Text):
    1.       xchg eax,ebx
    2.       xor   eax,eax
    3.       inc   eax
    4. .1:  ror   ebx,ebx
    5.       adc  eax,eax
    6.       jnc   .1
     
  5. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    профи ^^^
    мой вареант (на много дленее)
    Код (Text):
    1. xor ebx,ebx
    2. mov ecx,31
    3. xor edx,edx
    4. @@:
    5. bt eax,cl
    6. jnc .zero
    7. bts ebx,dl
    8. .zero:
    9. inc edx
    10. dec ecx
    11. jns @b
    12. xchg ebx,eax
    нимного подумаф
    Код (Text):
    1. mov ecx,31
    2. @@:
    3. bt eax,cl
    4. jnc .zero
    5. bts ebx,1
    6. .zero:
    7. shl ebx,1
    8. dec ecx
    9. jns @b
    10. xchg ebx,eax
     
  6. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    Proteus и FreeManCPM
    Имейте прекрасный день! :) Спасибо.
    Пошел думать.
     
  7. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    извиняюсь))
     
  8. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Код (Text):
    1. mov ecx,31
    Код (Text):
    1. xor ecx,ecx
    2. mov cl,31
    Такая замена один байт экономит, если о месте говорить)
     
  9. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Код (Text):
    1.         mov ecx,31
    2. @@:
    3.         bt eax,cl
    4.         rcl ebx,1
    5.         dec ecx
    6.         jns @@
    7.         xchg ebx,eax
    Вот так наверное твою можно перевразировать... если далеко не заморачиваться..
     
  10. RElf

    RElf New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2004
    Сообщения:
    159
    см. книжку Algorithms for programmers - там много подобных задачек разбирается...
    там же рядом bitwizardry - готовые реализации всяких трюков над битами
     
  11. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    Proteus
    Не хочу показаться противным,но не работает.
    FreeManCPM
    Аналогично.
    Т.к не нахожу oпкодика для BT r/m16,r8 :dntknw:
    RElf
    Cпасибо (уже на винте).Но даже не знаю...разбирусь ли в С-"тарабарщине" :).
     
  12. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    а с ror ebx, 1 ?
     
  13. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
    Код (Text):
    1. а с ror ebx, 1 ?
    Эх... Опечатался.... как всегда)))

    p.s. @b это переход на предыдущую локальную метку. То бишь на @@
    А в командой ты может процессор указать забыл. Написать в начале что-нибудь типа .586 или .686
     
  14. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    помоему исключительно на предыдущую безымянную @@, а не на любую предыдущую.
     
  15. _G3

    _G3 New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    41
    Адрес:
    Russia
    автор вроде как AX просил перевернуть, а не EAX
     
  16. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    ну сдвинь на пару байтов
    Otebebe, тасм говно, под него кодят тока в вузах, юзай фасм или на худой конец масм(заранее извеняюсь перед поклоннекаме продукта мелкосовта)
     
  17. Otebebe

    Otebebe New Member

    Публикаций:
    0
    Регистрация:
    3 апр 2006
    Сообщения:
    91
    Простите господа. Отвечу позже сейчас...бегу...:lol: