масм странность с invoke StdIn

Тема в разделе "WASM.ASSEMBLER", создана пользователем XshStasX, 27 дек 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Почему при запуске программы, этот код не всегда срабатывает(тоесть ожидание ввода с клавиатуры не происходит)
    Если проходить по шагам под отладчиком то все ок.

    Код (Text):
    1. LOCAL BufStr[200]:byte;
    2.     invoke StdIn,ADDR BufStr,sizeof BufStr
    3.     mov [BufStr + eax],0
    К теме прикрепил весь ехе.
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    все оказалось просто и банально.
    Не успевалась иногда создаться консоль перед вызовом
    Код (Text):
    1. invoke StdIn
    В начале программы поставил
    Код (Text):
    1. invoke AllocConsole
    и проблема ушла :)
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Да вот так тоже работает
    Код (Text):
    1. .386
    2. .model flat,stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\masm32.inc
    7. include \masm32\include\kernel32.inc
    8.  
    9. includelib \masm32\lib\masm32.lib
    10. includelib \masm32\lib\kernel32.lib
    11.  
    12. .data?
    13.   buffer        dd 100 dup(?)
    14.   input_buffer  dd 100 dup(?)
    15. .code
    16.  
    17. start:
    18.   invoke    StdIn, ADDR input_buffer, 100
    19.   invoke    StdOut, ADDR input_buffer
    20.   invoke    ExitProcess,0
    21. END start
    \masm32\bin\Link /SUBSYSTEM:CONSOLE

    или

    Код (Text):
    1. start:
    2.   invoke    AllocConsole
    3.   invoke    StdIn, ADDR input_buffer, 100
    4.   invoke    StdOut, ADDR input_buffer
    5.   invoke    FreeConsole
    6.   invoke    ExitProcess,0
    7. END start
    \masm32\bin\Link /SUBSYSTEM:WINDOWS