4

私はグーグルとグーグルを検索しましたが、有用なものは何も見つかりませんでした。どうすればコンソールに出力を送信し、アセンブリを使用してコンソールからのユーザー入力を受け入れることができますか?

MASM32を使用しています

4

4 に答える 4

12

filofel が言うように、Win32 API を使用します。これは、小さな Hello World の例です。

.386
.MODEL flat, stdcall
 STD_OUTPUT_HANDLE EQU -11 
 GetStdHandle PROTO, nStdHandle: DWORD 
 WriteConsoleA PROTO, handle: DWORD, lpBuffer:PTR BYTE, nNumberOfBytesToWrite:DWORD, lpNumberOfBytesWritten:PTR DWORD, lpReserved:DWORD
 ExitProcess PROTO, dwExitCode: DWORD 

 .data
 consoleOutHandle dd ? 
 bytesWritten dd ? 
 message db "Hello World",13,10
 lmessage dd 13

 .code
 main PROC
  INVOKE GetStdHandle, STD_OUTPUT_HANDLE
  mov consoleOutHandle, eax 
  mov edx,offset message 
  pushad    
  mov eax, lmessage
  INVOKE WriteConsoleA, consoleOutHandle, edx, eax, offset bytesWritten, 0
  popad
  INVOKE ExitProcess,0 
 main ENDP
END main

組み立てるため:

ml.exe helloworld.asm /link /subsystem:console /defaultlib:kernel32.lib /entry:main

入力をキャプチャするには、 などの API 関数を使用して同様に進めますReadConsoleInput。それはあなたに演習として残します。

于 2010-04-27T10:37:59.860 に答える
2

「コンソール」は、現代のWindowsの世界ではかなりあいまいになる可能性があります。コンソールプログラムとは、実際にはDOSプログラムを意味する場合、Win32を呼び出すよりもはるかに簡単なDOS INT21APIを使用できます。私はMASMを持っていませんが、これは文字の読み取りと書き込みの方法のわかりやすい例です。その他のDOS機能については、これを参照してください。

MOV AH,1      ; code for "read a character"
INT 21H        ; character gets put in AL

MOV AH,2       ; code for "write a character"
MOV DL,'A'     ; ascii code goes in DL
INT 21H
于 2010-04-27T21:53:00.877 に答える
2

Win32 API を使用するだけ: STD_OUTPUT_HANDLE に書き込む (および STD_INPUT_HANDLE から読み取る)。 開始点としてMSDN の GetStdHandle() を参照してください... MASM HLL コンストラクトを使用してください (INVOKE は、Win32 関数を呼び出してパラメーターを渡すための友達です)。

于 2010-04-27T06:33:59.890 に答える
1

Irvine32ライブラリをダウンロードしてリンクすると、非常に使いやすい入出力機能が提供されます。

于 2011-10-18T01:05:11.827 に答える