Цитата(d7d1cd @ Nov 14 2012, 23:02)

Просматривая дизасм, постоянно вижу, что к регистрам периферийных устройств обращение идет как в первой команде, а к адресам в ОЗУ или во флеш - как во второй. Может это как то связано с компиляцией исходных текстов?
Если смотреть глубже, то разница в том, что это
символьный и
абсолютный режимы адресации, которые в свою очередь используют
индексную адресацию. См.
Table 3−3. Source/Destination Operand Addressing Modes в User's Manual. Разница у них в том, что в случае символьного режима регистром служит PC, а в абсолютном режиме используется генератор констант SR. Периферийные модули имеют фиксированные адреса поэтому для них использовать символьный режим адресации это нормально. А вот при выполнении программы обращение к соседним ячейкам памяти с использованием абсолютного режима адресации может давать преимущество в сокращении длины инструкции на одно слово (две слова, вместо трех). В вашем же примере команда BIC.B #0080, &0029 имеет длину три слова при любом из перечисленных способов адресации. Потому, что первый операнд адресуется непосредственно (занимает одно слово непосредственно за кодом команды), а второй операнд можно адресовать хоть в символьном режиме, хоть в абсолютном режиме - без разницы, т.к. его адрес расположен в области периферийных модулей и не может быть адресован из Flash с помощью только одного генератора констант (требуется еще одно слово для указания адреса источника).