当前位置: 代码迷 >> 汇编语言 >> 怎么编写带命令行参数的汇编程序
  详细解决方案

怎么编写带命令行参数的汇编程序

热度:632   发布时间:2013-02-26 00:00:00.0
如何编写带命令行参数的汇编程序?
汇编作业要求,麻烦各位高手指点一下


------解决方案--------------------------------------------------------
命令行参数在 PSP:0080h 开始的地方,首字节为后面参数有效的字符个数,从0081开始就是整个参数部分的内容,程序得自己扫描整个参数串。进行需要的处理。想是获得参数的个数的话,就是统计由空格字符(20h)以及制表位字符(09h)分割的区块数了。

所谓PSP,就是程序前缀段,程序一开始的时候,DS和ES段地址都指向该PSP段。比如

start : mov ax, ds:[80h]; ax 为PSP:0080H内容

剩下的就是字符串的处理了。
------解决方案--------------------------------------------------------
上面说得有点出入,是0082h开始为参数。
我给鑫妹写了个示例,给你,并告诉你执行的步骤,用我给你的那个QASM就可以啦,嘿嘿。

Assembly code
        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
这样不可以么?