欢迎来到天天文库
浏览记录
ID:55168922
大小:10.32 KB
页数:4页
时间:2020-04-30
《单片机汇编进制转换问题-十六进制-十进制-BCD.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、此属本人原创请尊重知识产权:多字节十六进制转换为十进制(多字节十六进制除十运算)MOV40H,#0FFH;三字节数据的低位存放地址MOV41H,#0FFHMOV42H,#0FFH;三字节数据的高位存放地址MOVR0,#50H;转换后十进制数存放的首地址(个位)MOVR2,#7;取十进制的位数减一(如FFFFFFH转换为十进制是,八位减一就是7)CFYS:MOVR1,#40H;给高字节地址MOVB,#00H;避免影响下一轮运算SCCF:MOVA,@R1ANLA,#0F0H;屏蔽低四位ORLA,B;合并给A(被除数)SWAPAMOVB,#10DIVA
2、BSWAPA;高位在AXCHA,@R1;商高位在ANLA,#0FH;屏蔽高四位XCHA,BSWAPAORLA,B;合并给A(被除数)MOVB,#10DIVABORLA,@R1;合并给A(被除数)MOV@R1,AINCR1CJNER1,#43H,SCCF;是否完成一次除十运算MOV@R0,BINCR0DJNZR2,CFYS;是否完成全部运算MOV@R0,A(以上程序编写于2014/10/03上午)BCD码和十六进制的转换大家都知道汇编语言里把十六进制转换为BCD码用DA指令,但是没有哪条指令能把BCD码转换为16进制,我曾经也很为此困惑,但最终我解
3、决了此问题,看程序!假如R0里储存的是37分钟的BCD码,那么R0里的数是37H,要把它转换成37的十六进制25H存入R1中。我们现实的算法是37/16=25H就可以得出结果,但是机器没那么聪明,因为37H是十六进制。汇编程序解决的方法如下:MOVA,R0;ANLA,#0FH;屏蔽高4位(即屏蔽分钟的十位)MOVR2,A;把个位的值给R2MOVA,R0;ANLA,#0F0H;屏蔽低4位(即屏蔽分钟的个位)SWAPA;高低字节互换MOVB,#10;给B赋值(也可以赋0AH)MULAB;A乘B得出十位的十六进制值ADDA,R2;十位的值加上个位的值M
4、OVR1,A;把转换好的十六进制值给R1(以上程序编写于2014/09/13中午)
此文档下载收益归作者所有