Цитата(=GM= @ May 22 2008, 16:03)

Выше был выбран неудачный пример, пусть LOW v8goto=0xF0, а k=19, вполне реальные числа, у меня три таких вычисляемых GOTO с Кмах=36, 36 и 60. Как видите, адрес чётный и есть перенос при первом сложении.
Не скажу, что я не вижу способов решения задачи, они есть, но все они какие-то громоздкие, крокозябистые...или у меня руки кривые, или это следствие корявой архитектуры и системы команд для пиков, одно из двух (:-).
Опять же, для расчёта количества оборотов двигателя в минуту написал программу деления двух 32-битных чисел, еле поместился в 900 с лишком машинных циклов, ну можно скинуть сотню-другую циклов, но...как-то некрасиво всё выходит (:-(.
Да ВЫ правы корректнее
Код
movlw HIGH v8goto
movwf PCLATH
bcf STATUS, C
rlcf k, w
btfsc STATUS, C
incf PCTATH, f
addlw LOW v8goto
btfsc STATUS, C
incf PCTATH, f
movwf PCL
TablJMP code 0xYYY00 ;для принудительного расположения в ПЗУ программ
;переносы можно упустить при к < 128
v8goto
bra v8mf0 ;k=00
bra v8mf1 ;k=01
bra v8mf0 ;k=02-MF2(cylinder 1 & 5)
bra v8mf0 ;k=03
bra v8mf0 ;k=04
и т.д.
Лучше стараться поместится в страницу 128 переодов и распологать принудительно внутри страници ПЗУ - тогда можно не принимать во внимение перенос - экономить такты и восплользоваться Вашим первым вариантом кода.
Архитектура имеет свои плюсы и минусы. Думаю спор о приемуществах и недостатках приведет к

.
Хотя согласен с Вами - математика большой производительностью не блещет. Деление занимет много времени. - ограничение ситемы команд.
Тут наверное или мириться или менять CPU.
Удачи!