+ -
当前位置:首页 → 问答吧 → 还是很简单

还是很简单

时间:2010-11-09

来源:互联网

题目:从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数。

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



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'.

作者: asmlearn   发布时间: 2010-11-10

BUF DB "Plase Input A Character String:$"
定义字符串,在用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  

作者: 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 ……

很感谢你的回答!

作者: gkjsj   发布时间: 2010-11-10