欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

哪位高手帮忙看看这个汇编程序

更新时间: 2014-01-05 03:17:35 责任编辑: Author_N1

 

谁帮忙看看这个汇编程序!
DATA SEGMENT

NUM1 DB 10 DUP(?)
NUM2 DB 10 DUP(?)


DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

START:
MOV AX,DATA
MOV DS,AX

;;;;;;;输入一个字符,并判断这个字符是否是数字字符

JUDGE_NUMBER PROC near
Begin:
PUSH AX

MOV AH,08H ;;;;无回显地输入一个字符
INT 21H

CMP AL,'0'
jb Begin

CMP AL,'9'
ja Begin


MOV BL,AL;;;;;;;bl用来接收判断之后的字符

        

        ;;;;;;;;;;;;;;;;;;;;;;
MOV DL,BL
MOV AH,2H
INT 21H
;;;;;;;;;;;;;;;;;;;;;;
POP AX
RET 
JUDGE_NUMBER ENDP



;;;;;;;将字符转换为数字

CHANGE_TO_NUMBER PROC near
PUSH BX
PUSH AX
PUSH DX

MOV AL,'0'
SUB BL,AL


MOV CL,BL  ;;;;;将数字字符传给cl

POP dx
POP AX
POP bX

RET 
CHANGE_TO_NUMBER ENDP


FIRST:
CALL JUDGE_NUMBER
CALL CHANGE_TO_NUMBER 
mov num1,cl

SHOW_ADD_SIGN:
MOV dl,'+'
MOV AH,2H
INT 21H
SECOND:
call JUDGE_NUMBER
CALL CHANGE_TO_NUMBER 
MOV NUM2,CL

SHOW_EQUAL_SIGN:
MOV DL,'='
MOV AH,2H
INT 21H

PLUS: MOV AL,NUM1
MOV BL,NUM2
MOV AL,BL

MOV DL,AL
MOV AH,2H
INT 21H

CODE    ENDS
END  START

--参考方法--
1. 程序流程上不对,子程不应该嵌入在执行序列中间,否则会直接进入子程而导致执行流程混乱;通常是将它们独立出来放置,比如放在 start: 之前,或者是“结束程序返回DOS” 的调用之后。
2. 程序最后没有“结束程序返回DOS” 的调用,最直接的结果就是即便程序执行流程正确,完成了预定功能后,也不能返回,通常是死机失去响应。
3. 对两输入数进行运算,应该是 add AL, BL 吧而不是现在的 MOV 指令。
4. 输出结果时,应该和输入时有个对应的过程,将数值转换为相应的数字字符,最简单的就是加 '0' 了。
5. 这样简单的输出,就要求计算结果只能是个位数了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:35
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20468/
本文WWW.DOC100.NET DOC100.NET版权所有。