Обращение к многострочному массиву в цикле.

Тема в разделе "WASM.BEGINNERS", создана пользователем TOLSTOPUZ, 20 май 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Как можно реализовать поочерёдно использовать все строки массива, причём обращаясь к каждой строке массива НЕ по имени, а по НОМЕРУ СТРОКИ МАССИВА. И всё это в цикле.
    Примерно вот так можно? Тут не работает что-то...

    :data
    Array:

    String0 db "нулевая",0
    String1 db "первая",0
    String2 db "Вторая",0
    String3 db "Третья",0
    String4 db "Четвёртая",0
    String5 db "пятая",0

    konec db "массив окончен",0

    .code

    ;Показать мессаги со всеми строками массива поочерёдно, причём нужен именно цикл!

    xor edx,edx ; Счётчик увеличения номера строки массива

    massiv: ; Метка цикла с условием...

    ; Мессага с очередной строкой массива...
    invoke messageBox 0,Array+[edx],Array+[edx],,0

    inc edx ; увеличиваем номер строки...
    cmp dl,6 ; Если показали уже пятую строку. выход
    jne
    jmp massiv

    ; Мессага об окончании...
    invoke messageBox 0,addr konec,addr konec,0
     
  2. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    сравнивай в цикле
    с текущей строкой; выводи если не равны и передвигай указатель.
     
  3. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    добавь еще в данных
    tbl dd String0,String1,String2,String3,String4,String5

    и будет invoke MessageBox, 0, tbl[ebx*4], tbl[ebx*4],0

    не edx не ecx и не eax лучше использовать для цикла, т.к. после MessageBox они испортятся
     
  4. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    с каких щей
    Код (Text):
    1. inc edx
    станет указывать на другой элемент массива строк
     
  5. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    array:
    offset str0
    ...
    offset strN

    strings:
    str0 db "",0
    ...
    strN db "",0
    ?
     
  6. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Как тогда offset+n
    зазместить в цикле?
     
  7. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    если неизвестно кол-во строк, придётся все сравнивать с конечной - она-то известна.
     
  8. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Почему неизвестно?
    Количество как раз известно.
    У меня тот же вопрос - как можно реализовать это в цикле?
     
  9. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    если известно:
    .data
    count dd ...

    .code
    lea eax, array
    mov ecx, count
    loop:
    jecxz ext
    push ecx
    push eax
    MsgBox [eax]
    pop eax
    pop ecx
    dec ecx
    add eax, 4
    jmp loop
    ext:
     
  10. botmen

    botmen Member

    Публикаций:
    0
    Регистрация:
    2 сен 2007
    Сообщения:
    43
    .data
    count dd ...
    pointer dd offset array

    .code
    loop:
    mov eax, pointer
    mov ecx, count
    jecxz ext
    MsgBox [eax]
    dec count
    add pointer, 4
    jmp loop
    ext:
     
  11. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Вот эта цифра, 4...
    Почему именно 4? А не 1 ?
     
  12. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    потому что длина указателя - 4 байта.