汇编语言小程序,急!题目要求键盘输入一个数字,然后乘以4倍,然后输出,我运行程序后,输入3-9都得不到结果

DATASEGMENTSTR1DB'PLEASEENTER:',0AH,0DH,'$'STR2DB0AH,0DH,'ENTERERROR!',0AH,0DH,'$'DAT... DATA SEGMENT
STR1 DB 'PLEASE ENTER:',0AH,0DH,'$'
STR2 DB 0AH,0DH,'ENTER ERROR!',0AH,0DH,'$'
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

JMP NOFALSE

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

NOFALSE:
SUB AL,30H ;从ASCII转化为数字
SHL AL,1
SHL AL,1

XOR AH,AH ;把准备存放余数的AH清零
MOV CL,10H
DIV CL ;分解数字

MOV CL,AH ;为输出做准备

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

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

ADD CL,30H
MOV DL,CL
INT 21H ;再输出AH存入BL里的余数

MOV AH,4CH
INT 21H

CODE ENDS
END START

在线等啊!
貌似是除那里出错了,不应该用16进制,即MOV CL,10H改成MOV CL,10

但是这个程序在我一个同学(相同系统,相同位数,编译器相同),但是帮我编译出来的EXE是OK的,但是我的还是错的!
展开
 我来答
gcbjoy
推荐于2018-01-01 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1.1万
采纳率:92%
帮助的人:2184万
展开全部
        DATA  SEGMENT
        STR1  DB        'PLEASE ENTER:',0AH,0DH,'$'
        STR2  DB        0AH,0DH,'ENTER ERROR!',0AH,0DH,'$'
        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

              JMP       NOFALSE

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

    NOFALSE:
              SUB       AL,30H      ;从ASCII转化为数字
              SHL       AL,1
              SHL       AL,1

              XOR       AH,AH       ;把准备存放余数的AH清零
              MOV       CL,10       ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
              DIV       CL          ;分解数字
              MOV       CX,AX       ;;;;;;;;;;;;;;

             ; MOV       CL,AH       ;为输出做准备

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

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

              ADD       CH,30H
              MOV       DL,CH
              INT       21H         ;再输出AH存入BL里的余数

              MOV       AH,4CH
              INT       21H

        CODE  ENDS
              END       START
小帆向前冲
2014-11-27 · TA获得超过188个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:154万
展开全部
首先说一个错误的地方,DOS2号功能的调用会破坏AL寄存器的内容,因此
ADD AL,30H
MOV DL,AL
INT 21H ;先输出AL里的商
不会有输出
然后,如果你输入的是3,乘4就是12,DIV指令后余数12就放到AH里,你把它传给CL再输出,0CH+30H=3CH,已经不是数字的ASCII码,你这个输出是不是有点问题,或者说你不是要在屏幕上显示12么
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-11-27 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
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里的余数
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式