Циклический сдвиг

Тема в разделе "WASM.ASSEMBLER", создана пользователем Honorary_BoT, 20 мар 2009.

  1. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Доброе время суток.
    Извините, если туплю, но что-то ничего хитрого на ум не приходит.
    Допустим есть у меня 8битный al. Можно ли хитро как-то осуществить циклический сдвиг внутри него отличного от 8 числа бит? Например, циклически сдвинуть влево только младшие 4 бита, а остальные без изменения оставить...
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    del
    Плохо читаю..
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Honorary_BoT
    Одной командой нельзя: они работают с регистром целиком.
     
  4. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Да не вопрос, давайте многими командами =) Кстати, к примеру
    00001011 сдвигаем 4, да, а вот на
    ^^^ эти биты мне кстати будет плевать, что там изгадится или нет, главное чтоб
    XXXX0111 получилось.
     
  5. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    mov al,N
    mov ah,al
    and ax,0f0fh
    mov ecx,X ;Shift
    @@:
    shl al,1
    cmp al,0fh
    setg al
    loop @B
    and al,0fh
    or al,ah
     
  6. ozzman2k

    ozzman2k New Member

    Публикаций:
    0
    Регистрация:
    7 июл 2008
    Сообщения:
    10
    [стер свой бред] =)
     
  7. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    ozzman2k
    Не понял...
    Допустим eax=12345678h
    после bswap eax=78563412h
    после shr eax,14h eax=785h
     
  8. scf

    scf Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    386
    гммм что-то вроде
    shl al, 2
    mov ah, al
    shr ah, 5
    and ah, 3
    or al, ah

    циклический сдвиг влево пяти бит на два бита
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    MirrorBlack
    setg al установит весь al в 1 или 0, не только нулевой бит.
     
  10. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    KeSqueer
    Ступил...
    mov al,N
    mov ah,al
    and ax,0f0fh
    mov ecx,X ;Shift
    @@:
    shl al,1
    cmp al,0fh
    setg dl
    or al,dl
    loop @B
    and al,0fh
    or al,ah
     
  11. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Эм, это конечно круто. Но я заведомо не буду знать, сколько бит из регистра мне надо будет циклически сдвигать. Вдруг 5 из 8. Или я недопонял код? С четырьмя-то да, красиво получается...
     
  12. MirrorBlack

    MirrorBlack Алексей

    Публикаций:
    0
    Регистрация:
    21 июн 2008
    Сообщения:
    249
    Адрес:
    Moscow
    Honorary_BoT
    Дык тебе и дали реализацию "например".
    У меня - чтоб алгоритм прочуйствовать, у scf наиболее красиво (но без сохранения старших 4 бит).

    Кстати, если не секрет - какая от этого практическая польза?
     
  13. Honorary_BoT

    Honorary_BoT New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    87
    Уааа, да, я тупанул =) Спасибо всем =)