写了一个简单的两个数相加,有几个问题,解决不了,还望个位大神指点指点
两个任意的十进制数相加,结果写入显存显示下面还有几个问题,解决不了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]