在dos下帶命令行執行程序是常有的事,在windows下也是如此,如何正確的從命令行提取需要的數據,首先必須了解命令行。本程序就是用來分析命令行參數的。
---------------------------------------------------------------
;文件名:14.asm
;取命令行參數並顯示,用於分析命令行參數可能出現的情況
.386
.model flat,stdcall
Option CaseMap:none
include windows.inc
include kernel32.inc
include user32.inc
include masm32.inc
includelib kernel32.lib
includelib user32.lib
includelib masm32.lib
.data
szCaption db "GetCommandLine",0
Fg db ' ',0 ;空格(分隔符)
Crlf db 13,10,0 ;回車換行
.data?
Temp db 10 dup(?) ;用來臨時存放數據
OutString db 600 dup(?) ;存放輸出字符串
.code
start:
invoke GetCommandLine ;取命令行參數
mov esi,eax
invoke lstrcat,addr OutString,eax ;合並字符串
invoke lstrcat,addr OutString,addr Crlf
invoke lstrlen,esi ;取字符串長度
mov ecx,eax
cld
L1:
push ecx
xor eax,eax
lodsb
invoke dw2hex,eax,addr Temp
invoke lstrcat,addr OutString,addr Temp+6
invoke lstrcat,addr OutString,addr Fg
pop ecx
loop L1
invoke MessageBox,NULL,addr OutString,addr szCaption,MB_OK
invoke ExitProcess,NULL
end start
---------------------------------------------------------------
程序執行的結果:
1、編譯成console後在dos提示符下執行
2、編譯成windows後在dos提示符下執行
3、編譯成console/windows後創建可執行文件的快捷方式,設立命令行參數
4、不帶任何參數
---------------------------------------------------------------
結論:
1、命令行上可有多個數據項
2、各個數據項用一個或多個空格或制表符分隔
3、第一個數據項代表當前執行的程序名
4、第一個數據兩邊可能有雙引號,也可能沒有
5、引號內的程序名串中間可能有空格
6、若不帶任何參數,則最後一個字符總是空格