Форум программистов, компьютерный форум CyberForum.ru

Ошибка компиляции ассемблерной вставки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как скомпилировать проект чтобы вложились нужные библиотеки!!! http://www.cyberforum.ru/cpp/thread61994.html
Привет, народ может поможете. Как мне скомпилировать проект чтобы в папке с прогой, С++ вложил все нужные ей библиотеки, dll? (С++ Архитект 2009) ..............
C++ Игровой движок Какой движок бесплатный для комерческого использования лутше!Сейчас я разрабатываю игру можете вступить к нам у нас 3 программиста 2 модельера и 1 звукарь но я не об этом!Мне нужен двиг с хорошей графикой и эфектами (дым огонь и т.д) http://www.cyberforum.ru/cpp/thread61966.html
C++ Масивы в с++
В общем мне потребовалось написать лабу на тему "Строки" следующего содержания : "Ввести строку из нескольких фамилий отделенных запятыми , вставить имена для каждой фамилии и вывести на экран" У меня есть одна идея, как это осуществить- путём создания еще 1 массива и поиском в введенной строке запятой ,переносом фамилии до запятой во 2 массив,далее переносом имени и т.д....Но помоему есть...
C++ Microsoft Visual С# 2005
Доброго времени суток господа программисты=) у меня 2 вопроса есть по поводу Microsoft Visual C# 1) как сделать чтоб приложение не отображалось в процессах диспетчера задач(CTR+ALT+DEL) 2)как полностью убрать верхнюю синюю шапку в окне приложения ну прост оч надо помогите плиз
C++ Run-Time Check Failure #2 - Stack around the variable 'MX' was corrupted. http://www.cyberforum.ru/cpp/thread61757.html
Решаю задачу. Вот код: #include <iostream> using namespace std; int main () { int S; long long MX; for (int i=0;i<=100;i++) MX=0;
C++ Пропадают символы из char В классе есть метод, в который я передаю указатель на строку char. при пошаговой компиляции, выяснил, что когда я присваиваю эту строку переменной типа AnsiString, строка char обрезается по первый символ. Кто встречался с такой ошибкой, поделитесь опытом её решения, заранее спасибо. Вот код, может поможет: void TMyMask::insert_mask(char *stroka, int *mas) { unsigned int i=0,j=0,m=0;... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17398 / 5636 / 352
Регистрация: 30.03.2009
Сообщений: 15,422
Записей в блоге: 26
11.11.2009, 13:48     Ошибка компиляции ассемблерной вставки
Сразу на всякий случай скажу: есть два понятия:
- "синтаксис ассемблера" - зависит от архитектуры
- "формат ассемблерной вставки" (ассемблерная вставка это конструкция ЯЗЫКА GNU-C) - от архитектуры не зависит

По поводу документации. Я её нашёл, но хз насколько она окажется полезной. Дело было так, что партия сказала "надо", комсомол сказал "есть" и сделал абы как, лишь бы отстали. Т.е. документация скорее "чтоб было", чем "чтоб можно было пользоваться". Реально она больше введёт в заблуждение, т.к. описано на примере sparc. В общем я дла начала закину, а ты хоть базу почитай

=================================

GNU ассемблерная вставка по замыслу разработчиков является чёрным ящиком с параметрами, т.е. компилятор НЕ видит ассемблерного текста вставки, но видит описание всех ресурсов, которые подаются на вход вставки (input arguments), принимаются с выхода вставки (output arguments) и неявным образом портятся внутри вставки (clobbers)

Формат вставки такой:

C
1
asm ("<asm text>" : <input arguments> : <output arguments> : <clobbers>);
Рассмотрим сначала просто пример, как построить выражение 'x = y + z' при помощи
gnu ассемблерной вставки:

C
1
2
3
4
5
{
  int x, y, z;
  ...
  asm ("add %1, %2, %0" : "=r"(x) : "r"(y), "r"(z));
}
в данном случае:
* "add %1, %2, %0" - текст вставки,
* "=r"(x) - ВЫХодной аргумент (одна штука),
* "r"(y), "r"(z) - ВХодные аргументы (две штуки, перечисленные через запятую).
* clobber'ы в данной вставке отсутствуют, а потому не написаны

Описание аргументов вставки состоит из двух частей - в кавычках пишется модификатор (FIXME КАК ПРАВИЛЬНО НАЗЫВАЕТСЯ???) (только для output аргументов) и описание аппаратного ресурса, на который должен быть загружен аргумент вставки (это называют словом constraint). В круглых скобках пишется значение (value) аргумента: для input аргумента это rvalue expression (выражение, которое может стоять в правой части присваивания), для output аргумента - это lvalue expression (соответственно, выражение, которое может стоять в левой части присваивания)

Более детально будет расписано ниже, а пока только применительно к данному примеру. У output аргумента "=r"(x) в качестве модификатора стоИт символ '=', что означает аргумент строго на запись. В качестве constraint стоИт символ 'r', что означает целочисленный регистр, доступный компилятору для распределения. В качестве value стоИт x, это означает, что после кода вставки значение упомянутого регистра будет записано в переменную x. У input аргумента "r"(y) в качестве constraint так же стоит целочисленный регистр, в качестве value стоИт y, что означает, что перед кодом вставки значение переменной y будет загружено на регистр, который затем будет использоваться во вставке.

Текст вставки - это то, что в итоге попадает в выходной ассемблерный код, который строит компилятор. Символ % является управляющим. %0, %1 и %2 соответсвуют номерам аргументов в порядке их перечисления в конструкции asm начиная с нуля. В данном случае %0 соответствует аргументу "=r"(x), %1 соответствует аргументу "r"(y), а %2 соответствует аргументу "r"(z).

Добавлено через 56 секунд
Ну и в добавок, ты всегда можешь запустить gcc/g++ с опцией -S и посмотреть результирующий ассемблерный файл (чтобы визуально оценить, насколько правильный код построился)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru