MSC-51单片机指令中的查表问题

题目:设表格中有1024个数据项,每个数据为2个字节,表格总长度为2048个字节,现要求根据R2R3的内容从表格中找出对应的数据元素的值,并送回到R2R3中。(他上面说是利用DPH,DPL进行运算的方法进行查表) 程序如下: MOV DPTR,#TAB MOV A,R3 CLR C RLC A XCH A,R2 RLC A XCH AR2 ADD A,DPL MOV DPL,A;调整DPL,DPH MOV A,DPH ADDC A,R2 MOV DPH,A CLR A MOVC A,@A+DPTR;查表 MOV R2,A;第一字节 CLR A INC DPTR MOVC A,@A+DPTR;查第二字节 MOV R3,A RET TAB: DW XXXXH;共1024个数据项 DW XXXXH ...... DW XXXXH 本人新手,此段代码楞是搞不明白是什么意思 忘高手详解,谢谢

第1个回答  2013-11-08
我的分析不一定对,仅供参考。 基本思路是从R2R3处取偏移量,乘以2(每个数据为2个字节)通过A加给DPTR,R2加给DPL,r3加给DPH,再从DPTR处取数,交给A,再给R2R3. MOV DPTR,#TAB 表的首地址给DPTR MOV A,R3 r3的值给A CLR C C置零 RLC A A乘2(左移一位后补零) XCH A,R2 A和r2交换数值 RLC A A左移一位,即乘2 XCH A,R2 A和r2交换。至此,相当于R3乘2后给了R2,r2里存的是r3.乘2后的数,A里是r2乘2后的数。 ADD A,DPL DPL的值加给A MOV DPL,A;调整DPL,DPH 相当于把原r2里的数乘2当做偏移地址加给DPL MOV A,DPH ADDC A,R2 MOV DPH,A 相当于把原r3里的数乘2当做偏移地址加给DPH CLR A MOVC A,@A+DPTR;查表 MOV R2,A;第一字节 CLR A INC DPTR MOVC A,@A+DPTR;查第二字节 MOV R3,A RET TAB: DW XXXXH;共1024个数据项 DW XXXXH ...... DW XXXXH 因为查表的数字是双字节,所以低位给r2,高位给r3.
相似回答