2010-04-27 304 views

回答

2

只需通過使用Win32 API:通過寫STD_OUTPUT_HANDLE(從STD_INPUT_HANDLE閱讀)。 See GetStdHandle() in MSDN作爲出發點... 使用MASM HLL構造來幫助您(INVOKE是您的朋友,用於調用Win32函數並傳遞參數)。

7

正如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。我把這個作爲練習留給你。

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 
+1

使用MASM32排除使用16位DOS API調用。 – 2010-04-28 05:05:58

+2

如果您使用LINK16而不是LINK,我相信您可以從MASM32目標文件生成16位DOS程序。 – 2010-04-29 00:58:59

0

下載,並鏈接到Irvine32庫,他們會爲你提供是非常人性化的輸入和輸出功能。