还是很简单
时间:2010-11-09
来源:互联网
题目:从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数。
程序没有问题,但是不懂其中一些语句的含义,有希望大侠解释一下!

C/C++ code
程序没有问题,但是不懂其中一些语句的含义,有希望大侠解释一下!

C/C++ code
DATAS SEGMENT;此处输入数据段代码 [color=#FF0000]SUM DB 0AH,0DH,0,0,"$";[/color]这句是什么意思? BUF DB "Plase Input A Character String:$" STR DB 0DH,0AH,"$" BUF1 DB 30 DB 0 DB 30 DUP(?) DATAS ENDS STACKS SEGMENT DB 20 DUP(?) ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX LEA DX,BUF ;9号调用显示PLEASE INPUT A CHAR: MOV AH,9 INT 21H MOV AH,0AH ;10号调用,从键盘接收字符 LEA DX,BUF1 INT 21H LEA DX,SUM ;回车换行 MOV AH,9 INT 21H MOV CL,0H ; LEA SI,BUF1+2 COMP: MOV DL,[SI] CMP DL,'$';0DH JE EXIT CMP DL,30H JB CHAR ;低于48则转到CHAR CMP DL,39H JA CHAR ;高于57则转到CHAR INC SI JMP COMP CHAR: INC SI INC CL JMP COMP EXIT: MOV SUM,CL [color=#FF0000]ADD SUM,30H [/color];为什么就这一句就能转换成十进制输出 MOV DL,SUM MOV AH,2 INT 21H MOV AH,4CH INT 21H CODES ENDS END START
作者: gkjsj 发布时间: 2010-11-09
SUM DB 0AH,0DH,0,0,"$"
这个意思是回车换行,ascii码的值0d0a表示crlf.
ADD SUM,30H
这个意思是将0-9转成ascii码的31-39h,也就是字符'0'-'9'.
这个意思是回车换行,ascii码的值0d0a表示crlf.
ADD SUM,30H
这个意思是将0-9转成ascii码的31-39h,也就是字符'0'-'9'.
作者: asmlearn 发布时间: 2010-11-10
BUF DB "Plase Input A Character String:$"
定义字符串,在用DS:DX=待输出字符的地址 ,mov ah,9 int21h的中断来显示字符串时,必须以
“$”来作结束符
定义字符串,在用DS:DX=待输出字符的地址 ,mov ah,9 int21h的中断来显示字符串时,必须以
“$”来作结束符
作者: leetow2003 发布时间: 2010-11-10
我觉得你的程序有这样几个问题:
1、SUM DB 0AH,0DH,0,0,"$"
应该是SUM DB 0,0,0AH,0DH,"$"才对,因为你后面将统计结果放在了SUM单元,而不是SUM+2的单元。
2、LEA DX,SUM ;回车换行
一句应该是LEA DX,STR 因为单独定义了这个字符串,我想你是要这样单独使用的。
其实可以把sum和str合并定义为
SUM DB 0,0
STR DB 0DH,0AH,"$"
3、如果你的结果不超过9个,那后面的程序没问题。但你读入的字符串可以到达30-1个字符(最后一个必须是回车),所以统计结果CL可能超过9,EXIT:后就应该这样修改了
MOV AL,CL
MOV AH,0
MOV CL,10
DIV CL ;统计结果的十位数在AL,个位数在AH
ADD AX,3030H
MOV SUM,AX ;正好十位在前(低地址),各位在后(高地址)
MOV AH,0AH ;显示结果
LEA DX,SUM
INT 21H
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:2
1、SUM DB 0AH,0DH,0,0,"$"
应该是SUM DB 0,0,0AH,0DH,"$"才对,因为你后面将统计结果放在了SUM单元,而不是SUM+2的单元。
2、LEA DX,SUM ;回车换行
一句应该是LEA DX,STR 因为单独定义了这个字符串,我想你是要这样单独使用的。
其实可以把sum和str合并定义为
SUM DB 0,0
STR DB 0DH,0AH,"$"
3、如果你的结果不超过9个,那后面的程序没问题。但你读入的字符串可以到达30-1个字符(最后一个必须是回车),所以统计结果CL可能超过9,EXIT:后就应该这样修改了
MOV AL,CL
MOV AH,0
MOV CL,10
DIV CL ;统计结果的十位数在AL,个位数在AH
ADD AX,3030H
MOV SUM,AX ;正好十位在前(低地址),各位在后(高地址)
MOV AH,0AH ;显示结果
LEA DX,SUM
INT 21H
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:2
作者: shzhfu 发布时间: 2010-11-10
引用 3 楼 shzhfu 的回复:
我觉得你的程序有这样几个问题:
1、SUM DB 0AH,0DH,0,0,"$"
应该是SUM DB 0,0,0AH,0DH,"$"才对,因为你后面将统计结果放在了SUM单元,而不是SUM+2的单元。
2、LEA DX,SUM ;回车换行
一句应该是LEA DX,STR 因为单独定义了这个字符串,我想你是要这样单独使用的。
其实可以把sum和str合并定义为
SUM DB ……
我觉得你的程序有这样几个问题:
1、SUM DB 0AH,0DH,0,0,"$"
应该是SUM DB 0,0,0AH,0DH,"$"才对,因为你后面将统计结果放在了SUM单元,而不是SUM+2的单元。
2、LEA DX,SUM ;回车换行
一句应该是LEA DX,STR 因为单独定义了这个字符串,我想你是要这样单独使用的。
其实可以把sum和str合并定义为
SUM DB ……
很感谢你的回答!
作者: gkjsj 发布时间: 2010-11-10
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28