|
二進制做BCD加法,一定要注意每一位相加結果的調整,以轉換成BCD的數位,本程序使用二個步驟來完成結果調整,(產生DC標志) 1.如果和的最低有效位是大于9的數,或DC=1時,將和加6 2.經過步驟1后,如果最高有效位大于9,或相加后C=1,則將和加上60H(即加6到MSD) 擴展程序到2位數以上時,所有位相都必須帶C標志(或DC)一起相加,而且上面的原則沿深到每一位數的處理,即從原數相加,步驟1、步驟2的加法所產生的進位都必須進位到下一位。 2. 程序: 主程序 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 |