Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблерная вставка в UNIX / 3 сообщений из 3, страница 1 из 1
17.03.2013, 21:04
    #38187359
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблерная вставка в UNIX
Добрый вечер.

Пишу на Cи под FreeBSD 9.1 на gcc.

Необходимо заменить ИСКЛЮЧАЮЩЕЕ ИЛИ на Cи на аналог ассемблерной вставкой.

Пишу код двумя способами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int res1, res2, aa = 0x5, bb = 0x3;
__asm__ ("xorl %%eax, %%ebx;"
             :"=a"(res1)        
             :"a"(aa),"b"(bb)        
             );
printf("xor (%X, %X) = %X (%X)\n", aa, bb, res1, aa^bb);
__asm__ ("movl %1, %%eax;"
         "movl %2, %%ebx;"
         "xorl %%eax, %%ebx;"
         "movl %%eax, %0;"
             :"=q"(res2)        
             :"q"(aa),"q"(bb)
             :"%eax", "%ebx"			 
             );
printf("xor (%X, %X) = %X (%X)\n", aa, bb, res2, aa^bb);



Вывод:
xor (5, 3) = 5 (6)
xor (5, 3) = 5 (6)

Как видно в обоих случаях получается не верное значение ( 5(101) XOR 3(011) = 6(110) ). После долгих тестов я понял что в результат у меня всегда записывается первый аргумент ( aa ).

Подскажите, как сделать эту элементарную операцию правильно??
...
Рейтинг: 0 / 0
18.03.2013, 02:28
    #38187492
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблерная вставка в UNIX
"xorl %%ebx, %%eax;"
Этож GNU синтакс а не Intel
Порядок операндов: откуда, куда.
...
Рейтинг: 0 / 0
18.03.2013, 13:30
    #38187924
HellFighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ассемблерная вставка в UNIX
Да, спасибо, вот как раз на третий день меня это осенило само минут 10 назад)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Ассемблерная вставка в UNIX / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]