Цитата(Сергей Борщ @ May 21 2010, 12:35)

Какой адрес у регистра USARTа? Каков допустимый диапазон адресов у команды cbi? Как бы вы сделали это на ассемблере?
Да, это я запамятовал... Но следующий пример зачем он сделал так?
Цитата(Сергей Борщ @ May 21 2010, 12:35)

А может там дальше идут еще обращения к соседним регистрам? И потратив 2 слова на загрузку адреса в Z компилятор экономит по слову на каждой следующей команде lds/sts. Если идет обращение r-m-w хотя бы к двум регистрам, такое решение уже оказывается на 2 слова короче.
Нет там ничего. Это обработка прерывания, состоящая из двух строк:
Код
UCSR0B &= ~_BV(TXCIE0);
50a: e1 ec ldi r30, 0xC1; 193
50c: f0 e0 ldi r31, 0x00; 0
50e: 80 81 ld r24, Z
510: 8f 7b andi r24, 0xBF; 191
512: 80 83 st Z, r24
PORTD &= ~_BV(PD6);
514: 5e 98 cbi 0x0b, 6; 11
Из-за этого ему приходится дополнительно сохранять/восстанавливать регистры r30/r31