如何编写带命令行参数的汇编程序?
汇编作业要求,麻烦各位高手指点一下
[解决办法]
命令行参数在 PSP:0080h 开始的地方,首字节为后面参数有效的字符个数,从0081开始就是整个参数部分的内容,程序得自己扫描整个参数串。进行需要的处理。想是获得参数的个数的话,就是统计由空格字符(20h)以及制表位字符(09h)分割的区块数了。
所谓PSP,就是程序前缀段,程序一开始的时候,DS和ES段地址都指向该PSP段。比如
start : mov ax, ds:[80h]; ax 为PSP:0080H内容
剩下的就是字符串的处理了。
[解决办法]
上面说得有点出入,是0082h开始为参数。
我给鑫妹写了个示例,给你,并告诉你执行的步骤,用我给你的那个QASM就可以啦,嘿嘿。
CODE SEGMENT ASSUME CS:CODE,DS:CODE ORG 100H MAIN PROC FAR START: MOV SI,80H ; 指向psp的80h处 LODSB ; 获取参数长度,记录在 al 中 XOR AH,AH ADD SI,AX ; SI指向参数末尾 MOV BYTE PTR [SI],0DH ; 回车 MOV BYTE PTR [SI+1],0AH ; 换行 MOV BYTE PTR [SI+2],24H ;'$' MOV DX,82H ; 命令行参数首地址 MOV AH,09H INT 21H MOV AH,4CH INT 21H RET MAIN ENDP CODE ENDS END MAIN
[解决办法]
对了……
你不用将exe转为com的话也可以。
命令:
e:\noname libo sunlixin
将显示
libo sunlixin
之所以转为 com,是因为 com 的四个段处于一个段内,都指向PSP,文件的入口必须是100H,较符合上述约定,而且执行快。exe四个段可以不在同一个段内,执行慢。
[解决办法]
学习!
[解决办法]
win32下用
invoke GetCommandLine
invoke MessageBox,NULL,eax,addr szCaption,MB_OK
这样不可以么?