Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Какая разница?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
d7d1cd
Привет всем. Никак не могу найти ответ на простой, казалось бы, вопрос. Следующие команды:

Код
BIC.B   #0080, 0029
BIC.B   #0080, &0029


выполняют одно и то же.

Поясните, пожалуйста, в чем же различие?
rezident
Цитата(d7d1cd @ Nov 14 2012, 07:54) *
Поясните, пожалуйста, в чем же различие?
Вторая запись правильная. А первую компилятор на самом деле интерпретирует как вторую, тем самым автоматически исправляя вашу ошибку.
d7d1cd
Цитата(rezident @ Nov 14 2012, 21:43) *
А первую компилятор на самом деле интерпретирует как вторую, тем самым автоматически исправляя вашу ошибку.


Но такую запись не я написал. Ее мне дизассемблер выдал. Причем он в одном случае выдает команды вида как первая команда, в другом как вторая. Да и hex коды у них разные...
Просматривая дизасм, постоянно вижу, что к регистрам периферийных устройств обращение идет как в первой команде, а к адресам в ОЗУ или во флеш - как во второй. Может это как то связано с компиляцией исходных текстов?
rezident
Цитата(d7d1cd @ Nov 14 2012, 23:02) *
Просматривая дизасм, постоянно вижу, что к регистрам периферийных устройств обращение идет как в первой команде, а к адресам в ОЗУ или во флеш - как во второй. Может это как то связано с компиляцией исходных текстов?

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