刚学汇编的一个程序问题
.386
.model flat,stdcall
option casemap:none
include D:\masm32\INCLUDE\windows.inc ;常量及结构定义
include D:\masm32\INCLUDE\kernel32.inc ;函数原型声明
include D:\masm32\INCLUDE\user32.inc
includelib D:\masm32\lib\kernel32.lib ;用到的引入库
includelib D:\masm32\lib\user32.lib
include D:\masm32\INCLUDE\masm32.inc
includelib D:\masm32\LIB\masm32.lib
.data
szCaption db "命令行参数",0
errortext db "没有参数",0
.code
start:
invoke GetCommandLine
;invoke StdOut,addr eax //为什么这样不行呢?
.if eax!=NULL
invoke MessageBox,NULL,eax,addr szCaption,MB_OK
.endif
invoke ExitProcess,NULL
end start
1.是不是getcommandline反回的值在eax里.用messagebox就能行.为什么stdout不行呢?
2.怎么得到参数的个数?我试着用if eax>2之类的,好像没什么作用.
我用.net写了一个这样的功能的东西.
Imports System
Module Module1
Sub Main()
Dim args As String()
Dim i
args = Environment.GetCommandLineArgs()
For i = 0 To args.Length - 1
Console.WriteLine("Args(" & i & "):" & args(i))
Next
Console.ReadLine()
End Sub
End Module
==========================================================
结果:D:\masm32\BIN\test>E:\程序学习\net\argc\bin\argc.exe 11 2123
Args(0):E:\程序学习\net\argc\bin\argc.exe
Args(1):11
Args(2):2123
问题点数:20、回复次数:9Top
1 楼OpenHero(开勇)回复于 2005-08-03 17:55:38 得分 0
1.有可能是格式的问题Top
2 楼wahahams123(小不点)回复于 2005-08-03 17:59:37 得分 0
编译出错信息
Assembling: D:\masm32\BIN\test\commandline.asm
D:\masm32\BIN\test\commandline.asm(23) : error A2033: invalid INVOKE argument :
1
D:\masm32\BIN\test\commandline.asm(23) : error A2114: INVOKE argument type misma
tch : argument : 1
_
Assembly ErrorTop
3 楼wahahams123(小不点)回复于 2005-08-03 18:02:19 得分 0
invoke StdOut,addr errortext都是正常的.不能读eax?Top
4 楼zara(Kyrie eleison)回复于 2005-08-03 21:23:58 得分 5
不是这样的. 如果是要显示 eax 的内容的话, 直接就是 invoke StdOut, eax
不过, 由于 StdOut 是输出到标准控制台的, 所以, 最后的 exe 的类型必须是 console 类型的. 即, 在链接的时候应该用 /subsystem:console 选项, 而不是一般窗口类型的 /subsystem:windows 选项Top
5 楼wahahams123(小不点)回复于 2005-08-04 00:12:34 得分 0
嗯,谢谢这个问题解决了
那怎么取得这个参数呢?
比如args(1)这样的Top
6 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-08-04 07:52:30 得分 5
栈顶是命令行参数的个数,而之前压入的则是命令行参数的指针。Top
7 楼wahahams123(小不点)回复于 2005-08-04 10:46:38 得分 0
能不能具体写两行看看.不是很明白Top
8 楼mydo(侯佩|hopy|ks)回复于 2005-08-04 12:05:21 得分 0
自己根据空格判断参数Top
9 楼zara(Kyrie eleison)回复于 2005-08-04 14:37:16 得分 10
还可能是制表键分隔的吧. 另外, 为了长文件名的考虑, 还需要检查首个有效字符是否为引号 ("), 是的话, 还需要向后配对.
Masm32 中预定义了些函数的, 如 ArgCl, ArgClC, GetCL 等. 具体的源码可以参看 M32lib 目录下的相关 asm 文件的, 分别是 ClArgs.asm, ClArgsc.asm 和 Getcl,asmTop




