Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2016, 09:39   #1
elf2flash
 
Регистрация: 06.01.2016
Сообщений: 4
По умолчанию ассемблерный вставка в си++

Нужно вставить в си++ код (g++) асемблерную вставку, никак не выходит.
Исходный код такой:
uint a;
a = a +8;

Пишу следующее:
__asm__("add $8, a");

Компилятор выдает - undefined reference to 'a'
Оно понятно, в коде ассемблера вдруг появилась переменная.

Захожу с другой стороны:
__asm__("add %1, %2, %0" : "=r" (a) : "r" (a), "r"(8));
Теперь уже ассемблер пишет об ошибке:
number of operands mismatch for add

Нормальных примеров в гуглу не нашел, лепил из того что было,
понимаю, что пишу неверно, подскажите как правильно?
elf2flash вне форума Ответить с цитированием
Старый 12.04.2016, 09:49   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Попробуйте так:

1) объявите a обычной переменной
2) загрузите эти переменную в регистр
3) выполняйте операцию с регистром
4) записывайте результат обратно в переменную.

Можно попропобовать "сокращенный" вариант:
int a;
__asm__("add $8, a")

Но я просто уже не помню какие режимы адресации у инструкции add и может ли она складывать напрямую в память.
waleri вне форума Ответить с цитированием
Старый 12.04.2016, 20:53   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

http://www.ibiblio.org/gferg/ldp/GCC...bly-HOWTO.html
https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html
Можно, например, так:
Код:
__asm__("add $8, %0" : "+rm" (a));
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На каком Visual Studio можно отлаживать ассемблерный код для винды 32р седьмой Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 20.06.2017 17:01
Где достать программу которая составляет Ассемблерный текст по собранной блоксхеме? AlexeyR23 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 30.11.2011 02:59
Имеется ли у вас какой ассемблерный код? rusell Помощь студентам 5 04.11.2009 16:11
ассемблерный транслятор для новичка Oxy Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 08.10.2009 19:25