请高手看看我的这个程序!

gary0451 2003-11-26 10:52:56
;输入字符串和字符,统计字符在字符串中出现的次数
MAX_LENGTH=20
DSEG SEGMENT
BUFF DB MAX_LENGTH
DB ?
DB MAX_LENGTH DUP(?)
MESS0 DB 'input a string:$'
MESS1 DB 'input a char:$'
MESS2 DB 'total:$'
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA DX,MESS0
CALL DISPMESS
LEA DX,BUFF
MOV AH,0AH
INT 21H
CALL NEWLINE
LEA DX,MESS1
CALL DISPMESS
CALL NEWLINE
MOV AH,01H
INT 21H
LEA DX,MESS2 ;注意,第一行
CALL DISPMESS ;注意,第二行
CALL STAT
MOV DL,AH
CALL ECHOCH
MOV AH,4CH
INT 21H

;子程序名:STAT
;功能 :统计字符串中指定字符的个数
;入口参数:SI=字符串地址
; AL=欲统计的字符
;出口参数:AH=统计出的个数
STAT PROC
XOR CH,CH
MOV CL,BUFF+1
MOV AH,30H
MOV SI,OFFSET BUFF+1
AGAIN: INC SI
CMP [SI],AL
JNE NEXT
INC AH
NEXT: LOOP AGAIN
RET
STAT ENDP


;子程序名:NEWLINE
;功 能:形成回车和换行(光标移至下一行首)
;入口参数:无
;出口参数:无
NEWLINE PROC
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP

;子程序名:DISPMESS
;功 能:显示由DX所指的信息
;入口参数:DX=待显示的信息
;出口参数:无
DISPMESS PROC
MOV AH,9
INT 21H
RET
DISPMESS ENDP

;子程序名:DISPAL
;功 能:用十进制数的形式显示8位二进制数
;入口参数:AL=8位二进制数
;出口参数:无
DISPAL PROC
MOV CX,3
MOV DL,10
DISP1: DIV DL
XCHG AH,AL
ADD AL,'0'
PUSH AX
XCHG AH,AL
MOV AH,0
LOOP DISP1
MOV CX,3
DISP2: POP DX
CALL ECHOCH
LOOP DISP2
RET
DISPAL ENDP

;子程序名:ECHOCH
;功 能:显示DL中的字符
;入口参数:DL=待显示的字符
;出口参数:无
ECHOCH PROC
MOV AH,2
INT 21H
RET
ECHOCH ENDP


CSEG ENDS
END START



上面有注释的两行,加上以后显示结果始终为0,去掉以后就能显示出正确结果。
我百思不得其解,望高手指教!
...全文
112 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
endurer 2003-11-27
  • 打赏
  • 举报
回复
楼主的程序风格不错哟.

学习...
dunkel 2003-11-27
  • 打赏
  • 举报
回复
你没有用 debug 之类的调试程序看看吧? 从你的对子程 STAT 的说明来看, 待统计的字符在 AL 中, 但 DISP 子程却破坏了原来输入的这个在 AL 中的待统计的字符, 所以一般可以在输入字符后 push ax , 在 call STAT 之前 pop ax ; 或者是在子程中对使用到的寄存器进行 "保存-恢复"; 也可以使用高级语言式的通过堆栈来传递参数.

你的这个程序虽然看起来子程比较多, 但功能多是以模块形式的, 代码看起来比较流畅好懂, 虽然还存在一些象前面提到的子程中对寄存器保护等问题, 但总的看来我倒觉得应该这样做了.
gary0451 2003-11-26
  • 打赏
  • 举报
回复
这个程序写得比较繁琐,请问怎么写这样的程序能比较简洁?

21,499

社区成员

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

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