Вставка ассемблерного кода
- Войдите на сайт для отправки комментариев
Пт, 26/05/2017 - 01:02
Прокомментируйте пожалуйста эквивалентность кода на С (первые два оператора присваивания) и на ассемблере.
Загружаем из двух 8-битных регистров в 16-битную переменную. В ассемблере не вижу сдвига на 8, да и вообще форму записи со спецсимволами % и обратными наклонными чертами пока еще не понимаю. Последняя строчка отдаленно похожа на тернарную форму, но тоже мимо моего понимания.
И наконец, почему asm вставка объявлена volatile, она что может модифицироваться по ходу дела ?
static uint16_t out21; // out21 = ADCL; // out21 |= ADCH << 8; asm volatile( "lds %A0, %1\n\t" "lds %B0, %2" : "=w" (out21): "n"(&ADCL), "n"(&ADCH));
16-и битная переменная - это два 8-битных регистра, вот мы и видим две загрузки по 8 бит. Потому сдвига нет. объявлена volatile для подавления возможности оптимизации. Чтоб компилятор не выкинул не первую загрузку решив out21 что это действие уже раз выполнено и нет смысла его повторять.
Приведенные Си код и ассемблемрный полностью эквивалентны?
Объявлена volatile процедура, т.е. код программы ?
Где прочесть описание asm вставок с непонятными символами %\n\t "=w" ?
Приведенные Си код и ассемблемрный полностью эквивалентны?
В принципе да. Только с пунктуацией косячки.
Где прочесть описание asm вставок с непонятными символами %\n\t "=w" ?
Гугль не говорит ? :) Можно тут почитать например.
Крущь, в приведённой ссылке пунктуация описана + дана куча примеров, прочтите внимательно и увидите.
Прочту, я не лентяй. Но сходу выявить косяки не могу. Подскажите пожалуйста.
Внимательность для программиста архиважное качество.
Ваш пример
И аналогичный пример из статьи.
Всё таки попробуйте сказать, что у вас не так?
Где прочесть описание asm вставок с непонятными символами %\n\t "=w" ?
Вот Вы пользуетесь вариантом avr-gcc для MCU компании Atmel, так? И задаёте такие вопросы. Тогда Вам встречный вопрос: чем Вас не устравивает руководство на сайте производителя - компании Atmel? Или Вы туда даже не смотрели?
Ребята, я понимаю, что типа там новички и т.п., но запомните Вы наконец волшебную формулу - RTFM. Иначе будете постоянно слышать другую - GTFO!