реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Какая разница?
d7d1cd
сообщение Nov 14 2012, 02:54
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Привет всем. Никак не могу найти ответ на простой, казалось бы, вопрос. Следующие команды:

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


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

Поясните, пожалуйста, в чем же различие?

Сообщение отредактировал d7d1cd - Nov 14 2012, 02:54
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 14 2012, 17:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(d7d1cd @ Nov 14 2012, 07:54) *
Поясните, пожалуйста, в чем же различие?
Вторая запись правильная. А первую компилятор на самом деле интерпретирует как вторую, тем самым автоматически исправляя вашу ошибку.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Nov 14 2012, 18:02
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 442
Регистрация: 26-11-10
Пользователь №: 61 199



Цитата(rezident @ Nov 14 2012, 21:43) *
А первую компилятор на самом деле интерпретирует как вторую, тем самым автоматически исправляя вашу ошибку.


Но такую запись не я написал. Ее мне дизассемблер выдал. Причем он в одном случае выдает команды вида как первая команда, в другом как вторая. Да и hex коды у них разные...
Просматривая дизасм, постоянно вижу, что к регистрам периферийных устройств обращение идет как в первой команде, а к адресам в ОЗУ или во флеш - как во второй. Может это как то связано с компиляцией исходных текстов?

Сообщение отредактировал d7d1cd - Nov 14 2012, 18:19
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 15 2012, 00:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



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

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

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th August 2025 - 02:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016