1.如果和的最低有效位是大于9的数,或DC=1时,将和加6
2.经过步骤1后,如果最高有效位大于9,或相加后C=1,则将和加上60H(即加6到MSD)
扩展程序到2位数以上时,所有位相都必须带C标志(或DC)一起相加,而且上面的原则沿深到每一位数的处理,即从原数相加,步骤1、步骤2的加法所产生的进位都必须进位到下一位。
2. 程序:
主程序
MAIN MOV A ,@0X99 ;
MOV Num-1 ,A
MOV A ,@0X99
MOV Num-2 ,A
CALL BCDAD
SELF JMP SELF
END
Num-1=0X20; 0X20放加数,0X21放被加数
Result=0X20; 运行后和放在0X21,进位
Num-2=0X21; 放到0X20中
0-Flow=0X21;
;加法子程序
BCDADD MOV A,Num-1
ADD Num-2, A; 作二进制加法
CLR Num-1
RLC Num-1; 保存进位
JBC STATUS, DC; DC=0?
JMP Adjust; 不是,调整,LSD
MOV A, 0X06;
ADD Num-2, A; 通过LSD加6,测试LSD>9否
JBC STATUS, ;判断C=1?
INC Num-1
JBC STATUS , DC;DC=0?
SUB Num-2 ;LSD<9恢复原数据
JMP over1
Adjust MOV A, @6H jLSD加6调整;
ADD Num-2, A
Over1 mov A, @60H ;MSD加6调整,
ADD Num2, A
JBC STATUS,C ;MSD<9
JMP over3
JBC Num-1, 0
SUB Num-2 ;
RET
Over3 MOV A,@01H ;保存和的进位
MOV Num-1,A
RET