ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
8 июля
249774 Топик полностью
mazur (24.04.2011 12:59, просмотров: 75) ответил fk0 на Многие компиляторы это (switch-case) умеют лучше тебя... в плане оптимизации.
Давай разберем варианты. Первый вариант. ; В r16 состояние автомата. cpi r16,0 breq Label_1 cpi r16,1 breq Label_2 Неплохой вариант, минус-" -64 < k <+63 " Относительно компактно. Приведенный мною вариант: .macro Case cpi STREG,@0 brne Exit_Case rjmp @1 Exit_Case: .endmacro Позволяет перейти практически куда угодно. Минус-если много кейсов, жрет много кода. Третий-самый компактный вариант-индексный переход: ; В r16 состояние автомата. cpi r16,States_Quantity clr ZH mov ZL,r16 ldi ZL,LOW(-Table_States*2) ldi ZH,HIGH(-Table_States*2) lpm r17,Z+ lpm r16,Z movw ZH:r17,ZL:r16 ijmp Возможно есть варинаты оптимальнее. Укажи. Буду знать.