<br /><br /><br /><br />今天看了一个程序,由于是初学者,对其中的奥妙不是特别的懂,望各位大侠帮忙解释下,谢谢哦,谢谢哦。。。<br /><br />多字节BCD码加法 <br />入口条件:字节数在R7中,被加数在[R0]中,加数在[R1]中。 <br />出口信息:和在[R0]中,最高位进位在CY中。 <br />影响资源:PSW、A、R2 堆栈需求: 2字节 <br />BCDA: MOV A,R7 ;取字节数至R2中 <br />MOV R2,A <br /><font color=#000000><font color=#0000FF>ADD A,R0 ;初始化数据指针 </font></font><br /><font color=#000000><font color=#0000FF>MOV R0,A </font></font><br /><font color=#000000><font color=#0000FF>MOV A,R2 </font></font><br /><font color=#000000><font color=#0000FF>ADD A,R1 </font></font><br /><font color=#000000><font color=#0000FF>MOV R1,A </font></font><br /><font color=#000000><font color=#0000FF>CLR C</font> </font><br /><font color=#FF0000>BCD1: DEC R0 ;调整数据指针 </font><br /><font color=#FF0000>DEC R1 </font><br />MOV A,@R0 <br />ADDC A,@R1 ;按字节相加 <br />DA A ;十进制调整 <br />MOV @R0,A ;和存回[R0]中 <br /><font color=#008000>DJNZ R2,BCD1 ;处理完所有字节 </font><br />RET <br /><br /><font color=#0000FF></font><font color=#0000FF>疑问:</font> <br /><font color=#0000FF>1、蓝色部分:功能是把A上的数据放到R0,R1,为什么不用MOV R0,A MOV R1,A?</font> <font color=#FF0000></font><br /><font color=#FF0000>2、红色部分:搞不懂为什么又要自减了?</font> <br /><font color=#008000>3、绿色部分:不明白?循环的程序中好像没出现R2?</font> <br /><br /><font color=#008000></font>呵呵,初学者,问题比较浅,望大家帮忙哦~拜谢了。。。 |
|