| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 963 人关注过本帖
标题:字符串操作~高手进!
取消只看楼主 加入收藏
honker
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-6-30
收藏
 问题点数:0 回复次数:1 
字符串操作~高手进!
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CHAR_BLANK    equ    20h    ;定义空格
CHAR_DELI    equ    '"'    ;定义分隔符
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 取命令行参数个数 (arg count)
; 参数个数必定大于等于 1, 参数 1 为当前执行文件名
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_argc        proc
        local    @dwArgc

        pushad
        mov    @dwArgc,0
        invoke    GetCommandLine
        mov    esi,eax
        cld
_argc_loop:
;********************************************************************
; 忽略参数之间的空格
;********************************************************************
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_BLANK
        jz    _argc_loop
;********************************************************************
; 一个参数开始
;********************************************************************
        dec    esi
        inc    @dwArgc
_argc_loop1:
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_BLANK
        jz    _argc_loop        ;参数结束
        cmp    al,CHAR_DELI
        jnz    _argc_loop1        ;继续处理参数内容
;********************************************************************
; 如果一个参数中的一部分有空格,则用 " " 包括
;********************************************************************
        @@:
        lodsb
        or    al,al
        jz    _argc_end
        cmp    al,CHAR_DELI
        jnz    @B
        jmp    _argc_loop1
_argc_end:
        popad
        mov    eax,@dwArgc
        ret

_argc        endp
----------------------------------------------------------------------------------------------------------
这个是个取命令行参数然后计算参数个数的代码~
  小弟思维不是很灵敏`那位前辈详细指点下每一句代码的含义!   very thank your
搜索更多相关主题的帖子: 字符 
2008-08-21 17:27
honker
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2008-6-30
收藏
得分:0 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CHAR_BLANK    equ    20h    ;定义空格
CHAR_DELI    equ    '"'    ;定义分隔符

_argc        proc
        local    @dwArgc 返回的参数个数局部变量

        pushad   保存全部寄存器
        mov    @dwArgc,0  把返回的参数个数局部变量填0
        invoke    GetCommandLine 获取命令行参数
        mov    esi,eax 把返回的参数存储单元的偏移地址送ESI
        cld  把DF标志位填0
_argc_loop:
;********************************************************************
; 忽略参数之间的空格
;********************************************************************
        lodsb        取ESI地址里第1个字节
        or    al,al   如果是0则程序结束
        jz    _argc_end
        cmp    al,CHAR_BLANK 取ESI地址里第1个字节是否空格
        jz    _argc_loop  是则循环取第1个字节 不是则把ESI地址

减0然后@dwArgc+上1
;********************************************************************
; 一个参数开始
;********************************************************************
        dec    esi
        inc    @dwArgc
_argc_loop1:
        lodsb 从新取第1个字节
        or    al,al 判断是否0 含义同上
        jz    _argc_end
        cmp    al,CHAR_BLANK  是否空格
        jz    _argc_loop(这里不懂 是空格跳到_argc_loop怎么是

参数结束?)        ;参数结束
        cmp    al,CHAR_DELI 判断是否"号
        jnz    _argc_loop1    不是则跳到_argc_loop1    ;继续处

理参数内容
;********************************************************************
; 如果一个参数中的一部分有空格,则用 " " 包括
;********************************************************************
        @@:
        lodsb 是则取第2个字节
        or    al,al 判断是否0是则结束
        jz    _argc_end
        cmp    al,CHAR_DELI 不是则判断是不是"号
        jnz    @B 不是则跳回@@:标号处执行
        jmp    _argc_loop1 是则跳到_argc_loop1处
_argc_end:
        popad  把先保存的寄存器恢复
        mov    eax,@dwArgc 返回参数个数到EAX里
        ret

_argc        endp
--------------------------------------------------------------------
这些我差不多都懂 就不知道含义 请上面那位前辈重点一点一点分析下思路可以吗?
2008-08-21 19:41
快速回复:字符串操作~高手进!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020204 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved