| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 724 人关注过本帖
标题:俺原本想把a b c输出成abc,但结果却变成abcc
只看楼主 加入收藏
hijk_12
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-6-25
收藏
 问题点数:0 回复次数:3 
俺原本想把a b c输出成abc,但结果却变成abcc

编程,删除一个字符串中的所有空格,并送回原存储单元
DATA SEGMENT
STRING DB 'a b c$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRING
MOV DI,SI
CALL DELSPACE
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H

DELSPACE PROC
PUSH AX
NEXT: MOV AL,[SI]
INC SI
CMP AL,24H
JZ EXIT
CMP AL,20H
JZ NEXT
MOV [DI],AL
INC DI
JMP NEXT
EXIT: POP AX
RET
DELSPACE ENDP
CODE ENDS

END START

结果应该输出abc,但却输出abcc??

搜索更多相关主题的帖子: abc 结果 输出 
2006-07-20 10:08
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

DATA SEGMENT PARA 'Data'
STRING DB 'a b c$'
DATA ENDS

CODE SEGMENT PARA 'Code'
MAIN PROC FAR ; FAR为程序入口
ASSUME DS:DATA,CS:CODE
MOV AX,DATA ; 载入代码段
MOV DS,AX

PUSH BX ; 保存寄存器
PUSH CX
PUSH DI

MOV BX,OFFSET STRING+2 ; 待移动的有效字符位置
MOV DI,OFFSET STRING+1 ; 第一个空格位置

L: MOV CL,[BX] ; 将有效字符填入空格
MOV [DI],CL
INC DI ; 计算下一个欲填补的位置
CMP CL, BYTE PTR '$' ; 若当前填补的字符是$,则准备打印字符
JE DISP

LOCATE:
INC BX ; 将当前有效字符位置往后移动一位
CMP [BX], BYTE PTR 20H ; 测试是否为空格
JE LOCATE ; 若是空格则继续往后移
JMP L ; 若不是说明已找到下一个有效字符位置,则继续填补操作

DISP:
MOV AH,09H ; 设置中断21功能9h
MOV DX,OFFSET STRING ; 将待输出的字符串首地址给DX
INT 21H

POP DI ; 恢复寄存器
POP CX
POP BX

MOV AX,4C00H ; 中断程序,中断21的功能4ch传入AH而返回代码00H给AL
INT 21H
MAIN ENDP
CODE ENDS
END MAIN

帮你重新写了一个,都写了注释,自己看吧。

[此贴子已经被作者于2006-7-21 12:05:00编辑过]


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2006-07-21 12:03
hijk_12
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2005-6-25
收藏
得分:0 
那么多,你也太空气了吧,兄弟,但还是十分感谢您!!

2006-07-21 22:49
enter673
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-3-31
收藏
得分:0 

老兄,我帮你补上两句,就OK了
ATAS SEGMENT
STRING DB 'a b c$';此处输入数据段代码
STRING2 DB 3 dup(?),'$'
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START: MOV AX,DATAS
MOV DS,AX
MOV SI,OFFSET STRING
MOV DI,OFFSET STRING2
CALL DELSPACE
MOV DX,OFFSET STRING2
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H

DELSPACE PROC
PUSH AX
NEXT: MOV AL,[SI]
INC SI
CMP AL,24H
JZ EXIT
CMP AL,20H
JZ NEXT
MOV [DI],AL
INC DI
JMP NEXT
EXIT: POP AX
RET
DELSPACE ENDP;此处输入代码据段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START

2007-03-31 19:05
快速回复:俺原本想把a b c输出成abc,但结果却变成abcc
数据加载中...
 
   



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

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