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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.79
z1p0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
#1

Ассемблерные вставки в C++ - C++

26.04.2013, 19:36. Просмотров 10275. Ответов 25
Метки нет (Все метки)

Собственно сабж ...:
Имею следующий код :
C++
1
2
3
4
5
    short Carry = 2;
    unsigned short Mas[3];
    Mas[0] = 12;
    Mas[1] = 13;
    Mas[2] = 14;
Пытаюсь , в ассемблерной вставке , обратиться к первому элементу массива (не нулевому) ... Делаю так :
Assembler
1
2
3
4
    _asm{
        MOV AX,Mas+Carry;
        ADC [Mas], AX;
    }
Но , вылетает ошибка , во время работы программы ...В дизассамблере смотрю , и вижу :
Assembler
1
2
        MOV AX,Mas+Carry;
0041158C  mov         ax,word ptr [ebp+ebp-0Ch]
Как сделать , что бы работало все верно :?Заранее благодарю !!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2013, 19:36     Ассемблерные вставки в C++
Посмотрите здесь:

Ассемблерные вставки - C++
Будут ли у меня проблемы, если я, поработав с регистрами, не восстановлю их после выхода из вставки? Если проблем не будет, то их не будет...

Ассемблерные вставки, ошибка - C++
Ошибка: 0xC0000095: Integer overflow. Код: mov eax,x sub eax,a mov ebx,x sub ebx,c div ebx - здесь ошибка mov f,ebx

Ассемблерные вставки пример - C++
помогите пожалуйста решить вот условие: y1 = 8 +|x|, если x<1 иначе y1 = 3, если x>=1 y2 = |a|*2, если x>=1 иначе y2 =...

Ассемблерные вставки (Часть 3) - C++
На 4 шаге ошибка -nan(ind). Не могу разобраться... #include<iostream> using namespace std; int main() { int n = 6.0; int...

Как делаются ассемблерные вставки? - C++
Я слышал, что в С++ можно вставлять вставки на асм, как это делается? Спасибо.

Ассемблерные вставки в Visual DSP++ - C++
Добрый вечер, необходимо вставить ассемблерный код ( или файл на ассемблере подключить в с++) в visual DSP++. Насколько знаю, в visual...

Ассемблерные вставки в C++. Алгоритм сортировки слиянием - C++
Нужна помощь.Необходимо реализовать алгоритм сортировки слиянием по возрастанию из элементов массивов, отсортированный по убыванию. Пишу в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
26.04.2013, 23:22     Ассемблерные вставки в C++ #16
Цитата Сообщение от lazybiz Посмотреть сообщение
тут есть пример вставки
Я уже на это натыкался. Больше скажу. В википедии есть даже полный список команд, но дело в том что примерно на половину там нет описания... У Интела я натыкался на программу, содержащую полный список всех интринсиков и описаний к ним. Хотелось бы что-то подобное, но для ассемлерных команд.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.04.2013, 23:33     Ассемблерные вставки в C++ #17
А разве описание интринсиктов не соответствует описанию инструкций?
http://concatenative.org/wiki/view/SSE

Добавлено через 7 минут
Там если плясать от ссылки то все можно найти.
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
27.04.2013, 00:14     Ассемблерные вставки в C++ #18
lazybiz, спасибо за ссылку. Что-то в этом есть. Отписание интринсиков то в целом соответствует, но вот проблема в том, что не для всех интеловских ассемблерных команд реализованы интринсики.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
27.04.2013, 09:23     Ассемблерные вставки в C++ #19
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Лучшим решением бы было перечисление всех команд с их описанием
Гугли "Intel® 64 and IA-32 Architectures Software Developer’s Manual", там описание всех интеловский инструкций.
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
27.04.2013, 09:57     Ассемблерные вставки в C++ #20
Цитата Сообщение от Kastaneda Посмотреть сообщение
там описание всех интеловский инструкций.
Круто. Документация прям томами идет =)) Спасибо большое!
z1p0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
27.04.2013, 16:47  [ТС]     Ассемблерные вставки в C++ #21
Ну , у меня все же еще вопрос остался ....Вот вы , мне привели пример - он работает , и при том как надо ... Но , здесь как видно , объявляются сразу все элементы массива ... А как быть , если , у меня ссылка на массив , а в каком либо конструкторе класса , я выделяю память под него динамически , с помощью оператора NEW ... ?
Пример выше , не помогает , как ни странно ... - работает не верно ...

Добавлено через 45 минут
Разобрался , тему моно закрывать ...

P.S :
Assembler
1
2
3
4
        MOV EDX, arr;
        ADD EDX, dword ptr[4];
        ADD EDX, dword ptr[4];
        MOV EAX, dword ptr[EDX];
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
27.04.2013, 17:06     Ассемблерные вставки в C++ #22
Цитата Сообщение от z1p0 Посмотреть сообщение
Assembler
1
ADD EDX, dword ptr[4]
Что за? Это же с access violation должно вылететь с обращением по такому адресу.
z1p0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
27.04.2013, 17:12  [ТС]     Ассемблерные вставки в C++ #23
В регистре EDX у нас память ...С ней и работаем , увеличивая на 4 )))))

Добавлено через 18 секунд
Все ок - проверено !!! :]

Добавлено через 29 секунд
Да , увеличивая на 4 - переходим к следующему элементу массива ЫЫЫЫ
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
27.04.2013, 17:18     Ассемблерные вставки в C++ #24
То что ты написал на самом деле чушь. Сегодня работает, завтра - нет.
Код работает не так как ты думаешь.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,250
Записей в блоге: 1
Завершенные тесты: 1
27.04.2013, 18:33     Ассемблерные вставки в C++ #25
Цитата Сообщение от z1p0 Посмотреть сообщение
Да , увеличивая на 4 - переходим к следующему элементу массива
твой код
Assembler
1
ADD EDX, dword ptr[EDX];
на С выглядет вот так
C++
1
2
int edx; // назовем переменную еdх для наглядности
edx += *((int*)4);
понимаешь, что ты написал?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 14:16     Ассемблерные вставки в C++
Еще ссылки по теме:

Зачем нужны ассемблерные вставки в Си (msvs) ? - C++
Объясните мне, человеку, который пока не знает ассемблер, но который хочет его в дальнейшем изучать, на кой черт нужны ассемблерные вставки...

Счетчик считающий нажатие клавиши (ассемблерные вставки) - C++
Я ещё новичок и не очень шарю в программировании,если кто поможет буду признателен :(.Нужно что бы программа считала сколько раз...

Асемблерные вставки - C++
Здравствуйте! Можете посоветовать литературу (или если у кого есть исходники) по поводу того как делать вставки AMS в C++ Builder. ...

Ассеблерные вставки в C++ - C++
Потребовалось написать простенький, по идее код, в котором замерялось бы количество тактов процессора, затрачиваемых на определенный...

Ассемблеровские вставки в C++ - C++
Подскажите, пожалуйста, как в таких вставках в C++ сделтаь массив чисел (или строк) везде написано одно и то же, вот как здесь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
z1p0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
28.04.2013, 14:16  [ТС]     Ассемблерные вставки в C++ #26
Хммм.... Ну тогда , намекните , как же написать правильно ???

Добавлено через 1 минуту
Как , я написал выше - если массив задается константно - то все работает , как надо Но если по указателю ... то нет:|

Добавлено через 1 минуту
У , меня лично - мой вариант работает верно , но как понимаю - можно проще :?
Yandex
Объявления
28.04.2013, 14:16     Ассемблерные вставки в C++
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru