Tak. Na początek wyrzucić RET po RJMP Piksel_rowna_sie_jeden.
A następnie, analizując ten zestaw instrukcji napisać równoważny kod:
Zaloguj się, aby zobaczyć kod
Skoro kasujesz R16 instrukcją CLR R16, to po co ładujesz tam literał przez LDI R16,0? Bez sensu.
Skoro w R16 jest zero, które wymusiłeś, to po co sprawdzać warunek czy tam jest zero? Na pewno jest.
Skoro już wywołałeś funkcję dla R16 == 0, co oznacza piksel == 0, to w jakim celu sprawdzasz w tej funkcji, czy piksel == 0? Kolejny bezsens.
Wybiegając w tych rozważaniach:
Ile tych pikseli będziesz chciał sprawdzać i jakie są wymagania czasowe? Może zamiast kaskady kolejnych porównań, łatwiej zrobić tablicę adresów funkcji obsługi poszczególnych opcji, a R16 używać do indeksowania adresu z tablicy.
Zaloguj się, aby zobaczyć kod
Takie wywołanie jest bardziej deterministyczne i dla każdego argumentu trwa tyle samo (prawie).