一个汇编语言小程序问题,请大神求救,题目要求是从键盘输入一个字符,判断是否是0-9的数字,并十进制输出

DATASEGMENTSTR1DB'PLEASEENTER:',0AH,0DH,'$'STR2DB'ENTERERROR!',0AH,0DH,'$'RESULTDB?,'... DATA SEGMENT
STR1 DB 'PLEASE ENTER:',0AH,0DH,'$'
STR2 DB 'ENTER ERROR!',0AH,0DH,'$'
RESULT DB ?,'$'
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX

AGAIN:
MOV AH,09H
LEA DX,STR1
INT 21H ;输入提示

MOV AH,01H
INT 21H ;输入

CMP AL,'0'
JB FALSE ;筛选数字
CMP AL,'9'
JA FALSE

FALSE:
MOV AH,09H
LEA DX,STR2
INT 21H
JMP AGAIN ;处理错误输入,并且要求用户重新输入

MOV CL,2
SHL AL,CL
MOV RESULT,AL ;对符合条件的数字左移4位,并把结果存放在RESULT变量中

MOV AH,09H
LEA DX,RESULT
INT 21H ;输出结果

MOV AH,4CH
INT 21H

CODE ENDS
END START
不知道我这个程序哪里错了?我感觉差不多了啊
运行之后,我输入一个数字之后,输出结果是一个问号.
展开
 我来答
帐号已注销

2020-11-11 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.3万
采纳率:60%
帮助的人:409万
展开全部
调用会破坏AL寄存器的内容,因此
ADD AL,30H
MOV DL,AL
INT 21H 盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果

有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项

向前压缩,最后将数组的剩余部分补上零

从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0

在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值

放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f分别考虑有符号数、无符号数情况)

一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中

设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存放在

S单元,若其中有一个数为0,则把其它两个单元也清零。请编写此程序

从键盘输入一系列字符(以回车键结束),并按字母、数字和其他字符分类计数,最后显示

这三类的计数结果

已定义两个整数变量A和B,试编写程序完成以下功能

(1)若两个树种有一个是奇数,则将奇数存入A中,偶数存入B中

(2)若两个数均为奇数,则将两个数加1后存回原变量;先输出AL里的商
不会有输出
然后,如果你输入的是3,乘4就是12,DIV指令后余数12就放到AH里,你把它传给CL再输出,0CH+30H=3CH,已经不是数字的ASCII码,你这个输出是不是有点问题,或者说你不是要在屏幕上显示12么
2014-11-28
0
其他回答1条回答
匿名用户
XOR AH, AH ;把准备存放余数的AH清零
MOV CL, 10
DIV CL ;分解数字

ADD AX, 3030H
MOV CX, AX ;为输出做准备

MOV AH, 02H ;输出部分
MOV DL, 0AH
INT 21H
MOV DL, 0DH
INT 21H ;换行

MOV DL, CL
INT 21H ;先输出AL里的商

MOV DL, CH
INT 21H ;再输出AH里的余数
2014-11-28
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

推荐于2017-09-02 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
MOV AH,01H
INT 21H ;输入

CMP AL,'0'
JB FALSE ;筛选数字
CMP AL,'9'
JA FALSE
;-----------------------
NO_FALSE:

MOV CL,2
SHL AL,CL
MOV RESULT,AL ;对符合条件的数字左移4位,并把结果存放在RESULT变量中

MOV AH,09H
LEA DX,RESULT
INT 21H ;输出结果

MOV AH,4CH
INT 21H

;-----------------------
FALSE:

MOV AH,09H
LEA DX,STR2
INT 21H
JMP AGAIN ;处理错误输入,并且要求用户重新输入
追问
这不是完全没关系么?。。。。
追答
有关系。

你的程序:

CMP AL,'0'
JB FALSE ;--小于0转移
CMP AL,'9'
JA FALSE--大于9转移

----0~9之间,当然就不转移,
----那么,往下执行什么呢?

FALSE:----难道,接着执行这些?

MOV AH,09H
LEA DX,STR2
INT 21H
JMP AGAIN ;处理错误输入,并且要求用户重新输入
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式