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