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

Discussion in 'WASM.BEGINNERS' started by rewo, Oct 14, 2006.

  1. rewo

    rewo New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    14
    Здравствуйте вот есть код

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

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

    спасибо
     
  2. censored

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    cmp byte ptr [eax], '.'
     
  3. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
    cmp BYTE PTR [eax], '.'
     
  4. Asterix

    Asterix New Member

    Blog Posts:
    0
    Joined:
    Feb 25, 2003
    Messages:
    3,576
  5. rewo

    rewo New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    14
    спасибо
     
  6. rewo

    rewo New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    14
    а если надо сравнить с '..'
    ??
     
  7. Quantum

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

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    cmp word ptr [eax],'..'
     
  8. rewo

    rewo New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    14
    спасибо
     
  9. SnugForce

    SnugForce New Member

    Blog Posts:
    0
    Joined:
    May 2, 2005
    Messages:
    373
    Location:
    Из домУ
    с '....' тоже понятно, а если с '...' ?
     
  10. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    cmp dword ptr [eax], '...'
     
  11. RuAsm

    RuAsm Виктор

    Blog Posts:
    0
    Joined:
    Jul 16, 2006
    Messages:
    125
    Location:
    Спасск-D, Приморский край!
    а что означает ptr ?
    просто легче изучать, зная хоть что-то о том, что изучаешь
     
  12. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    RuAsm
    dword отдельно не идёт, только dword ptr.
     
  13. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    RuAsm
    В фасме ничего не значит ;) А вообще dword ptr [eax] интерпретируется как "указатель на dword по адресу в еах".

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

    rewo New Member

    Blog Posts:
    0
    Joined:
    Sep 28, 2006
    Messages:
    14
    а если скажем там название директории типа
    'Program Files'
     
  15. Quantum

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

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    rewo
    Можно заюзать kernel32!lstrcmpA или самому придумать функцию сравнения строк.
     
  16. BUGOR

    BUGOR New Member

    Blog Posts:
    0
    Joined:
    Aug 14, 2005
    Messages:
    44
    а можно использовать cmps(b|w|d) с префиксом repe, оч удобно знаете ли:)
     
  17. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    IceStudent
    Ну если в eax '...*', то and eax,00FFFFFFh не поможет =) скорее shr eax, 8.
     
  18. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    n0name
    Я писал '...*', имея ввиду, что * - это старший байт. А вообще правильно.
     
  19. Avoidik

    Avoidik New Member

    Blog Posts:
    0
    Joined:
    Dec 29, 2004
    Messages:
    288
    Location:
    Russia
    rewo, если вы пытаетесь получить список файлов, то такой способ сравнения не подходит (cmp byte [eax],'.'), т.к. имя папки или файла может начинаться с точки, т.е. стоит ещё проверять следующий байт после '..' и '.' является ли он нулем
     
  20. IceStudent

    IceStudent Active Member

    Blog Posts:
    0
    Joined:
    Oct 2, 2003
    Messages:
    4,300
    Location:
    Ukraine
    Если в маске * или *.*, то можно пропускать первые два результата, т.к. они всегда '.' и '..'. Или не всегда? :)