Доступ к элементам массива структур.

Тема в разделе "WASM.BEGINNERS", создана пользователем vover, 12 дек 2008.

  1. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    Код (Text):
    1. VEC     struct
    2.         x   dd  ?
    3.         y   dd  ?
    4. VEC     ends
    5.  
    6. PARTICL     struct
    7.         pos VEC     <>
    8.         ....................
    9. PARTICL     ends   
    10.  
    11. .data
    12.         mas PARTICL 50 dup( <> )
    13.  
    14. .code
    15.  
    16.         lea di, mas
    17.         mov [di].pos.x, eax
    Пытаюсь получить доступ к элементу по пути mas[0]->pos->x , но компилятор(Masm32) не хочет компилировать.
    *error A2006: undefined symbol : pos*. Подскажите пожалуйста что я делаю неправильно?
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    assume?
     
  3. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    Код (Text):
    1. lea eax, mas
    2. assume eax: PTR PARTICL
    3. mov [eax].pos.x, ebx
    заработало, спс.

    и ещё вопросик:
    есть ли разница между mov eax, offset mas и lea eax, mas ? если есть то какая ?
     
  4. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    И всё же вопрос остаётся открытым. В *Практикуме* от Юрова есть пример работы с массивом структур.
    Я делаю почти тоже самое:
    Код (Text):
    1. VEC     struct
    2.         x   dd  ?
    3.         y   dd  ?
    4. VEC     ends
    5.  
    6. PARTICL     struct
    7.         pos VEC     <>
    8.         ....................
    9. PARTICL     ends   
    10.  
    11. .data
    12.         mas PARTICL 50 dup( <> )
    13.  
    14. .code
    15.  
    16.         lea eax, mas
    17.         mov ecx, type PARTICL
    18.  
    19.  
    20. <цикл 10 повторений>
    21.         mov [eax].pos.x, ebx
    22.         add eax, ecx
    23. <конец цикла>
    но у меня всё равно выскакивает при компиляции *error A2006: undefined symbol : pos* %)
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    lea eax, mas ; можно получить адрес локальной переменной, а mov - нет.
    LEA - рулезная инструкция. IMHO.
     
  6. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    отдельного элемента pos как такового не существует - у тебя он объявлен только в контексте mas. Так что или используй assume, или обращайся через [eax].PARTICL.pos.x
     
  7. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    lea - просто операция сложной мат операции, но описана почемуто только по побочному эффекту - возможности рассчетуа сложных адресов (локальных, массивов итд) одной командой. Для загрузки числа в регистр - разницы никакой, окромя того, что леа длиннее на байт и, не помню точно, тормознутее.
     
  8. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
  9. vover

    vover Владимир

    Публикаций:
    0
    Регистрация:
    21 авг 2008
    Сообщения:
    202
    спасибо, разобрался во всём ^^