Делаю первые шаги. Но готовые ехе при запуске ничего не выдают. Хотя при запуске 1.ехе > t.txt в текстовом файле появляется Hey, this actually works. Что не так? Код (Text): ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; Build this with the "Project" menu using ; "Console Assemble and Link" ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< .486 ; create 32 bit code .model flat, stdcall ; 32 bit memory model option casemap :none ; case sensitive include \masm32\include\windows.inc ; always first include \masm32\macros\macros.asm ; MASM support macros ; ----------------------------------------------------------------- ; include files that have MASM format prototypes for function calls ; ----------------------------------------------------------------- include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc ; ------------------------------------------------ ; Library files that have definitions for function ; exports and tested reliable prebuilt code. ; ------------------------------------------------ includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .code ; Tell MASM where the code starts ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< start: ; The CODE entry point to the program print chr$("Hey, this actually works.",13,10) exit ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end start ; Tell MASM where the program ends
скорее всего то, что программа при запуске создает консоль, печатает текст и завершается. И все это происходит очень быстро. Попробуй запустить сначала консоль, а потом уже из консоли запустить свою программу.
и это прога на ассемблере? я понимаю если человек использует макро, которые сделал сам, ну или хорошо знает принцип (алгоритм) работы того, который использует.. но начинать изучать асм, не используя в проге ниодной команды на ассемблере... :\
Это простой пример с tutorial. Запускаю в консоле конечно же, cmd. То же самое с использованием команд асемблера. Код (Text): .386 .model flat, stdcall option casemap :none ; case sensitive ; ###################################################### include \tools\masm32\include\windows.inc include \tools\masm32\include\kernel32.inc includelib \tools\masm32\lib\kernel32.lib ; ###################################################### .data Msg1 db "Type something > " Msg2 db "You typed > " ConsoleTitle db 'Input & Output',0 ; ###################################################### .code ; ###################################################### Main proc LOCAL InputBuffer[128] :BYTE ;буффер для ввода LOCAL hOutPut :DWORD ;хэндл для вывода LOCAL hInput :DWORD ;хэндл для ввода LOCAL lpszBuffer :DWORD ;адрес буфера LOCAL nRead :DWORD ;прочитано байт LOCAL nWriten :DWORD ;напечатано байт ;устанавливаем титл окна invoke SetConsoleTitle, addr ConsoleTitle ;получаем хэндл для вывода invoke GetStdHandle, STD_OUTPUT_HANDLE mov hOutPut, eax ;печатаем "Type something > " invoke WriteConsole, hOutPut, addr Msg1, 17, addr nWriten,NULL ;получаем хэндл для ввода invoke GetStdHandle,STD_INPUT_HANDLE mov hInput, eax ;вводим invoke ReadConsole, hInput, addr InputBuffer, 10, ADDR nRead, NULL ;печатаем "You typed > " invoke WriteConsole, hOutPut, addr Msg2, 12, addr nWriten, NULL ;печатаем то, что ввели invoke WriteConsole, hOutPut, addr InputBuffer, nRead, addr nWriten, NULL ;задержка, чтобы полюбоваться invoke Sleep, 2000d ;выход invoke ExitProcess,0 Main endp ; ###################################################### end Main
WildRain В начале имхо лучше вообще не пользоваться макро. В вашем примере немакро - это: И в какой-то мере:
попробуйте переписать все на АПИ. примеры смотрите в уроках екзелона тут на сайте. И убедитесь, что вы линкуете прогу как консольную. А иначе создавайте консоль и пишите в нее.
WildRain Я проверил. Если линковать /SUBSYSTEM:WINDOWS , то никаких ошибок нет, но строка на консоль не идет. В файл она попадает тем не менее. Или линкуй правильно или
когда вы запускаете со стрелочкой ">a.txt" вы создаете пайп и как следствие назначаете дочерней по отношению к cmd.exe проге стдоут, даже если у нее нет дефолтной консоли. Чтоб получить дефолтную консоль надо линковать с /SUBSYSTEM:CONSOLE если я не ошибаюсь. И как верно намекает valterg
Большое спасибо всем кто помог. Первые шаги обычно самые трудные, когда ничего не знаешь и все видишь впервые.