2
.386
.model  flat, stdcall
option  casemap:none

include windows.inc
include kernel32.inc
include user32.inc

includelib user32.lib
includelib kernel32.lib

Main        proto

.data

hOutput dd 0
bReadWritten dd 0
szText1 db "What's your name?",0

hInput dd 0

szInput db 128 dup(0)



.data?

.code
start:

Invoke Main
Invoke ExitProcess,0

Main proc
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    mov hOutput, eax

    invoke GetStdHandle,STD_INPUT_HANDLE
    mov hInput, eax

    invoke lstrlen, addr szText1
    invoke WriteFile, hOutput, addr szText1, eax, ADDR bReadWritten, NULL

    invoke ReadFile, hInput, addr szInput, 128, ADDR bReadWritten,0



    ret
Main endp   


end start

このプログラムを実行した後、何も起こりませんでした。コンソールウィンドウが表示されなかったのはなぜですか?

追記

オプションのアセンブル(winAsm):

/ Zi / Zd / c / coff / Cp / nologo

リンカーオプション

/ SUBSYSTEM:WINDOWS / DEBUG / DEBUGTYPE:CV /VERSION:4.0 /INCREMENTAL:NO

4

1 に答える 1

3
/SUBSYSTEM:WINDOWS

今では答えられます。これは間違ったオプションであり、プログラムがネイティブのWindowsプログラムであることを宣言します。これは、CreateWindow()api関数を使用して独自のウィンドウを作成します。これは、一般的には行われていませんが、アセンブリプログラムからも呼び出すことができます。少なくともCコンパイラを使用して、ウィンドウクラスを作成し、ウィンドウプロシージャを適切に作成するという厳密な役割を実行します。Petzoldが彼の独創的な「ProgrammingWindows」の本で私たちに示したように。

Windowsにコンソールウィンドウを作成させたい場合は、それを要求する必要があります。

/SUBSYSTEM:CONSOLE
于 2012-06-13T21:28:05.850 に答える