注册 登录
编程论坛 汇编论坛

[求助]初学者求教--一个编程题

leon2123 发布于 2006-08-22 20:47, 658 次点击
要求编程:
程序接收用户键入的一行字符(字符个数不超过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编辑过]

3 回复
#2
ADALE2006-08-23 16:12

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

#3
魔幻星空2006-08-30 11:00
键入-debug
查找就可以了
#4
maker3162006-08-30 15:20

给你一个我的写的子程序
;******************************************************
;子程序名: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
.....

1