我在写程序中,要用到PC指针,实际上我用到的这个PC指针是ROM表格的地址。我是在单片机初始化复位后,把ROM表格的数据传送给RAM地址中去,但是瑞萨M16C/60的 内部ROM(程序区)是 XXXXXH~FFFFFH的,(即该指针是20位,相当于比一个字还要多4位)。所以我采用了如下的方法:
ADD.W #Label1, GPR1
MOV.W GPR1, A0
LDE.B(.W) 0F0000H[A0], TEMP1
注:表格中有若干个参数组,每个参数组下面有n个数据,此GPR1相当于n;另外,表格中并未对每个参数组设定相应的标号,故要查询这个参数时需计算出具体地址。
假如给每个参数组都写上标号,则多少个参数就要多少个赋值语句,故考虑到程序的简洁性,采用查询具体地址的方法,然后下一个参数的查询,只需加上一个偏移量即可。
这样可以达到目的(当然以上是基于我计算的GPR1最高位不会溢出的前提下,也就是使最后计算的地址保证在FFFFFH以内),也就是说ADD.W #Label1, GPR1这条语句里面,实际上是只取了Label1的低16位地址来计算,高4位并没有处理, 这里就出现个问题,编译时提示警告:16-bits value is out of range -32768--65535.请问此警告是否有影响?或是否有其他更好的程序编写处理方法避免这个警告?