鱼C论坛

 找回密码
 立即注册
查看: 1383|回复: 0

写了一个简单的两个数相加,有几个问题,解决不了,还望个位大神指点指点

[复制链接]
发表于 2014-4-28 01:08:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
两个任意的十进制数相加,结果写入显存显示下面还有几个问题,解决不了
1>两个加数的位数必须一样,假如第一个是个2位数 71,那第二个数也必须是个2位数,
2>两个加数的结尾必须加0dH,例如:71 就要写成 n1 db 7,1,0dH  
3>两个加数不支持个位为0
我的代码挺乱的,如果看的麻烦,给点思路也行……
;两个数相加,输出结果

assume cs:code,ds:data,ss:stack

data segment
        n1 db 1,2,3,4,5,1,1,0,0dh        ;被加数 
        n2 db 1,2,3,4,5,1,1,0,0dH        ;加数        
        sum db 20 dup(0)                                        ;结果
data ends

stack segment
        z dw 16 dup(0)
stack ends

code segment
start:
                mov ax,data                        ;数据段
                mov ds,ax
                
                mov ax,0b872h                ;确定显示位置
                mov es,ax
                
                mov ax,stack                ;确定栈段
                mov ss,ax
                mov sp,32
                
                mov cx,0
                mov bx,0
                
                a:
                        
                        mov al,n1[bx]
                        cmp  al,0d
                        jz a1
                        inc cx
                        inc bx
                        jmp a
                a1: 
                        mov ax,cx
                        mov di,cx
                        dec di
                        mov bx,di
                        mov bx,di
                        mov cl,2
                        div cl
                        
                        
                        mov cl,al
                        mov ch,0
                        mov si,0
                        
                        
                        a2:
                                                        
                                mov al,n1[si]
                                mov ah,n1[di]
                                mov n1[si],ah
                                mov n1[di],al
                                
                                mov al,n2[si]
                                mov ah,n2[di]
                                mov n2[si],ah
                                mov n2[di],al

                                inc si
                                dec di
                                
                        loop a2
                
                mov di,10H
                mov bx,0
                
                
                mov cx,0
                
                clc                                        ;清除进位标志位
                s:
                        mov al,n1[bx]
                        mov dl,n2[bx]
                        
                        ;判断al是否等于0 
                        cmp  al,0dH
                        ;al的结果不为0就进行运算
                        jnz s1                
                        
                        mov ax,4c00h
                        int 21h                        
                                        
                s1:
                        ;相加
                        add al,dl
                        ;是否大于9
                        cmp al,10
                        jns s3
                        
                s4:
                        add al,30h
                        mov es:[di],al
                        mov byte ptr es:[di+1],03h
                        

                        inc bx
                        sub di,2
                        
                        jmp s
                
                s3:
                        sub al,10
                        js s5
                        
                s6:        add byte ptr n1[bx+1],1
                        jmp s4
                s5:
                        mov al,9
                        jmp s6
                                
code ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-30 22:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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