为之疯狂 发表于 2014-4-28 01:08:59

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

两个任意的十进制数相加,结果写入显存显示下面还有几个问题,解决不了
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
                        cmpal,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
                              mov ah,n1
                              mov n1,ah
                              mov n1,al
                              
                              mov al,n2
                              mov ah,n2
                              mov n2,ah
                              mov n2,al

                              inc si
                              dec di
                              
                        loop a2
               
                mov di,10H
                mov bx,0
               
               
                mov cx,0
               
                clc                                        ;清除进位标志位
                s:
                        mov al,n1
                        mov dl,n2
                        
                        ;判断al是否等于0
                        cmpal,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:,al
                        mov byte ptr es:,03h
                        

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

页: [1]
查看完整版本: 写了一个简单的两个数相加,有几个问题,解决不了,还望个位大神指点指点