подскажите с dword ptr

Тема в разделе "WASM.BEGINNERS", создана пользователем integer, 28 янв 2009.

  1. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    вот код
    Код (Text):
    1. .code
    2.     szOne  db "One",0
    3.     szTwo  db "Two",0
    4.     szPass db "PASSWORD",0
    5.  
    6. Main proc
    7.     local   adr : dword
    8.  
    9.     lea     eax,szPass
    10.     mov     adr,eax
    11.  
    12.     cmp     dword ptr[eax],"SSAP"
    13.     jne     @f
    14.     invoke  MessageBox,0,addr szOne,0,MB_OK
    15.  
    16. @@:
    17.     cmp     dword ptr[adr],"SSAP"
    18.     jne     @f
    19.     invoke  MessageBox,0,addr szTwo,0,MB_OK
    20.  
    21. @@:
    22.     invoke  ExitProcess,0
    23. Main endp
    24. end Main
    почему 1й MessageBox показывается а 2й нет ?
     
  2. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Записал в adr указатель из eax

    Проверил указатель из adr с "SSAP"

    Указатель != Строке
     
  3. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    дело в том что adr это [EBP-n], и ты не можешь в одном операторе извлечь адрес два раза, тоесть получается [[EBP-n]] так работать не будет, надо сделать

    mov eax,adr
    cmp dword ptr[eax],"SSAP"
     
  4. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    Твой

    Код (Text):
    1. cmp     dword ptr[adr],"SSAP"
    аналогичен

    Код (Text):
    1. cmp     adr,"SSAP"
     
  5. integer

    integer New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2007
    Сообщения:
    62
    тоесть если в переменной есть указатель на строку, то нужно использовать регистр чтобы сравнить ее часть с чем-то-там ?
    2FED я вобще так всегда и делаю. подумал может можно обойтись без регистра... видимо нельзя
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    если локальная то да, потому что все локальные переменные уже представлены ввиде указателя. Почитай про фреймы стека и т д.