Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Есть ли в IAR C аналоги асемблерных команд ROL и ROR циклического сдвига. Может существуют какие-нибудь intrinsic functions или что-нибудь еще?
Отправлено
Ale3000
01 июня 2007 г. 07:03
Составить ответ
|
Вернуться на конференцию
Ответы
А для чего собственно надо двигать с учетом переноса? Может стоит задуматься о глобальное смене алгоритма? На asm такие вещи применяют, когда надо сдвинуть многобайтные слова. На С такого не требуется, так как можно просто объявить тип int или long int
—
Elektronik
(01.06.2007 10:57:37
194.85.99.225
,
пустое
)
Нет, и это не нужно. Эти команды легко реализуются стандартными средствами Си при помощи операторов << и >>.
—
Вяч
(01.06.2007 10:23:22
193.110.112.141
,
пустое
)
Ну-ну... ROR/ROL сдвигает через перенос. А << и >>?
—
Quasy
(01.06.2007 10:35:11
80.243.9.34
,
пустое
)
А кто не даёт организовать бит переноса программно?
—
Вяч
(01.06.2007 10:41:17
193.110.112.141
,
пустое
)
Настоящий, полученный в результате АСМ-команды - оптимизатор помешает. Команды, которой Вы ждете, просто может не быть.А крутить фальшивый бит - это уже хня. (+)
—
Quasy
(01.06.2007 10:56:45
80.243.9.34
, 1300 байт)
Да нет, уважаемый коллега, это не хня. Я неоднократно реализовывал подобную операцию, и никакой оптимизатор мне не мешал. Просто перед сдвигом надо анализировать старший или младший бит (соответственно) сдвигаемой переменной, установить флажок в соответствующее состояние (предварительно сохранив в другом флажке его старую величину), а после сдвига сохранённый флажок записать в соответсвующий бит сдвинутой величины.
—
Вяч
(01.06.2007 11:10:25
193.110.112.141
,
пустое
)
Видимо, Ваш лексикон богаче. А по мне - не допускать подобную хню :)
—
Quasy
(01.06.2007 12:16:32
80.243.9.34
,
пустое
)
А что, раздела intrinsic в мануале нет?
—
AlexD
(01.06.2007 08:30:28
193.200.21.5
,
пустое
)
Есть, но там такой функции нету.
—
Ale3000
(01.06.2007 08:45:56
87.241.198.38
,
пустое
)
Значит придётся браться за АСМ... или забить на это и написать чёта типа int res = a ; res <<= 1; a = res; a |= (res >> 8); есть надежда, что отделаешься гдето 5ю командами. Или изменить алгоритм.
—
AlexD
(01.06.2007 10:10:38
193.200.21.5
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru