以下文章**別人的帖子:
在熟悉指令、偽指令和彙編語法的過程中, 首先需要的是輸入、輸出的手段.
下面是之前嘗試出的控制台輸入、輸出的幾種辦法:
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,函式實現為 這是匯出函...