реклама на сайте
подробности

 
 
> Нужна помощь по С, SWAP на С
impuls-v
сообщение Jul 14 2006, 10:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Можеть комунибудь покажется этот вопрос дибильным, но может кто знает.
Нужно сделать простейшую операцию - обмен нимблов т.е. ассемблерная команда swap.
Но вот в С++ я не нашел такой.
Вроде чего тут сложного сделал ассемблерную вставку, но нужно чтобы программы была универсальной, т.е. если сделать вставку swap r25? я не знаю может потом r25 окажется занятым переменной и все собъется.
Как сделать обмен нимблов на С, подскажите плиз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Laksus
сообщение Jul 15 2006, 10:58
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



Цитата
Bill
...Вообще, лучше вставками не пользоваться. Вставки не дают возможность компилятору оптимизировать код.

Не могли бы Вы уточнить как не дают. Очень хорошо если бы
простейший пример.
_____________________________________
Вот тут попробовал в WinAVR20060421
unsigned char с1;
__________
Код
    c1 = PINC;
    asm ("swap %0" : "=r" (c1) : "0" (c1));
    PORTC = c1;
    asm("sleep");
********************************************
    c1 = PINC;
  72:    86 b1           in    r24, 0x06; 6
    asm ("swap %0" : "=r" (c1) : "0" (c1));
  74:    82 95           swap    r24
    PORTC = c1;
  76:    88 b9           out    0x08, r24; 8
    asm("sleep");

___________
а если c1 не используем и не применямем voletile
Код
    c1 = PINC;
    asm ("swap %0" : "=r" (c1) : "0" (c1));
    asm("sleep");
********************************************
    c1 = PINC;
  72:    86 b1           in    r24, 0x06; 6
    asm ("swap %0" : "=r" (c1) : "0" (c1));
    asm("sleep");
  74:    88 95           sleep

То есть, насколько я понимаю, оптимизация есть и с ассемблером.
____________
____________
А без ассемблера у меня получилось вот такой бред.
OPTIMIZE = -O3, без оптимизации еще хуже.
(WinAVR я только пытаюсь освоить, поэтому подозреваю что
сделал что-то не так):
Код
    c1 = PINC;
    c1 = (c1>>4)|(c1<<4);
    PORTC = c1;
    asm("sleep");
********************************************
    c1 = PINC;
  72:    26 b1           in    r18, 0x06; 6
    c1 = (c1>>4)|(c1<<4);
  74:    82 2f           mov    r24, r18
  76:    99 27           eor    r25, r25
  78:    82 95           swap    r24
  7a:    92 95           swap    r25
  7c:    90 7f           andi    r25, 0xF0; 240
  7e:    98 27           eor    r25, r24
  80:    80 7f           andi    r24, 0xF0; 240
  82:    98 27           eor    r25, r24
  84:    22 95           swap    r18
  86:    2f 70           andi    r18, 0x0F; 15
  88:    28 2b           or    r18, r24
    PORTC = c1;
  8a:    28 b9           out    0x08, r18; 8
    asm("sleep");
  8c:    88 95           sleep

__________
Александр
2006 07 15
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- impuls-v   Нужна помощь по С   Jul 14 2006, 10:22
- - Petka   Цитата(impuls-v @ Jul 14 2006, 14:22...   Jul 14 2006, 10:25
|- - otrog   Цитата(Petka @ Jul 14 2006, 14:25) c=(c...   Jul 14 2006, 11:20
|- - _Bill   Цитата(otrog @ Jul 14 2006, 14:20) Цитата...   Jul 14 2006, 11:27
|- - otrog   Цитата(_Bill @ Jul 14 2006, 15:27) Хм... ...   Jul 14 2006, 11:34
- - impuls-v   Черт спасибо попробую. Сначала была идея использов...   Jul 14 2006, 11:13
- - unichorn   Ндааа. Дешевле ассемблерную вставку сделать.   Jul 14 2006, 11:26
- - IgorKossak   В IAR есть такая функцияКод__intrinsic unsigned ch...   Jul 14 2006, 11:35
|- - otrog   Цитата(IgorKossak @ Jul 14 2006, 15:35) В...   Jul 14 2006, 11:42
- - impuls-v   Похоже эта темы вызвала обсуждение Ассемблерная вс...   Jul 14 2006, 11:37
|- - _Bill   Цитата(impuls-v @ Jul 14 2006, 14:37...   Jul 14 2006, 11:40
- - impuls-v   Вопервых откуда этот файл а во вторых нетрогать ас...   Jul 14 2006, 11:40
- - impuls-v   ЦитатаВообще, лучше вставками не пользоваться. Вст...   Jul 14 2006, 11:43
|- - _Bill   Цитата(impuls-v @ Jul 14 2006, 14:43...   Jul 14 2006, 12:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 05:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016