我的程序错在哪里? 高手教我

lijun521 2003-11-08 12:55:56
;该程序的功能是从键盘输入一系列字符(以回车符结束),并按字母、数;字及其他字符分类计数,最后显示出这三类的计数结果。


datarea segment
count dw 0,0,0 ;分别存放字母、字母和其他字符的个数
datarea ends
code segment
main proc far
assume cs:code,ds:datarea
start:push ds
sub ax,ax
push ax
mov ax,datarea
mov dx,ax
next: mov ah,01 ;判断是否为字母
int 21h
cmp al,0dh
jz exit
cmp al,5ah
jg other
cmp al,41h
jl shuzi
add count[0],1
shuzi:cmp al,39h ;判断是否为数字
jg other
cmp al,31h
jl other
add count[1],1
other:add count[2],1 ;其他字符的个数加1
jmp next

mov si,0
exit: mov bx,count[si] ;打印输出count的内容,为16进制
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit: mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
add si,1
cmp si,2
jnz exit
ret

main endp
code ends
end start

编译连接运行 都没有错误
可是结果不对 没有达到题目的要求 到底是哪里出错?
好心的高手帮我看看 3Q!!!
...全文
126 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdsjkk 2003-11-08
  • 打赏
  • 举报
回复
datarea segment
count dw 0,0,0 ;分别存放字母、字母和其他字符的个数
datarea ends
code segment
main proc far
assume cs:code,ds:datarea
start:push ds
sub ax,ax
push ax
mov ax,datarea
mov ds,ax
next: mov ah,01 ;判断是否为字母
int 21h
cmp al,0dh
jz exit0
cmp al,5ah
ja next1
cmp al,41h
jb shuzi
next01:
add count[0],1
jmp next
next1:
cmp al,'a'
jb shuzi
cmp al,'z'
jna next01
shuzi:cmp al,39h ;判断是否为数字
ja other
cmp al,30h
jb other
add count[1 * 2],1
jmp next
other:add count[2 * 2],1 ;其他字符的个数加1
jmp next

exit0:
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h

mov si,0
exit:
mov bx,count[si] ;打印输出count的内容,为16进制
mov ch,4
rotate: mov cl,4
rol bx,cl
mov al,bl
and al,0fh
add al,30h
cmp al,3ah
jl printit
add al,7h
printit: mov dl,al
mov ah,2
int 21h
dec ch
jnz rotate
mov ah,2
mov dl,13
int 21h
mov dl,10
int 21h
add si,2
cmp si,4
jbe exit
ret

main endp
code ends
end start
dunkel 2003-11-08
  • 打赏
  • 举报
回复
...
add count[0],1
jmp next ; ***
shuzi:cmp al,39h ;判断是否为数字
jg other
cmp al,31h
jl other
add count[1],1
jmp next ; ***
other:add count[2],1 ;其他字符的个数加1
jmp next
dunkel 2003-11-08
  • 打赏
  • 举报
回复
...
start:push ds
sub ax,ax
push ax
mov ax,datarea
mov dx,ax ; *** 应该是 mov ds, ax
...

另外字母还有大小写, 你的代码中只认识了大写的字母. 个数定义是用的是 dw, 但程序中累加时从偏移量来看, 又是 byte (add count[1], 1), 最后的显示又是显示了 4 个字节的内容, 应该统一一下, 不然结果还是有误.
怎样成为一个程序高手呢?http://www.XiaoHui.com 2000-07-09 [原创]

21,459

社区成员

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

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