|
使用二進(jìn)制數(shù)做2位數(shù)BCD減法(即做二個數(shù)補(bǔ)碼的加法),但須注意調(diào)整其相減結(jié)果成為正確的BCD數(shù)。 1.如果差的低4位(LSD)>9,則 從LSD減去6(產(chǎn)生的DC被加到下一位數(shù)) 2.步驟1它成后,如果差的高4位(MSD)>9,則從MSD減去6。 一般擴(kuò)展到二位數(shù)以上時,每個BCD位都使用以上的原則,標(biāo)志的測試(步驟2)是在二補(bǔ)碼的加法完成后進(jìn)行,當(dāng)0X20=9,結(jié)果是VE,取十補(bǔ)碼以取得它的值。 2. 程序: mov Num-1 , A mov A ,@0x99 mov Num-2 , A call BCDSUB mov A , @0X99 mov Num-1, A mov A , @0x00 mov A , Num-2 call BCDSUB SELF goto SELF end Num-1=0X20 Result=0X20 Num-2=0X21 0-flow=0X21; BCDADD mov A,Num-1;做二進(jìn)制減法 SUb Num-2, A CLR Num-1; RLC Num-1; 保存進(jìn)位 JBS STATUS, DC; DC=1? JMP Adjust; 不是,LSD調(diào)整 JBS Num-2, 3 JMP Over-1 JBC Num-2,2 JMP adjust1;LSD結(jié)果調(diào)整 JBS Num-2,1 JMP Over-1 Adjst1 mov A ,@6 ;不是,轉(zhuǎn)到MSD進(jìn)行處理 JMP over1 ;LSD調(diào)整(減6) Sub Num-2,A Over-1 JBS Num-1,0 ;C=0? JMP adjst2 ;是,進(jìn)行MSD調(diào)整 CLR Num-1 JBS Num-2,7 ;不是,MSD>9? RET JBC Num-2 ,6 JMP Adjst2 JBS Num-2 ,5 RET adjst2 mov A , @0X60 ; MSD調(diào)整 Sub Num-2 , A CLR Num-1 , JBS STATS,C MOV A , 1 MOV Num-1,A Over RET <!-- Search Google --> |