как в FASM'е объявить ссылку на структуру через регистр?

Тема в разделе "WASM.BEGINNERS", создана пользователем Spark13, 21 июн 2007.

  1. Spark13

    Spark13 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2007
    Сообщения:
    2
    Как можно указать FASMу, что надо использовать ссылку на структуру, адрес которой хранится в регистре? Например, в 19-м уроке Iczelion'а про использование TreeView Control происходит присвоение регистру адреса структуры и через него уже обращение к отдельным членам этой структуры. Вот пример кода для MASM:
    Код (Text):
    1. ...
    2. mov edi,lParam
    3. assume edi:ptr NM_TREEVIEW
    4. .if [edi].hdr.code==TVN_BEGINDRAG
    5. ...
    Как это сделать в FASM?
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    проще всего делать так:
    Код (Text):
    1. cmp [edi + NM_TREEVIEW.hdr.code],TVN_BEGINDRAG
     
  3. Spark13

    Spark13 New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2007
    Сообщения:
    2
    А если такие ссылки дальше часто надо использовать? Или только так? Все равно спасибо за ответ! У меня вообще никак не получалось.
     
  4. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    вообще есть ASSUME, но я им никогда не пользовался - надо мануал глянуть.
     
  5. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Вероятно через virtual можно такое сотворить
     
  6. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    что-то в этом роде:
    Код (Text):
    1. virtual at edi
    2.    NM_TREEVIEW
    3. end virtual
     
  7. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    assume есть в masm.inc

    с virtual:
    Код (Text):
    1.  ; edx points to structure
    2.  virtual at edx
    3.   .rc RECT
    4.  end virtual
    5.  mov  eax,[.rc.left] ; mov  eax,[edx+RECT.left]
     
  9. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Несовсем по теме, но рядом с ответами: Как можно переопределить символьные имена однажны декларированные в виртуале?

    пример:
    Код (Text):
    1. virtuat at ebx
    2.     .ebx RECT
    3. end virtual
    4.  
    5. virtual at ebx
    6.    .ebx POINT ; Ругается, мол это имя уже используется
    7. end virtual
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1. virtuat at ebx
    2.     .ebx RECT
    3. end virtual
    4. avesome:
    5. virtual at ebx
    6.    .ebx POINT ; Уже не ругается
    7. end virtual
    А зачем переопределять, трудно ли новое имя дать?
     
  11. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    Имя подобрать не трудно, но я бы хотел автоматизировать данный процесс (работа со структурами, через регистры) посредством макросов.
     
  12. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ну тогда изучай вышеупомянутый макрос assume.