我试图通过向程序计数器添加某个索引来在程序集中使用简单的查找表。它似乎在PCL
(so until 0xff
) 的范围内工作,但之后,当PCH
进入播放时,指令PCH
后刚刚重置。addwf
添加后如何防止PCH
重置?我是否需要以某种方式操纵PCLATH
and以保持其价值。PCLATU
PCH
我正在使用带有 mpasm 汇编器的 pic18f25k50。
所以这个查找表工作正常:
TABLE_GET_VALUE
movf index, 0 ; memory location = 0x9E
mullw 4
movf PRODL, 0
addwf PC
movf 0x20, 0
return
movf 0x21, 0
return
movf 0x22, 0
return
movf 0x23, 0
return
movf 0x24, 0
return
movf 0x25, 0
return
movf 0x26, 0
return
movf 0x27, 0
return
movf 0x28, 0
return ; memory location = 0xC8
而这个将程序重置回第一条指令:
TABLE_GET_COEFFICIENT
movf index, 0 ; memory location 0x108
mullw 4
movf PRODL, 0
addwf PC
movf 0x30, 0
return
movf 0x31, 0
return
movf 0x32, 0
return
movf 0x33, 0
return
movf 0x34, 0
return
movf 0x35, 0
return
movf 0x36, 0
return
movf 0x37, 0
return
movf 0x38, 0
return ; memory location 0x132