|
二進制做BCD加法,一定要注意每一位相加結(jié)果的調(diào)整,以轉(zhuǎn)換成BCD的數(shù)位,本程序使用二個步驟來完成結(jié)果調(diào)整,(產(chǎn)生DC標(biāo)志) 1.如果和的最低有效位是大于9的數(shù),或DC=1時,將和加6 2.經(jīng)過步驟1后,如果最高有效位大于9,或相加后C=1,則將和加上60H(即加6到MSD) 擴展程序到2位數(shù)以上時,所有位相都必須帶C標(biāo)志(或DC)一起相加,而且上面的原則沿深到每一位數(shù)的處理,即從原數(shù)相加,步驟1、步驟2的加法所產(chǎn)生的進位都必須進位到下一位。 2. 程序: 主程序 MOV Num-1 ,A MOV A ,@0X99 MOV Num-2 ,A CALL BCDAD SELF JMP SELF END Num-1=0X20; 0X20放加數(shù),0X21放被加數(shù) 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; 不是,調(diào)整,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恢復(fù)原數(shù)據(jù) JMP over1 Adjust MOV A, @6H jLSD加6調(diào)整; ADD Num-2, A Over1 mov A, @60H ;MSD加6調(diào)整, 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 |