【1】表格中存放了1024个数据,编号0-1023项。每个数据2个字节。
【2】R3,R2,构成16位的编号。二进制格式。编号为x。
【3】第x项的数据起始地址应为 TAB+(2*x)。
【4】2*x,其实就是左移一次x。由于x是16位的。但51没有16位循环左移指令。
【5】借助于A,利用带进位位循环左移RLC A指令,完成R3,R2左移一次。其中,低位的R2部分,左移时,R2最高位借助于Cy进位位补足到R3的最低位。
理解一下RLC A这条指令的功能,影响的标志位就可以了。
MOV DPTR,#TAB
MOV A,R3 ; 如R2R3 = 0292H = 0000 0010 1001 0010 ( 十进制 658 )
CLR C ; C =0 A= 1001 0010
RLC A ; A = 0010 0100 C = 1 ( 左移一位)
XCH A,R2 ; A <=> R2 A = 0000 0010 C=1
RLC A ; A = 0000 0101 C = 0 ( 左移一位)
XCH AR2 ; A <=> R2 R2=0000 0101 A = 0010 0100 ( 十六进制 0524H)
ADD A,DPL ; ( 十进制 1316)
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