+ -
当前位置:首页 → 问答吧 → masmaster,znxllyuan等,谁来给帮看下。

masmaster,znxllyuan等,谁来给帮看下。

时间:2011-02-04

来源:互联网

完成2个由用户输入的10位十进制数的加法运算。

功能:多位非组合BCD码数加
入口参数:si=代表被加数的非组合bcd码串开始地址偏移
di=代表加数的非组合bcd码串开始地址偏移
cx=bcd码串长度
addition proc
std  
add bx,cx
add si,cx
add di,cx
dec si
dec di
xchg di,bx
inc bx
clc
addp1:dec bx
lodsb
adc al,[bx]
aaa
stosb
loop addp1
mov al,0
adc al,0
stosb --->这里把结果和放在了di里了,没错吧。
cld
ret
addition endp

主程序中
。。。。。
mov si,offset num1
mov di,offset num2
mov bx,offset result
mov cx,maxlen
call addition  
mov dx,offset result
call dispnum
jmp short ok

功能:显示结果
入口参数:dx=结果缓冲区开始地址偏移
出口参数:无
dispnum proc
mov di,dx --->结果和di,怎么要换成缓冲区的?还有解释下这个显示结果子程序看不懂。
mov al,0
mov cx,maxlen
repz scasb
dec di
mov dx,di
mov si,di
inc cx
dispnu2:lodsb
add al,30h
stosb
loop dispnu2
mov ah,9
int 21h
ret  
dispnum endp

作者: yangxiang1   发布时间: 2011-02-04

自己用DEBUG调试下吧,呵呵,看看每一步寄存器的变化,慢慢找出逻辑错误.

作者: va_zaixuexi   发布时间: 2011-02-04