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