如何在MASM控制台上进行输入/输出?

时间:2010-04-27 02:22:12

标签: assembly masm

我用Google搜索并用谷歌搜索,我找不到任何有用的东西。如何将输出发送到控制台,并通过程序集从控制台接受用户输入?

我正在使用MASM32

4 个答案:

答案 0 :(得分:7)

正如filofel所说,使用Win32 API。这是一个小小的世界示例:

.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

现在要捕获输入,您可以使用ReadConsoleInput等API函数进行类似操作。我将此作为练习留给你。

答案 1 :(得分:2)

只需使用Win32 API:通过写入STD_OUTPUT_HANDLE(并从STD_INPUT_HANDLE读取)。 See GetStdHandle() in MSDN作为起点...... 使用MASM HLL构造来帮助您(INVOKE是您调用Win32函数和传递parms的朋友)。

答案 2 :(得分:2)

“控制台”在现代Windows世界中可能相当模糊。如果通过控制台程序,你真的是指DOS程序,你可以使用DOS INT 21 API,这比调用Win32简单得多。我没有MASM,但这里有一个简单的例子,说明如何阅读一个角色并写一个角色。有关更多DOS函数,请参阅this

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

答案 3 :(得分:0)

下载并链接到Irvine32库,它们将为您提供非常用户友好的输入和输出功能。