私はasmの初心者で、ユーザーがキーを押して終了するのを待つ単純なハローワールドを作ろうとしています。今のところ、Hello World はすべて問題ありませんが、これから取得した .exe コンソール プログラムは、ユーザーがキーを押すまで画面に表示したままにしておいて、すぐに閉じてしまいます。今私が抱えている問題は、何らかの理由でプログラムがループし続け、ユーザー入力を検索することですが、プログラムを強制的に閉じると (^C)、押したすべてのキーが次のコンソール行に書き込まれていることがわかります。間違ったバッファを使用していました (?)
私は数日間、インターネット上で修正を探していましたが、ついに私は助けを求めています.これは私を夢中にさせています. Windows API...
どうもありがとうございました。どんな助けやヒントも大歓迎です!
コード :
STD_OUTPUT_HANDLE equ -11
STD_INPUT_HANDLE equ -10
NULL equ 0
global start
extern ExitProcess, GetStdHandle, WriteConsoleA, ReadConsoleInputA
section .data
msg db "Hello World!", 13, 10, 0
msg.len equ $ - msg
consoleInHandle dd 1
section .bss
buffer resd 2
buffer2 resd 2
section .text
start:
push STD_OUTPUT_HANDLE
call GetStdHandle
push NULL
push buffer
push msg.len
push msg
push eax
call WriteConsoleA
read:
push STD_INPUT_HANDLE
call GetStdHandle
mov [consoleInHandle],eax
push consoleInHandle
push dword[buffer2]
push 1
push NULL
call ReadConsoleInputA
cmp eax,1
jge exit
jmp read
exit:
push NULL
call ExitProcess
Windows 関数に関する Moar 情報は、次の場所にあります。