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

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

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

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

26.04.2013, 19:36. Просмотров 8642. Ответов 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]
Как сделать , что бы работало все верно :?Заранее благодарю !!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
2775 / 1589 / 142
Регистрация: 03.12.2007
Сообщений: 4,162
Завершенные тесты: 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
Эксперт С++
4869 / 3008 / 370
Регистрация: 10.11.2010
Сообщений: 11,059
Записей в блоге: 10
Завершенные тесты: 1
27.04.2013, 17:18     Ассемблерные вставки в C++ #24
То что ты написал на самом деле чушь. Сегодня работает, завтра - нет.
Код работает не так как ты думаешь.
Kastaneda
Форумчанин
Эксперт С++
 Аватар для Kastaneda
4253 / 2785 / 219
Регистрация: 12.12.2009
Сообщений: 7,109
Записей в блоге: 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++
Еще ссылки по теме:

C++ Как делаются ассемблерные вставки?
Зачем нужны ассемблерные вставки в Си (msvs) ? C++
C++ Счетчик считающий нажатие клавиши (ассемблерные вставки)
Ассемблерные вставки в Visual DSP++ 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++
Ответ Создать тему
Опции темы

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