комманда сравнения cmp

Тема в разделе "WASM.BEGINNERS", создана пользователем rewo, 14 окт 2006.

  1. rewo

    rewo New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    14
    Здравствуйте вот есть код

    Код (Text):
    1. cmp byte [eax],'.'
    2. je next
    соответсвенно я пытаюсь сделать сравнение
    значения помещенного в eax с точкой и если
    они равны то перейти дальше...

    но при компиляции масм пишет о неправильной инструкции операнда
    почему так происходит?

    спасибо
     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    cmp byte ptr [eax], '.'
     
  3. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    cmp BYTE PTR [eax], '.'
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
  5. rewo

    rewo New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    14
    спасибо
     
  6. rewo

    rewo New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    14
    а если надо сравнить с '..'
    ??
     
  7. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    cmp word ptr [eax],'..'
     
  8. rewo

    rewo New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    14
    спасибо
     
  9. SnugForce

    SnugForce New Member

    Публикаций:
    0
    Регистрация:
    2 май 2005
    Сообщения:
    373
    Адрес:
    Из домУ
    с '....' тоже понятно, а если с '...' ?
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    cmp dword ptr [eax], '...'
     
  11. RuAsm

    RuAsm Виктор

    Публикаций:
    0
    Регистрация:
    16 июл 2006
    Сообщения:
    125
    Адрес:
    Спасск-D, Приморский край!
    а что означает ptr ?
    просто легче изучать, зная хоть что-то о том, что изучаешь
     
  12. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    RuAsm
    dword отдельно не идёт, только dword ptr.
     
  13. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    RuAsm
    В фасме ничего не значит ;) А вообще dword ptr [eax] интерпретируется как "указатель на dword по адресу в еах".

    n0name
    А если в еах будет '...*' ? Условие будет не выполнено. Правильнее так:
    Код (Text):
    1. and  eax,00FFFFFFh  ; сбросить 4й байт
    2. cmp  eax,'...'      ; теперь можно сравнивать три остальных
     
  14. rewo

    rewo New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2006
    Сообщения:
    14
    а если скажем там название директории типа
    'Program Files'
     
  15. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    rewo
    Можно заюзать kernel32!lstrcmpA или самому придумать функцию сравнения строк.
     
  16. BUGOR

    BUGOR New Member

    Публикаций:
    0
    Регистрация:
    14 авг 2005
    Сообщения:
    44
    а можно использовать cmps(b|w|d) с префиксом repe, оч удобно знаете ли:)
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    IceStudent
    Ну если в eax '...*', то and eax,00FFFFFFh не поможет =) скорее shr eax, 8.
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    n0name
    Я писал '...*', имея ввиду, что * - это старший байт. А вообще правильно.
     
  19. Avoidik

    Avoidik New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2004
    Сообщения:
    288
    Адрес:
    Russia
    rewo, если вы пытаетесь получить список файлов, то такой способ сравнения не подходит (cmp byte [eax],'.'), т.к. имя папки или файла может начинаться с точки, т.е. стоит ещё проверять следующий байт после '..' и '.' является ли он нулем
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Если в маске * или *.*, то можно пропускать первые два результата, т.к. они всегда '.' и '..'. Или не всегда? :)