-> -= I =- <-
Значи и аз първо тръгнах по методът казан по-горе, но той е удобен само за случея
512, иначе ако имаш повече комбинации трябва да се прави цикъл за изследване на битовте на старшият байт и ... по-сложно става, повече време ще отнеме.
-> -= II =- <-
Най-бързо си е с две таблици за висока и за ниската "част".
ОБАЧЕ ключа от палатката се окрива в това
Просто вместо да имаш директно retlw от LOW таблиците , ще имаш goto value_1 , goto value_2 и т.н вярно писане ще е, ама си има начини да го напишеш и по бързо , та така.
от HI_BYTE разбираш коя е ниската таблица, която ти трябва, а в ниската препращаш към стойностите, всяка стойност е с към отделен label.
Това е най-простото и най-бързото.
Имаш:
общо 1 call, 2 goto скока (1 от HI_TABLE , 1 от LOW_TABLE ) , 1 return
+ 4 цикъла за достигане на стойността
+ 4 цикъла за самото взимане на стойност
или общо 4 * 2 + 8 = 16 цикъла
ето грубо как изглежда.
А по първият метод ако са повече от 512 комбинации няма просто да правиш едно btfsc/btfss, ами ще излседваш бит 0 , ще въртиш рег, прави се цикъл ... , а всъщност идеята каква е пак да определиш в кой подред кош от 256комбинации си. А ти номера на коша вече го имаш самият ВИСОК БАЙТ ти го казва.
Единственит проблем е че решението е простичко по механизъм , затова е и бързо де

, но минусът му е много описване. Въпреки че пак казвам аз леко като се замисля и се сещам бегло за 1 , 2 начина как може да се реши проблема с написването на таблиците и стойностите.
edit: е да забравих и да кажа 500 комбинации отнемат ~3kb думи код
500 * 5 (всеки етикет е по 5 инструкции) = 2500 думи
2 low tables * 256 goto + 2 (mov&add) = 514
1 hi table * ( 2 goto + 2 (mov&add)) = 4
---
3018 думи, но отнема 16 цикъла да получиш стойността
искаш таблици -> това са таблици, просто заемат място , ако може да изчисляваш на резултата ще е по-добре.
Лично за мен това е доброто решение.