| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 657 人关注过本帖
标题:[求助]初学者求教--一个编程题
只看楼主 加入收藏
leon2123
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-8-22
收藏
 问题点数:0 回复次数:3 
[求助]初学者求教--一个编程题
要求编程:
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),按数字及其它字符分类计数,然后将结果存入以DIGIT和OTHER为名的存储单元中,并将数字(数码本身的数值)之和存入以SUM为名的存储单元中。

我的程序:
DATA SEGMENT
CRLF DB 13,10,'$'
STRPAR LABEL BYTE ;缓冲区标志
MAXLEN DB 80 ;缓冲区最大空间
strlen db ? ;实际输入个数
BUFFER DB 80 DUP(?) ;缓存输入的字符串
msg db 40 dup(?),13,10,'$' ;存字符串
LEN DB ? ;存字符串的长度
SUM DW ? ;存数字之和
DIGIT DB 0
OTHER DB 0
INMSG DB 'please input a string:',13,10,'$' ;提示输入的信息
DATA ENDS
CODE SEGMENT
assume ds:data,cs:code
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,inmsg
mov ah,09
int 21h
lea dx,strpar ;输入字符串到缓冲区
mov ah,0ah
int 21h
mov bl,strlen
MOV LEN,BL ;字符个数送len
LEA SI,BUFFER ;把输入的字符串送到msg
lea di,msg
cld
mov cx,40
REP MOVSB
;计算各数字之和
mov bx,0
lea si,msg
MOV CL,LEN
mov ch,0
LP:
mov al,[si]
cmp al,30h
jb TOLOOP
cmp al,39h
ja TOLOOP
sub al,30h
mov ah,0
add bx,ax
TOLOOP:
inc si
loop LP
MOV SUM,BX
MOV AH,09
INT 21H
;字符分类计数
S: MOV AL,[BX]
cmp al,'0' ;当扫描字符为数字时
JB OTHERS
cmp al,'9'
JA OTHERS
inc digit ;是数字时则数字计数器加1
jmp short next ;直接检查下一个字符
OTHERS: INC OTHER ;是其它字符时则将其它字符计数器加1
NEXT: INC BX
loop s
mov ah,09
int 21h
CODE ENDS
END START

(不好意思,写得有点乱)

已经生成了EXE文件,并且运行了
但是我怎么查看三个存储单元:digit,other,sum的值是多少?

[此贴子已经被作者于2006-8-22 20:49:23编辑过]

搜索更多相关主题的帖子: 数码 字符 数字 
2006-08-22 20:47
ADALE
Rank: 2
等 级:新手上路
威 望:4
帖 子:483
专家分:0
注 册:2005-11-18
收藏
得分:0 

你可以用debug查
也可以在程序中加点
mov dl,digt
mov ah,2
int 21h
...
使他们在屏幕中书出来


喜欢宁静的平凡生活
2006-08-23 16:12
魔幻星空
Rank: 1
等 级:新手上路
帖 子:149
专家分:0
注 册:2006-8-24
收藏
得分:0 
键入-debug
查找就可以了

2006-08-30 11:00
maker316
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-8-15
收藏
得分:0 

给你一个我的写的子程序
;******************************************************
;子程序名:DISPLAYNUMBER
;参数:
; 入口参数:BP + 4
; 出口参数:无
;功能:
; 把二进制数转换成十进制数并显示
;******************************************************
DISPLAYNUMBER PROC
PUSH BP
MOV BP, SP
PUSH AX
PUSH CX
PUSH DX

MOV AX, BYTE PTR [BP + 4] ;要显示的数
MOV CX, 5 ;16位二进制数最多转换成5位十进制数
MOV DL, 10
LOOP_1:
DIV DL ;AX=AX/DL, AH=余数, AL=商
XCHG AH, AL ;使AL=商, AH=余数
ADD AL, 030H
PUSH AX
XCHG AL, AH
MOV AH, 0
LOOP LOOP_1

;显示
MOV CX, 5
DISP: POP DX
CALL DISPCH
LOOP DISP

POP DX
POP CX
POP AX
POP BP
RET
DISPLAYNUMBER ENDP
;******************************************************
;子程序名:DISPCH
;参数:
; 入口参数:无
; 出口参数:无
;功能:
; 调用02H号功能显示DX所存储的字符
;******************************************************
DISPCH PROC
PUSH AX
MOV AH, 02H
INT 21H
POP AX
RET
DISPCH ENDP

调用方法:
PUSH digit
CALL DISPLAYNUMBER
.....

2006-08-30 15:20
快速回复:[求助]初学者求教--一个编程题
数据加载中...
 
   



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

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