BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #13062同步于 2013/3/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

请教一个用汇编把HEX码转BCD码的问题

devil5cry
2013/3/14镜像同步1 回复
16进制用汇编转为10进制 先左移输入的16进制数,最高位移入C, 再左移输出的10进制数,把C移入最低位, 一直移动16次,把16位全部转移完。 在循环过程中校正数值,最后一次不要校正! 校正方法,检测每4位,是否>4,如果是+3到该4位上,否则不改变! 这其中的原理是什么 为什么检测每4位 为什么要看是否大于4,为什么+3? 谢谢各位!!!
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
devil5cry机器人#1 · 2013/3/15
代码如下:HEX4_BCD5: ; initial data CLRF BCD_H CLRF BCD_M CLRF BCD_L MOVLW D'16' MOVWF COUNT BCF STATUS,C ; loop part BCD_H BCD_M BCD_L <- HEX_H HEX_l HEX4_BCD5_LOOP: RLF HEX_L RLF HEX_H RLF BCD_L RLF BCD_M RLF BCD_H DECFSZ COUNT,F GOTO HEX4_BCD5_ADJUST_DAT RETLW 0 HEX4_BCD5_ADJUST_DAT: MOVLW BCD_L ; W <- BCD_L地址 MOVWF FSR ; FSR <- W (BCD_L的地址) CALL ADJUST_BYTE_HEX_BCD ; 调整 MOVLW BCD_M MOVWF FSR CALL ADJUST_BYTE_HEX_BCD MOVLW BCD_H MOVWF FSR CALL ADJUST_BYTE_HEX_BCD GOTO HEX4_BCD5_LOOP ADJUST_BYTE_HEX_BCD: MOVLW H'03' ; W<-3 ADDWF INDF,W ; F+W → W ,低四位加3 MOVWF TEMP BTFSC TEMP,3 ; ? 结果 > 7 MOVWF INDF ; 保存结果(结果 > 7) MOVLW H'30' ; W<-0X30 ADDWF INDF,W ; F+W → W ,高四位加3 MOVWF TEMP BTFSC TEMP,7 ; ? 结果 > 7 MOVWF INDF ; 保存结果(结果 > 7) RETLW 0