Уроки. Первые приложения.

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

  1. WildRain

    WildRain New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2008
    Сообщения:
    6
    Делаю первые шаги. Но готовые ехе при запуске ничего не выдают. Хотя при запуске 1.ехе > t.txt в текстовом файле появляется Hey, this actually works. Что не так?

    Код (Text):
    1. ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    2.  
    3. ;                 Build this with the "Project" menu using
    4. ;                       "Console Assemble and Link"
    5.  
    6. ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    7.  
    8.     .486                                    ; create 32 bit code
    9.     .model flat, stdcall                    ; 32 bit memory model
    10.     option casemap :none                    ; case sensitive
    11.  
    12.     include \masm32\include\windows.inc     ; always first
    13.     include \masm32\macros\macros.asm       ; MASM support macros
    14.  
    15.   ; -----------------------------------------------------------------
    16.   ; include files that have MASM format prototypes for function calls
    17.   ; -----------------------------------------------------------------
    18.     include \masm32\include\masm32.inc
    19.     include \masm32\include\gdi32.inc
    20.     include \masm32\include\user32.inc
    21.     include \masm32\include\kernel32.inc
    22.  
    23.   ; ------------------------------------------------
    24.   ; Library files that have definitions for function
    25.   ; exports and tested reliable prebuilt code.
    26.   ; ------------------------------------------------
    27.     includelib \masm32\lib\masm32.lib
    28.     includelib \masm32\lib\gdi32.lib
    29.     includelib \masm32\lib\user32.lib
    30.     includelib \masm32\lib\kernel32.lib
    31.  
    32.     .code                       ; Tell MASM where the code starts
    33.  
    34. ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    35.  
    36. start:                          ; The CODE entry point to the program
    37.  
    38.     print chr$("Hey, this actually works.",13,10)
    39.     exit
    40.  
    41. ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    42.  
    43. end start                       ; Tell MASM where the program ends
     
  2. satrau

    satrau Александр

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    229
    скорее всего то, что программа при запуске создает консоль, печатает текст и завершается. И все это происходит очень быстро. Попробуй запустить сначала консоль, а потом уже из консоли запустить свою программу.
     
  3. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    и это прога на ассемблере?
    я понимаю если человек использует макро, которые сделал сам, ну или хорошо знает принцип (алгоритм) работы того, который использует.. но начинать изучать асм, не используя в проге ниодной команды на ассемблере... :\
     
  4. WildRain

    WildRain New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2008
    Сообщения:
    6
    Это простой пример с tutorial. Запускаю в консоле конечно же, cmd.
    То же самое с использованием команд асемблера.
    Код (Text):
    1. .386
    2.       .model flat, stdcall
    3.       option casemap :none   ; case sensitive
    4.  
    5.  ; ######################################################
    6.  
    7.       include \tools\masm32\include\windows.inc
    8.       include \tools\masm32\include\kernel32.inc
    9.       includelib \tools\masm32\lib\kernel32.lib
    10.  
    11.  ; ######################################################
    12.  
    13.     .data
    14.  
    15.       Msg1         db "Type something > "
    16.       Msg2         db "You typed > "
    17.       ConsoleTitle db 'Input & Output',0
    18.  
    19.  
    20.  ; ######################################################
    21.  
    22.     .code
    23.  
    24.  ; ######################################################
    25.  
    26.  Main proc
    27.    LOCAL InputBuffer[128] :BYTE  ;буффер для ввода
    28.    LOCAL hOutPut          :DWORD ;хэндл для вывода
    29.    LOCAL hInput           :DWORD ;хэндл для ввода
    30.    LOCAL lpszBuffer       :DWORD ;адрес буфера
    31.    LOCAL nRead            :DWORD ;прочитано байт
    32.    LOCAL nWriten          :DWORD ;напечатано байт
    33.  
    34.    ;устанавливаем титл окна
    35.    invoke SetConsoleTitle, addr ConsoleTitle
    36.  
    37.    ;получаем хэндл для вывода
    38.    invoke GetStdHandle, STD_OUTPUT_HANDLE
    39.    mov hOutPut, eax
    40.  
    41.    ;печатаем "Type something > "
    42.    invoke WriteConsole, hOutPut, addr Msg1, 17, addr nWriten,NULL
    43.  
    44.    ;получаем хэндл для ввода
    45.    invoke GetStdHandle,STD_INPUT_HANDLE
    46.    mov hInput, eax
    47.  
    48.    ;вводим
    49.    invoke ReadConsole, hInput, addr InputBuffer, 10, ADDR nRead, NULL
    50.  
    51.    ;печатаем "You typed > "
    52.    invoke WriteConsole, hOutPut, addr Msg2, 12, addr nWriten, NULL
    53.  
    54.    ;печатаем то, что ввели
    55.    invoke WriteConsole, hOutPut, addr InputBuffer, nRead, addr nWriten, NULL
    56.  
    57.    ;задержка, чтобы полюбоваться
    58.    invoke Sleep, 2000d
    59.  
    60.    ;выход
    61.    invoke ExitProcess,0
    62.  Main endp
    63.  
    64.  
    65.  ; ######################################################
    66.  
    67.     end Main
     
  5. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    WildRain
    В начале имхо лучше вообще не пользоваться макро. В вашем примере немакро - это:
    И в какой-то мере:
     
  6. WildRain

    WildRain New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2008
    Сообщения:
    6
    Суть вопроса в том, что результата выполнения я не вижу, хоть и запускаю с консоли.
     
  7. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    попробуйте переписать все на АПИ. примеры смотрите в уроках екзелона тут на сайте. И убедитесь, что вы линкуете прогу как консольную. А иначе создавайте консоль и пишите в нее.
     
  8. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    WildRain
    Я проверил. Если линковать /SUBSYSTEM:WINDOWS , то никаких ошибок нет,
    но строка на консоль не идет. В файл она попадает тем не менее.

    Или линкуй правильно или
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    когда вы запускаете со стрелочкой ">a.txt" вы создаете пайп и как следствие назначаете дочерней по отношению к cmd.exe проге стдоут, даже если у нее нет дефолтной консоли.

    Чтоб получить дефолтную консоль надо линковать с /SUBSYSTEM:CONSOLE если я не ошибаюсь. И как верно намекает valterg
     
  10. WildRain

    WildRain New Member

    Публикаций:
    0
    Регистрация:
    6 янв 2008
    Сообщения:
    6
    Большое спасибо всем кто помог. Первые шаги обычно самые трудные, когда ничего не знаешь и все видишь впервые.