找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 459|回复: 11

急----十进制的加法计算--为什么和大于等于10就出错了?

[复制链接]
发表于 2009-12-3 10:13:59 | 显示全部楼层 |阅读模式 IP:江苏扬州
我的这段代码想实现任意两个十进制的数相加!
可是现在的问题是:结果如果大于或等于10的话,就会出现错误!
希望大家给改改,谢谢了!!!
能给注释的话最好,因为这段代码我看的也不是全懂,东找西凑的

程序代码如下:
DATA SEGMENT
X DB ?
Y DB ?
S DB ?
mess1 db "Input x=(0 quit)","$"
mess3 db 'Input y=','$'
mess2 db 'x+y=','$'
DATA ENDS
stack segment para stack 'stack'
dw 100 dup(?)
stack ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:stack
START: MOV AX,DATA
MOV DS,AX
l1: lea dx,mess1
mov ah,9
int 21h
MOV AH,1
INT 21H
cmp al,30h
je l2
MOV X,AL
call cr_lf
lea dx,mess3
mov ah,9
int 21h
MOV AH,1
INT 21H
MOV Y,AL
MOV AL,X
AND AL,0FH
MOV BL,Y
AND BL,0FH
ADD AL,BL
MOV S,AL
call cr_lf
push ax
mov dx,offset mess2
mov ah,9
int 21h
pop ax
OR AL,30H
MOV AH,2
MOV DL,AL
INT 21H
call cr_lf
jmp l1
l2: MOV AH,4CH
INT 21H
cr_lf proc
push ax
push dx
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
pop dx
pop ax
ret
cr_lf endp
CODE ENDS
END START
发表于 2009-12-3 10:14:03 | 显示全部楼层 IP:江苏扬州
如果大于10,则or al,30h就显示的不是10进制数
比如al=11,or al,30h之后,al=3bh
所以要显示两位的十进制数,可以进行除法操作
如: mov di,0 ;计数,表示所求的数为几位十进制数
dtoasc: xor ah,ah
mov bl,10
div bl
push ax ;此时ah为个位
inc di
cmp al,0 ;看商是否为0
jz show ;如果是0,结束操作,去显示数据
jmp short dtoasc
show: mov di,cx
pop ax
mov dl,al
or dl,30h
mov ah,02h
int 21h
loop show
仅供参考.
回复

使用道具 举报

发表于 2009-12-3 10:14:07 | 显示全部楼层 IP:江苏扬州
如果大于10,则or al,30h就显示的不是10进制数
比如al=11,or al,30h之后,al=3bh
所以要显示两位的十进制数,可以进行除法操作
如: mov di,0 ;计数,表示所求的数为几位十进制数
dtoasc: xor ah,ah
mov bl,10
div bl
push ax ;此时ah为个位
inc di
cmp al,0 ;看商是否为0
jz show ;如果是0,结束操作,去显示数据
jmp short dtoasc
show: mov cx,di //上个程序这里写错了
pop ax
mov dl,al
or dl,30h
mov ah,02h
int 21h
loop show
仅供参考.
回复

使用道具 举报

发表于 2009-12-3 10:14:10 | 显示全部楼层 IP:江苏扬州
我应该怎样做啊?
回复

使用道具 举报

发表于 2009-12-3 10:14:14 | 显示全部楼层 IP:江苏扬州
我的意思就是怎么在这段代码中改呢?请多多指教!
回复

使用道具 举报

发表于 2009-12-3 10:14:18 | 显示全部楼层 IP:江苏扬州
为什么没人改啊?郁闷!
回复

使用道具 举报

发表于 2009-12-3 10:14:22 | 显示全部楼层 IP:江苏扬州
DATA SEGMENT
X DB ?
Y DB ?
S DB ?
mess1 db "Input x=(0 quit)","$"
mess3 db 'Input y=','$'
mess2 db 'x+y=','$'
DATA ENDS
stack segment para stack 'stack'
dw 100 dup(?)
stack ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:stack
START: MOV AX,DATA
MOV DS,AX
l1: lea dx,mess1
mov ah,9
int 21h
MOV AH,1
INT 21H
cmp al,30h
je l2
MOV X,AL
call cr_lf
lea dx,mess3
mov ah,9
int 21h
MOV AH,1
INT 21H
MOV Y,AL
MOV AL,X
AND AL,0FH
MOV BL,Y
AND BL,0FH
ADD AL,BL
MOV S,AL
call cr_lf
push ax
mov dx,offset mess2
mov ah,9
int 21h
pop ax
call showdec
call cr_lf
jmp l1
l2: MOV AH,4CH
INT 21H
cr_lf proc
push ax
push dx
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
pop dx
pop ax
ret
cr_lf endp
showdec proc
push di
push bx
mov di,0 ;计数,表示所求的数为几位十进制数
dtoasc: xor ah,ah
mov bl,10
div bl
push ax ;此时ah为个位
inc di
cmp al,0 ;看商是否为0
jz show ;如果是0,结束操作,去显示数据
jmp short dtoasc
show: mov cx,di
pop ax
mov dl,al
or dl,30h
mov ah,02h
int 21h
loop show
pop bx
pop di
ret
showdec endp
CODE ENDS
END START
回复

使用道具 举报

发表于 2009-12-3 10:14:26 | 显示全部楼层 IP:江苏扬州
这个程序的结果不对啊!而且遇到有些数时好象还是死循环,屏幕一直乱跳!!!
希望大家再给改改啊!谢谢了!~
回复

使用道具 举报

发表于 2009-12-3 10:14:30 | 显示全部楼层 IP:江苏扬州
为什么还是没人来改呢?
回复

使用道具 举报

发表于 2009-12-3 10:14:34 | 显示全部楼层 IP:江苏扬州
有答案了:

DATA SEGMENT
X DB ?
Y DB ?
S DB ?,?
mess1 db "Input x=(0 quit)","$"
mess3 db 'Input y=','$'
mess2 db 'x+y=$'
DATA ENDS
stack segment para stack 'stack'
dw 100 dup(?)
stack ends
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ss:stack
START: MOV AX,DATA
MOV DS,AX
l1: lea dx,mess1
mov ah,9
int 21h
MOV AH,1
INT 21H
cmp al,'0'
je l2
MOV X,AL
call cr_lf
lea dx,mess3
mov ah,9
int 21h
MOV AH,1
INT 21H
MOV Y,AL
MOV AL,X
AND AL,0FH
MOV BL,Y
AND BL,0FH
ADD AL,BL
cbw
mov bl,10
div bl
or al,30h
mov s,al
or ah,30h
mov [s+1],ah
call cr_lf
mov dx,offset mess2
mov ah,9
int 21h
MOV AH,2
MOV DL,s
INT 21H
mov ah,2
mov dl,[s+1]
int 21h
call cr_lf
jmp l1
l2: MOV AH,4CH
INT 21H
cr_lf proc
push ax
push dx
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
pop dx
pop ax
ret
cr_lf endp
CODE ENDS
END START
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-29 13:26 , Processed in 0.213400 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表