Я пытаюсь использовать простые таблицы поиска в сборке, добавляя определенный индекс к счетчику программы. Кажется, он работает в диапазоне от PCL
(так до 0xff
), но после этого, когда PCH
начинает играть, PCH
просто сбрасывается после инструкции addwf
.
Как я могу предотвратить сброс PCH
после добавления? Нужно ли каким-либо образом манипулировать PCLATH
и PCLATU
, чтобы PCH
сохранил его значение.
Я использую pic18f25k50 с ассемблером mpasm.
Таким образом, эта справочная таблица работает нормально:
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