Структура в структуре

Тема в разделе "WASM.BEGINNERS", создана пользователем FAIR, 8 дек 2005.

  1. FAIR

    FAIR New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2005
    Сообщения:
    17
    Есть 2 струтуры, см. далее:
    Код (Text):
    1.  
    2. _Ps STRUC
    3.         saddr       DWORD   ?
    4.         daddr       DWORD   ?
    5. _Ps ENDS
    6.  
    7. _Sum    STRUC
    8.         ps      _Ps <?>
    9.         val       BYTE  ?
    10. _Sum ENDS
    11.  




    Как правильно в секции DATA? создать переменную типа _Sum? Как правильно обращаться в программе к элементам струк-ры _Sum?
     
  2. Sl4v4

    Sl4v4 New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    69
    В секции DATA создавать так:



    peremennaia _Sum <?>



    Обращатся так:

    mov peremennaia.ps.saddr, 0 или mov dword ptr [peremennaia], 0

    mov peremennaia.ps.daddr, 0 или mov dword ptr [peremennaia+4], 0

    и тд.



    чтобы не заморачиваться с вложенными структурами, структуру _Sum можно представить как

    _Sum STRUCT

    saddr DWORD?

    daddr DWORD?

    val BYTE ?

    _Sum ENDS
     
  3. IceStudent

    IceStudent Active Member

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



    Не сбивай человека :)

    Кидать всё в кучу некрасиво.
     
  4. FAIR

    FAIR New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2005
    Сообщения:
    17
    Код (Text):
    1.  
    2. _Ps1 STRUC
    3.         saddr1 DWORD ?
    4.         daddr1 DWORD ?
    5. _Ps1 ENDS
    6.  
    7. _Ps2 STRUC
    8.         saddr2 DWORD ?
    9.         daddr2 DWORD ?
    10. _Ps2 ENDS
    11.  
    12. _SumSTRUC
    13.         ps1 _Ps1 <?>
    14.         ps2 _Ps2 <?>
    15. _Sum ENDS
    16.  
    17. .data?
    18.     Sum _Sum <?>
    19.  




    Всплывает Ошибка:

    error A2181: initializer must be a string or single item

    error A2138: invalid data initializer



    Компилятор Masm32 v.8
     
  5. Sl4v4

    Sl4v4 New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    69
    Похоже ему не нравится, что в структуре _Sum только структуры (простите за тавтологию). И действительно, зачем? Напиши
    Код (Text):
    1. _Sum STRUC
    2.         saddr1 DWORD ?
    3.         daddr1 DWORD ?
    4.         saddr2 DWORD ?
    5.         daddr2 DWORD ?
    6. _Sum ENDS


    Зачем всё усложнять...
     
  6. IceStudent

    IceStudent Active Member

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


    Вот именно: Sum _Sum <>
     
  7. FAIR

    FAIR New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2005
    Сообщения:
    17
    Код (Text):
    1.  
    2. Похоже ему не нравится, что в структуре _Sum только структуры (простите за тавтологию). И действительно, зачем? Напиши
    3. _Sum STRUC
    4.         saddr1 DWORD ?
    5.         daddr1 DWORD ?
    6.         saddr2 DWORD ?
    7.         daddr2 DWORD ?
    8. _Sum ENDS
    9. Зачем всё усложнять...
    10.  


    Так будет не очень понятна логика - здесь четко не видно что структура состоит из двух других структур
     
  8. FAIR

    FAIR New Member

    Публикаций:
    0
    Регистрация:
    10 сен 2005
    Сообщения:
    17




    Спасибо за помощь - все работает.
     
  9. Sl4v4

    Sl4v4 New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2005
    Сообщения:
    69
    IceStudent

    А кстати, чем отличаются <> и <?>
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Так читай о структурах:

    structname <[initializer [, initializer]...]>



    structname <> - это определение структуры с инициализацией её членов значениями, указанными в объявлении. У тебя там "?". А <?> - это не инициализирующее значение, вот и ругается компилятор, что ты ему не то подсовываешь.