Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/119: Рейтинг темы: голосов - 119, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
1

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

26.04.2013, 19:36. Просмотров 23662. Ответов 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]
Как сделать , что бы работало все верно :?Заранее благодарю !!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2013, 19:36
Ответы с готовыми решениями:

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

С++ + Ассемблерные вставки
Помогите с задачей:"Нахождение и отображение смежных групп цифр в числовой последовательности"....

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

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

25
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
27.04.2013, 16:47  [ТС] 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];
0
2818 / 1628 / 252
Регистрация: 03.12.2007
Сообщений: 4,223
27.04.2013, 17:06 22
Цитата Сообщение от z1p0 Посмотреть сообщение
Assembler
1
ADD EDX, dword ptr[4]
Что за? Это же с access violation должно вылететь с обращением по такому адресу.
0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
27.04.2013, 17:12  [ТС] 23
В регистре EDX у нас память ...С ней и работаем , увеличивая на 4 )))))

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

Добавлено через 29 секунд
Да , увеличивая на 4 - переходим к следующему элементу массива ЫЫЫЫ
0
Эксперт С++
4958 / 3064 / 456
Регистрация: 10.11.2010
Сообщений: 11,152
Записей в блоге: 10
27.04.2013, 17:18 24
То что ты написал на самом деле чушь. Сегодня работает, завтра - нет.
Код работает не так как ты думаешь.
0
Jesus loves me
Эксперт С++
5096 / 3110 / 351
Регистрация: 12.12.2009
Сообщений: 7,845
Записей в блоге: 2
27.04.2013, 18:33 25
Цитата Сообщение от z1p0 Посмотреть сообщение
Да , увеличивая на 4 - переходим к следующему элементу массива
твой код
Assembler
1
ADD EDX, dword ptr[EDX];
на С выглядет вот так
C++
1
2
int edx; // назовем переменную еdх для наглядности
edx += *((int*)4);
понимаешь, что ты написал?
0
0 / 0 / 0
Регистрация: 17.08.2012
Сообщений: 29
28.04.2013, 14:16  [ТС] 26
Хммм.... Ну тогда , намекните , как же написать правильно ???

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

Добавлено через 1 минуту
У , меня лично - мой вариант работает верно , но как понимаю - можно проще :?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2013, 14:16

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

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