一个汇编语言小程序问题,请大神求救,题目要求是从键盘输入一个字符,判断是否是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
不知道我这个程序哪里错了?我感觉差不多了啊
运行之后,我输入一个数字之后,输出结果是一个问号. 展开
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
不知道我这个程序哪里错了?我感觉差不多了啊
运行之后,我输入一个数字之后,输出结果是一个问号. 展开
2个回答
展开全部
调用会破坏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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 ;处理错误输入,并且要求用户重新输入
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 ;处理错误输入,并且要求用户重新输入
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |