|
Реализация битовых сдвигов в IAR C |
|
|
|
Apr 15 2006, 08:51
|
Группа: Validating
Сообщений: 2
Регистрация: 15-04-06
Пользователь №: 16 139

|
Добрый день. Не могли бы растолковать как ИАР реализовывает битовые сдвиги. Интересует прежде всего аналоги команд ROL / ROR, т.е. не понятно как быть с битом "С" ? В "больших" Сях (например от микрософт) какой сдвиг реализовать компилятор выбирает из типа аргумента (unsigned/signed). А как здесь быть? Как написано в документации на 4.10 - <</>> делают только логический сдвиг (LSL/LSR). Как быть если нужен "зацикленный" сдвиг? Или может чего то я путаю? Заранее спасибо за разъяснения.
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Apr 15 2006, 10:25
|
Знающий
   
Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32

|
Нет такой операции в Си. Вообще, Си ничего не знает про флаг переноса. Нужно вращение бит - делайте ассемблерную вставку/подпрограмму или пользуйтесь конструкцией вида Код unsigned char n; //вращение байта вправо if (n&1) n = (n>>1)|0x80; else n >>= 1; //вращение байта влево if (n&0x80) n = (n<<1)|0x01; else n <<= 1; Сдвиг вправо зависит от того, unsigned аргумент (логический сдвиг) или signed (арифметический).
--------------------
Главная линия этого опуса ясна мне насквозь!
|
|
|
|
|
Apr 15 2006, 13:39
|
Группа: Validating
Сообщений: 2
Регистрация: 15-04-06
Пользователь №: 16 139

|
Цитата(vet @ Apr 15 2006, 14:25)  Нет такой операции в Си. Вообще, Си ничего не знает про флаг переноса. Нужно вращение бит - делайте ассемблерную вставку/подпрограмму или пользуйтесь конструкцией вида ***** скип *****
Сдвиг вправо зависит от того, unsigned аргумент (логический сдвиг) или signed (арифметический). Спасибо за ответ. Очень жаль, что он ("СИ") этого не понимает 8-( .Т.е. соответственно команды типа ADC, SBC и подобные не реализовывает?
|
|
|
|
|
Apr 15 2006, 13:50
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
"Внутри ", конечно, компилятор пользуется C-флагом, при сложениях-вычитаниях, многобайтовых сдвигах и т.д. Имелось в виду, что из Сишного кода нельзя напрямую достучаться до флага.
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|