Тупой впрос, но всё же.

Тема в разделе "WASM.BEGINNERS", создана пользователем OlegA11, 12 фев 2006.

  1. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Наверное глупость, но подскажите пожалуйста, как мне узнать поднят ли 31'ый бит eax?

    Заранее спасибо
     
  2. Error01

    Error01 New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2005
    Сообщения:
    30
    mov ebx,80000000h

    and ebx,eax

    cmp ebx,0

    je Bit31IsOne
     
  3. Error01

    Error01 New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2005
    Сообщения:
    30
    Посмотри книгу "Hacker's Delight" Henry S. Warren, Jr.

    Есть переведенное издание.

    Там таких тем полно.
     
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Код (Text):
    1. test eax,eax
    2. js   _rized
     
  5. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Код (Text):
    1. test eax, 80000000h
    2. jnz @ok




    если нет необходимости в сохранении значения регистра eax

    то можно еще так
    Код (Text):
    1. shr eax, 31
    2. jnz @ok
     
  6. asmasm

    asmasm New Member

    Публикаций:
    0
    Регистрация:
    16 янв 2006
    Сообщения:
    69
    Адрес:
    Uzbekistan
    А можно и так:



    shl eax,1

    jc Yes
     
  7. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    and eax, 80000000h

    jnz @ok



    тоже катит, но портит регистр
     
  8. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Я же узнал, спасибо. Но есть более лучшая комманда;

    bt eax,31 - и во флаге CARRY будет наш 31'вый бит
     
  9. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    И чем она лучше?
     
  10. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Меньше байт занимает, и регистр остаётся без изменений.
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlegA11

    Imho вариант cresta Фев 12, 2006 22:00:01 занимает меньше байт, регистр остается без изменения и требует меньше тактов.
     
  12. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    А он вообще не канает, т.к нужно узнать именно 31 биа, а test eax,eax

    js _rized

    Поверка на ноль.
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    OlegA11

    > "Поверка на ноль"

    [beep]

    Проверка на ноль это jz или je, а js - это проверка знака, т.е. старшего = 31-го бита eax
     
  14. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Сори не заметил, просто bt даёт возможность проверить не только 31-й бит, но и любой другой+не меняет значение регистра+мало занимает байт.
     
  15. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    "Нелюбовь" к bt имеет исторические корни. На i486 и первых пентиумах это была сложная (complex) инструкция с латентностью до 4 тактов. Эта же дурная традиция сохранена (точнее возрождена) и в Pentium 4. А вот в атлонах и P6 family, включая Pentium M, это простая 1-тактовая команда.

    Что касается размера, то он не такой уж и маленький - bt r32,imm8 занимает 4 байта.

    Для сравнения: test eax,eax и test al,imm8 - 2 байта; test ax,imm16 - 4; test eax,imm32 - 5 байтов; test r,imm с другими регистрами на 1 байт больше. Выводы делаем сами ;). Но для для проверки старшего (знакового) бита test r32,r32 ес-но предпочтительнее bt
     
  16. OlegA11

    OlegA11 New Member

    Публикаций:
    0
    Регистрация:
    12 фев 2006
    Сообщения:
    102
    Вобщем, как я понял, сдесь всё зависит от конкретной ситуации...