Win32彙編控制台下的幾種輸入輸出方式

2021-05-24 09:01:52 字數 2571 閱讀 5192

以下文章**別人的帖子:

在熟悉指令、偽指令和彙編語法的過程中, 首先需要的是輸入、輸出的手段.

下面是之前嘗試出的控制台輸入、輸出的幾種辦法:

1、使用 masm 提供的 stdin、stdout 函式;

2、使用系統 api:

3、使用微軟 c 標準庫 msvcrt.dll 中的 printf 函式.

1、使用 masm 的 stdin 和 stdout 函式:

; test3_1.asm

.386

.model flat, stdcall

include masm32.inc

include kernel32.inc

includelib masm32.lib

includelib kernel32.lib

.data

len   equ  6

.data?

sztext dw      ?

.code

start:

invoke stdin, addr sztext,len

invoke stdout, addr sztext

ret ;ret 是用於子程式返回的指令, 這裡用它代替 exitprocess(在沒有生成 win32 視窗時是可以的)

end start

2、使用系統 api 函式:

; test3_2.asm

.386

.model flat, stdcall

include windows.inc

include kernel32.inc

includelib kernel32.lib

.data?

hinput            dd    ?

lpszbuffer       db    50 dup(?)

hout              dd    ?

bread            dd    ?

.code

start:

invoke getstdhandle,std_input_handle      ; 獲取控制台輸入裝置的控制代碼

mov hinput, eax

invoke setconsolemode,hinput,enable_line_input or /

enable_echo_input or /

enable_processed_input

invoke readfile,hinput,addr lpszbuffer,sizeof lpszbuffer,addr bread,null

;mov eax, bread

invoke getstdhandle, std_output_handle ; 獲取控制台輸出裝置的控制代碼

mov hout, eax                            ; 把獲取到的控制代碼給變數 hout

invoke writefile, hout, addr lpszbuffer, sizeof lpszbuffer, null, null

; 輸出到控制台, 引數分別是: 控制代碼、字串位址、字串長度、成功寫入的字數、非同步讀寫的結構

retend  start

; 另外前面用到的stdin、 stdout 也基本就是這樣實現的, 原始碼在: masm32/m32lib/stdin.asm 、masm32/m32lib/stdout.asm

3、使用微軟 c 標準庫中的scanf、printf 函式; msvscrt.inc 把它宣告做 crt_printf

; test3_3.asm

.386

.model flat, stdcall

include msvcrt.inc

includelib msvcrt.lib

.data

sztext     db    ?

szfmt     db    '%s', 0

.code

start:

invoke     crt_scanf,addr szfmt,addr sztext

invoke     crt_printf, addr sztext

retend start

; test3_4.asm

.model flat, stdcall

include msvcrt.inc

includelib msvcrt.lib

.data

szfmtout       db    'eax=%d; ecx=%c; ',0ah,0dh,'sztext=%s',0

szfmtin         db    '%s',0

sztext            db    'hello word!',0

.code

start:

mov eax, 11

mov ecx, 65

invoke     crt_scanf, addr szfmtin,addr sztext   

invoke     crt_printf, addr szfmtout, eax, ecx, addr sztext

retend start

win32控制台下的main

include stdafx.h int main int argc,char argv if strcmp argv 0 1 1.exe 0 if argc 2 strcmp argv 1 0 if argc 2 if argc 2 strcmp argv 1 mzjslt 0 return 0 ...

win32控制台 win32工程 MFC工程的區別

空專案 控制台 問2個問題即可。1.控制台 vs win32 mfc?嗯,有不有臉?有臉,選win32或mfc。沒有臉,選控制台。臉就是視窗,就是window.s 這個有臉 這個沒臉 控制台與win32 mfc 互動方式的不同,前者是cml 命令模式 後者是gui 使用者介面 2.mfc vs wi...

WIN32控制台生成DLL

step 2 建立好的工程會自動生成dllmain.cpp win32dlltest.cpp等檔案。工程中建立新檔案,型別選擇def,名字為dllmain step 3 在dllmain.cpp中實現函式功能,匯出函式名為audit chargesystem function,函式實現為 這是匯出函...