Массив структур в масме

Тема в разделе "WASM.ASSEMBLER", создана пользователем RamMerLabs, 2 янв 2009.

  1. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    доброго времени суток, господа!

    перейду сразу к делу:
    если массив структур в масме, каждый элемент каждой из структур в массиве инициализируеца в отдельнйо процедуре, затем в основной процедуре нужно считать из него значения, но тут возникают траблы. бьюсь уже битый час, наверное последствия НГ :) подскажите что не так:

    Код (Text):
    1. SETTING struct
    2.  szDevice   db 4 dup (?)
    3.  dModifier  dd ?
    4.  dValue     dd ?
    5. SETTING ends
    6.  
    7. .data?
    8. lSettings   SETTING 24 dup(<>)
    9.  
    10. .code
    11. SetDefaultSettings PROC
    12.  mov ecx, 24
    13. @@:
    14.  mov eax, 100
    15.  mov edx, 24
    16.  sub edx, ecx
    17.  add ax, dx
    18.  mov lSettings[edx].dModifier, 2
    19.  mov lSettings[edx].dValue, eax
    20.  ;                                                             здесь проверяю - всё в порядке, элементы читаюцца намана
    21.  loop @b
    22.  ret
    23. SetDefaultSettings ENDP
    24.  
    25. SetHotKeys PROC hWnd:DWORD
    26.  mov ebx, offset szBuf
    27.  mov edi, 0
    28.  .repeat
    29.   ; следующие 4 строки только для проверки, для работы программы они не нужны
    30.   pusha
    31.   invoke wsprintf, addr szB, addr szT, edi, lSettings[edi].dValue, lSettings[edi].dModifier ;- тут уже вместо значений записанных при инициализации ерунда какая-то
    32.   invoke MessageBox, 0, addr szB, 0, 0
    33.   popa
    34.   ;
    35.   inc edi
    36.   add ebx, 4
    37.  .until byte ptr [ebx+1] == 0
    38.  mov lAll, edi
    39.  ret
    40. SetHotKeys ENDP
    как мне это исправить? заранее благодарю ;)
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Привет. У тебя на каждой итерации указатель не на следующую структуру берётся, а просто увеличивается на на 1 байт, указывая на следующий байт структуры, которая юзолась на предыдущей итерации. Замени inc edi на add edi,sizeof SETTING.
     
  3. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    огаога, точно. спасибки. edi у мну не только для роли счётчика итераций но и для содержания числа всех итераций для последующего использования, но с этим ща разберёмсо. ещё раз пасиб

    хехе, заработало! ну и при инициализации также поправить :)