Ответ: Как раз тут проблемы нет - код обязан быть разным. Другое дело почему обязан?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Bill 15 июля 2003 г. 01:26
В ответ на: Проблема в размере кода отправлено cipher 14 июля 2003 г. 18:12

Объясняется все очень просто. В первом случае выражение
wData = (WORD)dData;
транслируется так, что в регистры процессора копируется 4-х байтная переменная dData, а затем младшее слово копии в регистре пересылается в wData.
Во втором случае устанавливается указатель на переменную dData (регистр процессора) и далее содержимое переменной, адресуемой указателем, пересылается в переменную wData.
Естественно, что установка указателя на переменную требует меньше команд, чем загрузка самой переменной. С другой стороны, использование косвенной адресации также уменьшает размер кода.
То, что Вы написали компилятору, то и получили. Другое дело, что первый вариант выглядит более естественно и понятней, чем второй. Но простота программы и ее эффективность далеко не всегда одно и тоже. Если нет проблем с памятью, или с быстродействием - пишите проще. А когда необходимо "выжимать" байты или микросекунды из программы, то тут уж деваться некуда - приходиться на уши вставать.
Хотя на ассемблере можно еще проще написать
mov.w dData, wData
Но компилятор, похоже, до этого еще не дорос. Подождем следующей версии.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru