现在的位置: 首页 > 综合 > 正文

win32汇编控制台应用程序

2012年10月14日 ⁄ 综合 ⁄ 共 1503字 ⁄ 字号 评论关闭

.386
.model flat, stdcall
option casemap :none

include    /masm32/include/windows.inc
include     /masm32/include/kernel32.inc
includelib    /masm32/lib/kernel32.lib
include    /masm32/include/user32.inc
includelib    /masm32/lib/user32.lib
include     /masm32/include/masm32.inc
includelib    /masm32/lib/masm32.lib
.data?
hStdin         HANDLE ?
cRead        DWORD ?
hStdout        HANDLE ?
iLength        DWORD ?
cWritten    DWORD ?
szInputBuffer     db 256 dup(?)
szOutputBuffer     db 512 dup(?)

.data
szCaption     db     'Input!',0
szMessage     db 'Error!',0
szFormat    db    "%s%s", 0
szDisplay     db '您输入的字符串是:',0

.code
_WinMain     proc
    invoke     GetStdHandle,STD_INPUT_HANDLE
    .if        eax==INVALID_HANDLE_VALUE
            invoke     MessageBox,NULL,offset szMessage,offset szCaption,MB_OK
    .else
            mov     hStdin,eax
    .endif
   
    invoke     ReadConsole,hStdin,offset szInputBuffer,255,offset cRead,NULL
   
    .if        eax==NULL
        invoke     MessageBox,NULL,offset szMessage,offset szCaption,MB_OK
    .endif
   
    invoke wsprintf,offset szOutputBuffer,offset szFormat,offset szDisplay,offset szInputBuffer
   
    invoke     GetStdHandle,STD_OUTPUT_HANDLE
    .if        eax==INVALID_HANDLE_VALUE
            invoke     MessageBox,NULL,offset szMessage,offset szCaption,MB_OK
    .else
            mov     hStdout,eax
    .endif
    invoke     lstrlen,offset szOutputBuffer
    mov     iLength,eax
    invoke WriteConsole,hStdout,offset szOutputBuffer,iLength,offset cWritten,NULL
    ret
_WinMain     endp

start:
    call _WinMain
    invoke StdIn,NULL,NULL
    invoke ExitProcess,NULL
   
    end start

抱歉!评论已关闭.