особенности компиляции?

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

Статус темы:
Закрыта.
  1. 10001111

    10001111 New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2004
    Сообщения:
    20
    Адрес:
    Russia, Железногорск
    Здравствуйте, скомпилировав инструкцию

    test reg,mem

    получил

    test mem,reg

    Например:
    Код (Text):
    1.  
    2. format PE GUI 4.0
    3. entry start
    4.  
    5. segment 'code' code readable executable
    6.  
    7. num1   dd 0
    8.  
    9. start:
    10.  
    11. test edi,[num1]
    12. ret
    13.  




    скомпиляет test dword [num1],edi



    Подскажите пожалуйста почему?



    Может быть дело в использовании edi?
     
  2. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Нда у меня тоже.

    А какая разница?
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Какая разница, что он там накомпилял?

    Ни mem, ни reg не меняются при этой операции, флаги устанавливаются одинаково, что test reg,mem, что test mem,reg

    Абсолютно идентичные по смыслу инструкции.
     
  4. 10001111

    10001111 New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2004
    Сообщения:
    20
    Адрес:
    Russia, Железногорск
    Ага, програмиш



    test edi,[num]

    jc anyway



    получаеш



    test dword [num],edi

    jc anyway
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Ну тогда не используй эту инструкцию, если она так смущает.
     
  6. SDragon

    SDragon New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2005
    Сообщения:
    133
    Адрес:
    Siberia
    Потому что в кодировке инструкций x86 нет TEST r32, r/m32, есть только TEST r/m32, r32. Сравни:
    Код (Text):
    1. Инструкция SUB:
    2. 29 /r SUB r/m32, r32
    3. 2B /r SUB r32, r/m32
    4.  
    5. Инструкция TEST:
    6. 85 /r TEST r/m32, r32


    TEST a, b эквивалентно TEST b, a, поэтому в x86 предусмотрен только один способ кодирования этой инструкции. С другой стороны, SUB a, b - это не то же самое, что SUB b, a. Поэтому для SUB есть два разных варианта.

    Из этого следует, что, как бы ты не написал (хоть test edi,[num], хоть test dword [num],edi), ассемблер все равно сгенерирует один код. Ну и соответственно, дизассеблер считает, что это одна и та же инструкция. Подробнее тебе объяснит The Svin; он на этом форуме главный спец по форматам инструкций :).
     
  7. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    10001111

    Твой jc никогда не сработает. TEST его всегда в ноль ставит :) - ибо есть он по сути тот же AND без модификации приемника.
     
  8. 10001111

    10001111 New Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2004
    Сообщения:
    20
    Адрес:
    Russia, Железногорск
    Всем спасибо, разобрался, с инструкциями надо внимательнее, carry не устанавливается после test.
     
Статус темы:
Закрыта.