如何编写带命令行参数的汇编程序?

sunlixin723 2009-06-03 08:56:36
汇编作业要求,麻烦各位高手指点一下
...全文
604 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq461458616 2010-09-01
  • 打赏
  • 举报
回复
study study up,day day hard
一笑拔剑 2009-06-14
  • 打赏
  • 举报
回复
饿
说错了

见谅见谅
一笑拔剑 2009-06-14
  • 打赏
  • 举报
回复
win32下用
invoke GetCommandLine
invoke MessageBox,NULL,eax,addr szCaption,MB_OK
这样不可以么?
liuxufeiyang 2009-06-13
  • 打赏
  • 举报
回复
看看
qwerasdf128 2009-06-10
  • 打赏
  • 举报
回复
不错。
wendaosheyu 2009-06-08
  • 打赏
  • 举报
回复
复习
N久以前写过一次,忘干净了都
largep 2009-06-08
  • 打赏
  • 举报
回复
学习。
wxgiter 2009-06-03
  • 打赏
  • 举报
回复
学习。。
光宇广贞 2009-06-03
  • 打赏
  • 举报
回复
上面说得有点出入,是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


你要注意几点:
1、堆栈、代码、数据必须都要写进一个段里面,如我在程序中所示的那样
2、必须 org 100h
3、由 psp:[80h]处获取参数信息,并由 [82h] 处取得参数
4、当你链接成功后会报一个 warning,不管。
5、链接成功后,比如说起名为 noname.exe ,并把它放到了e:\下,比如说啊,然后打开cmd,显示初始目录,键入cd\ -> cd windows -> cd system32,而后键入


c:\windows\system32\exe2bin e:\noname.exe e:\no.com

然后转到E:目录

e:\no libo_hikaliv

就把 libo_hikaliv 这行字给显示出来了
光宇广贞 2009-06-03
  • 打赏
  • 举报
回复
命令行参数在 PSP:0080h 开始的地方,首字节为后面参数有效的字符个数,从0081开始就是整个参数部分的内容,程序得自己扫描整个参数串。进行需要的处理。想是获得参数的个数的话,就是统计由空格字符(20h)以及制表位字符(09h)分割的区块数了。

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

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

剩下的就是字符串的处理了。
willflyz 2009-06-03
  • 打赏
  • 举报
回复
学习!
光宇广贞 2009-06-03
  • 打赏
  • 举报
回复
对了……

你不用将exe转为com的话也可以。

命令:
e:\noname libo sunlixin
将显示
libo sunlixin

之所以转为 com,是因为 com 的四个段处于一个段内,都指向PSP,文件的入口必须是100H,较符合上述约定,而且执行快。exe四个段可以不在同一个段内,执行慢。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧