массив_масм_нуби_питонщик

Тема в разделе "WASM.BEGINNERS", создана пользователем 747_den, 3 июл 2009.

  1. 747_den

    747_den New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    4
    Мне бы из массива Numbers числа нужные взять, да на вывод их отправить.
    Да только не беруться.
    ====
    Код (Text):
    1. BSIZE   equ 10;
    2.  
    3. .data
    4. Numbers DWORD BSIZE dup(?) ; my massive
    5. ifmt       BYTE "%d",0
    6. buf        BYTE BSIZE dup(?)
    7. [b]dig        DWORD ?[/b]
    8. stdout     DWORD ?
    9. cWritten   DWORD ?
    10. CLSR       DWORD ?
    11.  
    12. .code
    13. start:
    14. mov CLSR, 13*256+10
    15. invoke  GetStdHandle, STD_OUTPUT_HANDLE
    16. mov stdout, eax
    17. mov ecx, BSIZE
    18. mov ebx, 1
    19. mov edi, 0
    20. nxt:
    21. mov Numbers[edi], ebx
    22. inc ebx
    23. add edi, 4
    24. loop nxt
    25. mov ecx, BSIZE
    26. NxtDig:
    27. mov edi, 0
    28. [b]mov dig, Numbers[edi] ; doesnt work! [/b]
    29. push ecx    
    30. invoke  wsprintf, ADDR buf, ADDR ifmt, [b]dig[/b]
    31. invoke  WriteConsoleA, stdout, ADDR buf, BSIZE, ADDR cWritten, 0
    32. ;              
    33. invoke WriteConsoleA, stdout, ADDR CLSR, 2, ADDR cWritten, 0
    34. add edi, 4
    35. pop ecx
    36. loop NxtDig
    ===
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Ну очень уж однозначное название темы.
    А по поводу ошибки - попробуй вынести инициализацию EDI за пределы цикла. Иначе получается, что ты каждый раз одно и то же число берешь
     
  3. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    4.231
    747_den
    Код (Text):
    1. mov ebx, 1
    2. mov edi, 0
    3. nxt:
    4. mov Numbers[edi], ebx
    5. inc ebx
    6. add edi, 4
    7. loop nxt
    IMHO
    Код (Text):
    1. mov edi, offset Numbers
    2. mov eax,1
    3. nxt: stosd
    4. inc eax
    5. loop nxt
     
  4. 747_den

    747_den New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    4
    Mikl___
    спасибо за ответ, ушёл разбираться с оптимизацией
     
  5. 747_den

    747_den New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    4
    MSoft
    спасибо,
    хорошо что есть ещё разделы для нуби с их ошибками
     
  6. 747_den

    747_den New Member

    Публикаций:
    0
    Регистрация:
    3 июл 2009
    Сообщения:
    4
    скажите, а так вообще можно с массивом обращаться?
    mov dig, Numbers[edi]
    или так передать элемент массива аргументом ?
    invoke wsprintf, ADDR buf, ADDR ifmt, Numbers[edi]

    (я у юрова в учебнике еще видимо до этого места не дошёл или пропустил)