|
發布時間: 2020-3-30 16:03
正文摘要:如題,在做一道十進制1+2+3+4+……+100的單片機匯編題目,最后要求結果轉換為BCD碼形式,也就是輸出為5050。 我現在是高位低位分開存,利用進位標志符來做的累加(ADDC),最后得到了十六進制輸出13BA。現在遇到的 ... |
|
不知道是誰想出來的扯蛋題目 用匯編去轉換BCD碼干嘛呢?完成運算之后,拆分出來直接顯示不就可以了嗎? 你這個加法是超過了256的,要用兩個地址來存放一個16進制數的 一個16進制數最大數是:65535 在進行BCD碼運算中,你要用到三個地址的,結果應該是005050才是,而不是5050 |
|
入口條件:待轉換的雙字節十六進制整數在R6、R7中。 出口信息:轉換后的三字節BCD碼整數在R3、R4、R5中。 影響資源:PSW、A、R2~R7 堆棧需求: 2字節 HB2: CLR A ;BCD碼初始化 MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H ;轉換雙字節十六進制整數 HB3: MOV A,R7 ;從高端移出待轉換數的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ;BCD碼帶進位自身相加,相當于乘2 ADDC A,R5 DA A ;十進制調整 MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A ;雙字節十六進制數的萬位數不超過6,不用調整 DJNZ R2,HB3 ;處理完16bit RET |